--- server.c.orig	2009-01-09 00:30:10.000000000 +0800
+++ server.c	2009-01-13 18:55:23.000000000 +0800
@@ -529,6 +529,7 @@
 }
 
 #define REQUESTLEN 2048
+#define SEPARATOR ":"
 
 void *
 server_thread (void *arg)
@@ -538,6 +539,8 @@
    client_t client;
    char remote_ip[16];
    char request[REQUESTLEN];
+   char *request_chunk;
+   char *request_pointer;
    llist_entry *le;
    datum_t rootdatum;
 
@@ -619,11 +622,25 @@
          rootdatum.data = &root;
          rootdatum.size = sizeof(root);
 
-         if (process_path(&client, request, &rootdatum, NULL))
-            {
-               err_msg("server_thread() %d unable to write XML tree info", pthread_self() );
-               close(client.fd);
-               continue;
+         /* Support multiple items by splitting request into chunks on the
+          * separator ':' and pass the chunk to process_path. 'request' was
+          * sanitized earlier by process_request */
+         request_chunk = request;
+         request_pointer = request;
+
+         /* request_pointer will be automatically incremented with each call to strsep() */
+         while (request_chunk=strsep(&request_pointer, SEPARATOR))
+            {
+               /* takes care of leading, consecutive and trailing SEPARATOR */
+               if(strlen(request_chunk) != 0)
+                  if (process_path(&client, request_chunk, &rootdatum, NULL))
+                     {
+                        /* non fatal error, allow to continue so
+                         * root_report_end runs and we return a valid empty GRID
+                         * element the client can parse to detect an error */
+                        err_msg("server_thread() %d unable to find XML element '%s'", pthread_self(), request_chunk);
+                        break;
+                     }
             }
 
          if(root_report_end(&client))
