Index: trunk/zoo-kernel/service_internal.c
===================================================================
--- trunk/zoo-kernel/service_internal.c	(revision 87)
+++ trunk/zoo-kernel/service_internal.c	(revision 88)
@@ -1758,4 +1758,41 @@
 }
 
+char *base64d(unsigned char *input, int length,int* red)
+{
+  BIO *b64, *bmem;
+
+  char *buffer = (char *)malloc(length);
+  memset(buffer, 0, length);
+
+  b64 = BIO_new(BIO_f_base64());
+  bmem = BIO_new_mem_buf(input, length);
+  bmem = BIO_push(b64, bmem);
+
+  *red=BIO_read(bmem, buffer, length);
+
+  BIO_free_all(bmem);
+
+  return buffer;
+}
+
+void ensureDecodedBase64(maps **in){
+  maps* cursor=*in;
+  while(cursor!=NULL){
+    map *tmp=getMap(cursor->content,"encoding");
+    if(tmp!=NULL && strncasecmp(tmp->value,"base64",6)==0){
+      tmp=getMap(cursor->content,"value");
+      addToMap(cursor->content,"base64_value",tmp->value);
+      char *s=strdup(tmp->value);
+      free(tmp->value);
+      int size=0;
+      tmp->value=base64d(s,strlen(s),&size);
+      char sizes[1024];
+      sprintf(sizes,"%d",size);
+      addToMap(cursor->content,"size",sizes);
+    }
+    cursor=cursor->next;
+  }
+}
+
 char* addDefaultValues(maps** out,elements* in,maps* m,int type){
   elements* tmpInputs=in;
@@ -1802,4 +1839,5 @@
 	}
       }
+      addToMap(tmpMaps2->content,"inRequest","false");
       if(type==1){
 	map *tmpMap=getMap(tmpMaps2->content,"value");
@@ -1823,5 +1861,5 @@
       iotype* tmpIoType=getIoTypeFromElement(tmpInputs,tmpInputs->name,
 					     tmpMaps->content);
-
+      addToMap(tmpMaps->content,"inRequest","true");
       if(type==0) {
 	/**
Index: trunk/zoo-kernel/service_internal.h
===================================================================
--- trunk/zoo-kernel/service_internal.h	(revision 87)
+++ trunk/zoo-kernel/service_internal.h	(revision 88)
@@ -107,4 +107,6 @@
 
   char *base64(const unsigned char*,int);
+  char *base64d(unsigned char*,int,int*);
+  void ensureDecodedBase64(maps**);
 
   char* addDefaultValues(maps**,elements*,maps*,int);
Index: trunk/zoo-kernel/zoo_service_loader.c
===================================================================
--- trunk/zoo-kernel/zoo_service_loader.c	(revision 87)
+++ trunk/zoo-kernel/zoo_service_loader.c	(revision 88)
@@ -1648,4 +1648,6 @@
   addDefaultValues(&request_output_real_format,s1->outputs,m,1);
 
+  ensureDecodedBase64(&request_input_real_format);
+
 #ifdef DEBUG
   fprintf(stderr,"REQUEST_INPUTS\n");
