Index: src/arm/arm_api.c
===================================================================
--- src/arm/arm_api.c	(revision 30501)
+++ src/arm/arm_api.c	(working copy)
@@ -756,9 +756,12 @@
   unsigned char test_is_active;
   char *cbinary;
   char *binary;
+  char *quotedbinary;
   char *config;
   char *loprefix;
   char *lopostfix;
+  int binaryLen;
+  
 
   test_is_active = cm->h->service_test_is_active;
   if ((GNUNET_YES == test_is_active) &&
@@ -814,6 +817,16 @@
       cm->h->cfg, "arm", "CONFIG", &config))
     config = NULL;
   binary = GNUNET_OS_get_libexec_binary_path (cbinary);
+  //Surround in quotes
+  binaryLen = strlen(binary);
+  quotedbinary = GNUNET_malloc ((binaryLen + 3) * sizeof (char *));
+  quotedbinary[0] = '"';
+  strcpy(&quotedbinary[1],binary);
+  quotedbinary[binaryLen + 1] = '"';
+  quotedbinary[binaryLen + 2] = '\0';
+  
+  
+  
   GNUNET_free (cbinary);
   if ((GNUNET_YES == GNUNET_CONFIGURATION_have_value (
           cm->h->cfg, "TESTING", "WEAKRANDOM")) &&
@@ -826,12 +839,12 @@
     /* we're clearly running a test, don't daemonize */
     if (NULL == config)
       proc = do_start_process (GNUNET_NO, cm->std_inheritance,
-			       NULL, loprefix, binary,
+			       NULL, loprefix, quotedbinary,
 			       /* no daemonization! */
 			       lopostfix, NULL);
     else
       proc = do_start_process (GNUNET_NO, cm->std_inheritance,
-			       NULL, loprefix, binary, "-c", config,
+			       NULL, loprefix, quotedbinary, "-c", config,
 			       /* no daemonization! */
 			       lopostfix, NULL);
   }
@@ -839,14 +852,15 @@
   {
     if (NULL == config)
       proc = do_start_process (GNUNET_NO, cm->std_inheritance,
-			       NULL, loprefix, binary,
+			       NULL, loprefix, quotedbinary,
 			       "-d", lopostfix, NULL);
     else
       proc = do_start_process (GNUNET_NO, cm->std_inheritance,
-			       NULL, loprefix, binary, "-c", config,
+			       NULL, loprefix, quotedbinary, "-c", config,
 			       "-d", lopostfix, NULL);
   }
   GNUNET_free (binary);
+  GNUNET_free (quotedbinary);
   GNUNET_free_non_null (config);
   GNUNET_free (loprefix);
   GNUNET_free (lopostfix);
Index: src/arm/do_start_process.c
===================================================================
--- src/arm/do_start_process.c	(revision 30501)
+++ src/arm/do_start_process.c	(working copy)
@@ -50,6 +50,9 @@
   const char *last;
   struct GNUNET_OS_Process *proc;
   char *binary_path;
+  int quote_on;
+  int i;
+  int len;
 
   argv_size = 1;
   va_start (ap, first_arg);
