Index: /trunk/zoo-project/zoo-kernel/service_internal.c
===================================================================
--- /trunk/zoo-project/zoo-kernel/service_internal.c	(revision 619)
+++ /trunk/zoo-project/zoo-kernel/service_internal.c	(revision 620)
@@ -195,5 +195,4 @@
     sem_id = CreateSemaphore( NULL, nsems, nsems+1, key);
     if(sem_id==NULL){
-
 #ifdef DEBUG
       fprintf(stderr,"Semaphore failed to create: %s\n", getLastErrorMessage());
@@ -2056,6 +2055,12 @@
   if(hasStoredExecuteResponse==true && status!=SERVICE_STARTED){
     semid lid=getShmLockId(m,1);
-    if(lid<0)
+    if(lid<0){
+      /* If the lock failed */
+      errorException(m,_("Lock failed."),"InternalError",NULL);
+      xmlFreeDoc(doc);
+      xmlCleanupParser();
+      zooXmlCleanupNs();
       return;
+    }
     else{
 #ifdef DEBUG
Index: /trunk/zoo-project/zoo-kernel/zoo_service_loader.c
===================================================================
--- /trunk/zoo-project/zoo-kernel/zoo_service_loader.c	(revision 619)
+++ /trunk/zoo-project/zoo-kernel/zoo_service_loader.c	(revision 620)
@@ -2626,6 +2626,33 @@
                                                 size);
                                       xmlFreeDoc (doc1);
-                                    }									
-                                }
+                                    }
+				  else
+				    {
+				      if (cur5 != NULL
+					  && cur5->type == XML_CDATA_SECTION_NODE){
+					xmlDocPtr doc2 = xmlParseMemory((const char*)cur5->content,xmlStrlen(cur5->content));
+					xmlDocSetRootElement (doc1,xmlDocGetRootElement(doc2));
+					xmlDocDumpFormatMemoryEnc (doc1, &mv,
+								   &buffersize,
+								   "utf-8", 1);
+					char size[1024];
+					sprintf (size, "%d", buffersize);
+					addToMap (tmpmaps->content, "size",
+						  size);
+					xmlFreeDoc (doc2);
+					xmlFreeDoc (doc1);
+				      }
+				    }
+                                }else{
+				xmlNodePtr cur5 = cur4->children;
+				while (cur5 != NULL
+				       && cur5->type != XML_CDATA_SECTION_NODE)
+				  cur5 = cur5->next;
+				if (cur5 != NULL
+				    && cur5->type == XML_CDATA_SECTION_NODE){
+				  xmlFree(mv);
+				  mv=xmlStrdup(cur5->content);
+				}
+			      }
                               if (mv != NULL)
                                 {
