Index: /trunk/zoo-project/zoo-kernel/service_conf.y
===================================================================
--- /trunk/zoo-project/zoo-kernel/service_conf.y	(revision 504)
+++ /trunk/zoo-project/zoo-kernel/service_conf.y	(revision 505)
@@ -802,5 +802,4 @@
   srin = fopen(file,"r");
   if (srin==NULL){
-    fprintf(stderr,"error : file not found\n") ;
     setMapInMaps(conf,"lenv","message","file not found");
     return -1;
Index: /trunk/zoo-project/zoo-kernel/service_internal.c
===================================================================
--- /trunk/zoo-project/zoo-kernel/service_internal.c	(revision 504)
+++ /trunk/zoo-project/zoo-kernel/service_internal.c	(revision 505)
@@ -3105,4 +3105,5 @@
       if(tmpMap==NULL || strlen(tmpMap->value)==0){
 	char *tmp01=zStrdup(tmp00->value);
+	tmp01[strlen(tmp01)-1]=0;
 	setMapInMaps(conf,"lenv","metapath",tmp01);
 	free(tmp01);
@@ -3111,8 +3112,11 @@
       else{
 	if(tmp00!=NULL && tmpMap!=NULL){
-	  char *value=(char*)malloc((strlen(tmp00->value)+strlen(tmpMap->value)+2)*sizeof(char));
-	  sprintf(value,"%s/%s",tmpMap->value,tmp00->value);
+	  char *tmp00s=zStrdup(tmp00->value);
+	  tmp00s[strlen(tmp00s)-1]=0;
+	  char *value=(char*)malloc((strlen(tmp00s)+strlen(tmpMap->value)+2)*sizeof(char));
+	  sprintf(value,"%s/%s",tmpMap->value,tmp00s);
 	  setMapInMaps(conf,"lenv","metapath",value);
 	  free(value);
+	  free(tmp00s);
 	  value=NULL;
 	}
Index: /trunk/zoo-project/zoo-kernel/service_internal_js.c
===================================================================
--- /trunk/zoo-project/zoo-kernel/service_internal_js.c	(revision 504)
+++ /trunk/zoo-project/zoo-kernel/service_internal_js.c	(revision 505)
@@ -147,5 +147,5 @@
   void* cxPrivate = request;
   JS_SetContextPrivate(cx,cxPrivate);
-    
+
   map* tmpm1=getMap(request,"metapath");
   char ntmp[1024];
@@ -155,6 +155,6 @@
    * Load the first part of the ZOO-API
    */
-  char *api0=(char*)malloc(strlen(tmpm1->value)+strlen(ntmp)+17);
-  sprintf(api0,"%s/%s/ZOO-proj4js.js",ntmp,tmpm1->value);
+  char *api0=(char*)malloc((strlen(ntmp)+17)*sizeof(char));
+  sprintf(api0,"%s/ZOO-proj4js.js",ntmp);
 #ifdef JS_DEBUG
   fprintf(stderr,"Trying to load %s\n",api0);
@@ -164,6 +164,6 @@
   fflush(stderr);
 
-  char *api1=(char*)malloc(strlen(tmpm1->value)+strlen(ntmp)+13);
-  sprintf(api1,"%s/%s/ZOO-api.js",ntmp,tmpm1->value);
+  char *api1=(char*)malloc((strlen(ntmp)+13)*sizeof(char));
+  sprintf(api1,"%s/ZOO-api.js",ntmp);
 #ifdef JS_DEBUG
   fprintf(stderr,"Trying to load %s\n",api1);
Index: /trunk/zoo-project/zoo-kernel/service_internal_python.c
===================================================================
--- /trunk/zoo-project/zoo-kernel/service_internal_python.c	(revision 504)
+++ /trunk/zoo-project/zoo-kernel/service_internal_python.c	(revision 505)
@@ -193,6 +193,26 @@
   PyObject *pName, *pModule, *pFunc;
   tmp=getMap(s->content,"serviceProvider");
-  if(tmp!=NULL)
-    pName = PyString_FromString(tmp->value);
+  map* mp=getMap(request,"metapath");
+  if(tmp!=NULL){
+    if(mp!=NULL && strlen(mp->value)>0){
+      char *mps=zStrdup(mp->value);
+      int i,len=strlen(mps);
+      int j=0;
+      for(i=0;i<len;i++){
+	if(mps[i]=='/'){
+	  mps[i]='.';
+	}
+      }
+      char *mn=(char*)malloc((strlen(mps)+strlen(tmp->value)+2)*sizeof(char));
+      sprintf(mn,"%s.%s",mps,tmp->value);
+      pName = PyString_FromString(mn);
+      free(mn);
+      free(mps);
+    }
+    else{
+      pName = PyString_FromString(tmp->value);
+      fprintf(stderr,"%s %d",tmp->value,__LINE__);
+    }
+  }
   else{
     map* err=createMap("text","Unable to parse serviceProvider please check your zcfg file.");
@@ -457,4 +477,5 @@
 #endif
   }
+  Py_DECREF(list);
   return res;
 }
@@ -507,4 +528,5 @@
     }
   }
+  Py_DECREF(list);
   return res;
 }
