Index: /trunk/zoo-project/zoo-kernel/service.h
===================================================================
--- /trunk/zoo-project/zoo-kernel/service.h	(revision 361)
+++ /trunk/zoo-project/zoo-kernel/service.h	(revision 362)
@@ -645,12 +645,11 @@
 
   static int addMapsArrayToMaps(maps** mo,maps* mi,char* typ){
-    maps* tmp=mi;
-    maps* _cursor=*mo;
-    maps* tmpMaps=getMaps(_cursor,tmp->name);
-
-    if(tmpMaps==NULL)
+    maps* tmp=mi;    
+    maps* _cursor=getMaps(*mo,tmp->name);
+
+    if(_cursor==NULL)
       return -1;
 
-    map* tmpLength=getMap(tmpMaps->content,"length");
+    map* tmpLength=getMap(_cursor->content,"length");
     char tmpLen[10];
     int len=1;
Index: /trunk/zoo-project/zoo-kernel/service_internal_ms.c
===================================================================
--- /trunk/zoo-project/zoo-kernel/service_internal_ms.c	(revision 361)
+++ /trunk/zoo-project/zoo-kernel/service_internal_ms.c	(revision 362)
@@ -175,5 +175,6 @@
       OSRImportFromWkt( hSRS, &pszProjection ) == CE_None ){
     char *proj4Str=NULL;
-    if(OSRGetAuthorityName(hSRS,NULL)!=NULL && OSRGetAuthorityCode(hSRS,NULL)!=NULL){
+    if(OSRGetAuthorityName(hSRS,NULL)!=NULL && 
+       OSRGetAuthorityCode(hSRS,NULL)!=NULL){
       char tmpSrs[20];
       sprintf(tmpSrs,"%s:%s",
@@ -236,8 +237,4 @@
     }
     if(msSrs!=NULL){
-      if(output!=NULL){
-	addToMap(output->content,"crs",msSrs->value);
-	addToMap(output->content,"crs_isGeographic","true");
-      }
       msLoadProjectionStringEPSG(&m->projection,msSrs->value);
       msLoadProjectionStringEPSG(&myLayer->projection,msSrs->value);
@@ -247,12 +244,12 @@
       msInsertHashTable(&(myLayer->metadata),"ows_srs",tmpSrs);
     }else{
-      if(output!=NULL){
-	addToMap(output->content,"crs","EPSG:4326");
-	addToMap(output->content,"crs_isGeographic","true");
-      }
       msLoadProjectionStringEPSG(&m->projection,"EPSG:4326");
       msLoadProjectionStringEPSG(&myLayer->projection,"EPSG:4326");
       msInsertHashTable(&(m->web.metadata),"ows_srs","EPSG:4326 EPSG:900913");
       msInsertHashTable(&(myLayer->metadata),"ows_srs","EPSG:4326 EPSG:900913");
+    }
+    if(output!=NULL){
+      addToMap(output->content,"crs",msSrs->value);
+      addToMap(output->content,"crs_isGeographic","true");
     }
   }
Index: /trunk/zoo-project/zoo-kernel/zoo_service_loader.c
===================================================================
--- /trunk/zoo-project/zoo-kernel/zoo_service_loader.c	(revision 361)
+++ /trunk/zoo-project/zoo-kernel/zoo_service_loader.c	(revision 362)
@@ -99,11 +99,22 @@
  */
 int appendMapsToMaps(maps* m,maps* mo,maps* mi,elements* elem){
-
-  map* tmap=getMapType(mo->content);
+  maps* tmpMaps=getMaps(mo,mi->name);
+  map* tmap=getMapType(tmpMaps->content);
+  elements* el=getElements(elem,mi->name);
+  int hasEl=1;
+  if(el==NULL)
+    hasEl=-1;
   if(tmap==NULL){
-    tmap=getMapType(elem->defaults->content);
-  }
-
-  map* testMap=getMap(elem->content,"maxOccurs");
+    if(hasEl>0)
+      tmap=getMapType(el->defaults->content);      
+  }
+
+  map* testMap=NULL;
+  if(hasEl>0){
+    testMap=getMap(el->content,"maxOccurs");
+  }else{
+    testMap=createMap("maxOccurs","unbounded");
+  }
+
   if(testMap!=NULL){
     if(strncasecmp(testMap->value,"unbounded",9)!=0 && atoi(testMap->value)>1){
@@ -116,4 +127,8 @@
     }else{
       if(strncasecmp(testMap->value,"unbounded",9)==0){
+	if(hasEl<0){
+	  freeMap(&testMap);
+	  free(testMap);
+	}
 	if(addMapsArrayToMaps(&mo,mi,tmap->name)<0){
 	  char emsg[1024];