@@ -62,8 +65,18 @@
   rpos = arg;
   while ('\0' != *rpos)
     {
-      if (' ' == *rpos)
+	
+	  if ('"' == *rpos)
 	{
+		if(quote_on == 1)
+		  quote_on =0;
+		else
+			quote_on =1;
+
+	}
+	
+      if ((' ' == *rpos)&&(quote_on == 0))
+	{
 	  if (last != NULL)
 	    argv_size++;
 	  last = NULL;
@@ -83,6 +96,7 @@
 /* *INDENT-ON* */
   va_end (ap);
 
+  quote_on =0;
   argv = GNUNET_malloc (argv_size * sizeof (char *));
   argv_size = 0;
   va_start (ap, first_arg);
@@ -96,8 +110,18 @@
   pos = cp;
   while ('\0' != *pos)
     {
-      if (' ' == *pos)
+	
+	  if ('"' == *pos)
 	{
+		if(quote_on == 1)
+		  quote_on =0;
+		else
+			quote_on =1;
+
+	}
+	
+      if ((' ' == *pos)&&(quote_on == 0))
+	{
 	  *pos = '\0';
 	  if (last != NULL)
 	    argv[argv_size++] = GNUNET_strdup (last);
@@ -121,7 +145,19 @@
 /* *INDENT-ON* */
   va_end (ap);
   argv[argv_size] = NULL;
-  binary_path = argv[0];
+ 
+  
+  for(i = 0; i < argv_size; i++){
+	len = strlen(argv[i]);
+	if((argv[i][0] == '"')&& (argv[i][len-1] == '"'))
+		{
+			argv[i][len-1] = '\0';
+			argv[i]++;
+		
+		}
+  }
+   binary_path = argv[0];
+  
   proc = GNUNET_OS_start_process_v (pipe_control, std_inheritance, lsocks,
 				    binary_path, argv);
   while (argv_size > 0)
Index: src/arm/gnunet-service-arm.c
===================================================================
--- src/arm/gnunet-service-arm.c	(revision 30501)
+++ src/arm/gnunet-service-arm.c	(working copy)
@@ -414,6 +414,8 @@
   SOCKTYPE *lsocks;
   unsigned int ls;
   char *binary;
+  char *quotedbinary;
+  int binaryLen;
 
   /* calculate listen socket list */
   lsocks = NULL;
@@ -486,6 +488,16 @@
 	      "Starting service `%s' using binary `%s' and configuration `%s'\n",
 	      sl->name, sl->binary, sl->config);
   binary = GNUNET_OS_get_libexec_binary_path (sl->binary);
+  
+    //Surround in quotes
+  binaryLen = strlen(binary);
+  quotedbinary = GNUNET_malloc ((binaryLen + 3) * sizeof (char *));
+  quotedbinary[0] = '"';
+  strcpy(&quotedbinary[1],binary);
+  quotedbinary[binaryLen + 1] = '"';
+  quotedbinary[binaryLen + 2] = '\0';
+  
+  
   GNUNET_assert (NULL == sl->proc);
   if (GNUNET_YES == use_debug)
   {
@@ -492,12 +504,12 @@
     if (NULL == sl->config)
       sl->proc =
 	do_start_process (sl->pipe_control, GNUNET_OS_INHERIT_STD_OUT_AND_ERR,
-			  lsocks, loprefix, binary, "-L",
+			  lsocks, loprefix, quotedbinary, "-L",
 			  "DEBUG", options, NULL);
     else
       sl->proc =
 	do_start_process (sl->pipe_control, GNUNET_OS_INHERIT_STD_OUT_AND_ERR,
-			  lsocks, loprefix, binary, "-c", sl->config, "-L",
+			  lsocks, loprefix, quotedbinary, "-c", sl->config, "-L",
 			  "DEBUG", options, NULL);
   }
   else
@@ -505,15 +517,16 @@
     if (NULL == sl->config)
       sl->proc =
 	do_start_process (sl->pipe_control, GNUNET_OS_INHERIT_STD_OUT_AND_ERR,
-			  lsocks, loprefix, binary,
+			  lsocks, loprefix, quotedbinary,
 			  options, NULL);
     else
       sl->proc =
 	do_start_process (sl->pipe_control, GNUNET_OS_INHERIT_STD_OUT_AND_ERR,
-			  lsocks, loprefix, binary, "-c", sl->config,
+			  lsocks, loprefix, quotedbinary, "-c", sl->config,
 			  options, NULL);
   }
   GNUNET_free (binary);
+  GNUNET_free (quotedbinary);
   if (sl->proc == NULL)
   {
     GNUNET_log (GNUNET_ERROR_TYPE_ERROR, _("Failed to start service `%s'\n"),
