Index: /trunk/zoo-project/zoo-kernel/service_internal.c
===================================================================
--- /trunk/zoo-project/zoo-kernel/service_internal.c	(revision 500)
+++ /trunk/zoo-project/zoo-kernel/service_internal.c	(revision 501)
@@ -36,4 +36,20 @@
 #define FALSE -1
 #endif
+
+int isValidLang(maps* conf,const char *str){
+  map *tmpMap=getMapFromMaps(conf,"main","lang");
+  char *tmp=zStrdup(tmpMap->value);
+  char *pToken=strtok(tmp,",");
+  int res=-1;
+  while(pToken!=NULL){
+    if(strcasecmp(str,pToken)==0){
+      res=1;
+      break;
+    }
+    pToken = strtok(NULL,",");
+  }
+  free(tmp);
+  return res;
+}
 
 void printHeaders(maps* m){
Index: /trunk/zoo-project/zoo-kernel/service_internal.h
===================================================================
--- /trunk/zoo-project/zoo-kernel/service_internal.h	(revision 500)
+++ /trunk/zoo-project/zoo-kernel/service_internal.h	(revision 501)
@@ -94,5 +94,5 @@
   int getServiceFromYAML(maps*,char*,service**,char *name);
   int readServiceFile(maps*, char*,service**,char *);
-  
+  int isValidLang(maps*,const char*);
 
   void printHeaders(maps*);
Index: /trunk/zoo-project/zoo-kernel/zoo_service_loader.c
===================================================================
--- /trunk/zoo-project/zoo-kernel/zoo_service_loader.c	(revision 500)
+++ /trunk/zoo-project/zoo-kernel/zoo_service_loader.c	(revision 501)
@@ -732,4 +732,15 @@
     r_inputs=getMapFromMaps(m,"main","language");
   if(r_inputs!=NULL){
+    if(isValidLang(m,r_inputs->value)<0){
+      char tmp[1024];
+      sprintf(tmp,_("The value %s is not supported for the <language> parameter"),
+	      r_inputs->value);
+      errorException(m, tmp,"InvalidParameterValue","language");
+      freeMaps(&m);
+      free(m);
+      free(REQUEST);
+      return 1;
+
+    }
     char *tmp=zStrdup(r_inputs->value);
     setMapInMaps(m,"main","language",tmp);
@@ -777,5 +788,9 @@
   if(strlen(cgiServerName)>0){
     char tmpUrl[1024];
-    sprintf(tmpUrl,"http://%s%s",cgiServerName,cgiScriptName);
+    if(strncmp(cgiServerPort,"80",2)==0){
+      sprintf(tmpUrl,"http://%s%s",cgiServerName,cgiScriptName);
+    }else{
+      sprintf(tmpUrl,"http://%s:%s%s",cgiServerName,cgiServerPort,cgiScriptName);
+    }
 #ifdef DEBUG
     fprintf(stderr,"*** %s ***\n",tmpUrl);
@@ -803,5 +818,5 @@
        && strncasecmp(r_inputs->value,"DescribeProcess",15)!=0
        && strncasecmp(r_inputs->value,"Execute",7)!=0){ 
-      errorException(m, _("Unenderstood <request> value. Please check that it was set to GetCapabilities, DescribeProcess or Execute."), "InvalidParameterValue","request");
+      errorException(m, _("Unenderstood <request> value. Please check that it was set to GetCapabilities, DescribeProcess or Execute."), "OperationNotSupported",r_inputs->value);
       freeMaps(&m);
       free(m);
@@ -844,4 +859,15 @@
       }
     } 
+  }else{
+    r_inputs=getMap(request_inputs,"AcceptVersions");
+    if(r_inputs!=NULL){ 
+      if(strncmp(r_inputs->value,"1.0.0",5)!=0){
+      errorException(m, _("Unenderstood <AcceptVersions> value, 1.0.0 is the only acceptable value."), "VersionNegotiationFailed",NULL);
+	freeMaps(&m);
+	free(m);
+	free(REQUEST);
+	return 1;
+      }
+    }
   }
 
