Index: src/xplra/GetMultiDataRefRequest.cc
===================================================================
--- src/xplra/GetMultiDataRefRequest.cc	(revision 8)
+++ src/xplra/GetMultiDataRefRequest.cc	(revision 10)
@@ -39,12 +39,21 @@
 using xplra::GetMultiDataRefRequest;
 
+using xplcommon::DataStream;
 using xplcommon::Util;
 
 //------------------------------------------------------------------------------
 
-GetMultiDataRefRequest::GetMultiDataRefRequest(uint8_t& result, size_t numTasks,
-                                               xplcommon::DataStream& stream)
+GetMultiDataRefRequest::GetMultiDataRefRequest(uint8_t& result,
+                                               DataStream& stream)
 {
     result = Protocol::RESULT_OK;
+
+    uint32_t numTasks = stream.readU32();
+    if (!stream) return;
+    if (numTasks==0 || numTasks>Protocol::MAX_MULTI_COUNT) {
+        result = Protocol::RESULT_INVALID_COUNT;
+        return;
+    }
+
     for(size_t i = 0;
         i<numTasks && result==Protocol::RESULT_OK && stream; ++i)
Index: src/xplra/GetMultiDataRefRequest.h
===================================================================
--- src/xplra/GetMultiDataRefRequest.h	(revision 8)
+++ src/xplra/GetMultiDataRefRequest.h	(revision 10)
@@ -50,6 +50,5 @@
      * specifications from the given stream.
      */
-    GetMultiDataRefRequest(uint8_t& result, size_t numTasks,
-                           xplcommon::DataStream& stream);
+    GetMultiDataRefRequest(uint8_t& result, xplcommon::DataStream& stream);
 
     /**
Index: src/xplra/Protocol.h
===================================================================
--- src/xplra/Protocol.h	(revision 9)
+++ src/xplra/Protocol.h	(revision 10)
@@ -50,4 +50,14 @@
      */
     static const uint8_t COMMAND_SET_SINGLE = 0x02;
+
+    /**
+     * Command: get the value of a multiple datarefs.
+     */
+    static const uint8_t COMMAND_GET_MULTI = 0x03;
+
+    /**
+     * Command: set the value of a multiple datarefs.
+     */
+    static const uint8_t COMMAND_SET_MULTI = 0x04;
 
     /**
Index: src/xplra/ServerThread.cc
===================================================================
--- src/xplra/ServerThread.cc	(revision 9)
+++ src/xplra/ServerThread.cc	(revision 10)
@@ -131,4 +131,8 @@
         } else if (command==Protocol::COMMAND_SET_SINGLE) {
             if (!handleSetSingle()) break;
+        } else if (command==Protocol::COMMAND_GET_MULTI) {
+            if (!handleGetMulti()) break;
+        } else if (command==Protocol::COMMAND_SET_MULTI) {
+            if (!handleSetMulti()) break;
         } else if (command==Protocol::COMMAND_REGISTER_GET_MULTI) {
             if (!handleRegisterGetMulti()) break;
@@ -209,17 +213,57 @@
 //------------------------------------------------------------------------------
 
+bool ServerThread::handleGetMulti()
+{
+    uint8_t result = Protocol::RESULT_OK;
+    GetMultiDataRefRequest* request =
+        new GetMultiDataRefRequest(result, stream);
+    if (result!=Protocol::RESULT_OK || !stream) {
+        delete request;
+        stream.writeU8(result);
+        return stream;
+    }
+
+    bool isOK = requestQueue.execute(request);
+
+    if (isOK) {
+        request->writeResult(stream);
+    }
+
+    delete request;
+
+    return isOK;
+}
+
+//------------------------------------------------------------------------------
+
+bool ServerThread::handleSetMulti()
+{
+    uint8_t result = Protocol::RESULT_OK;
+    SetMultiDataRefRequest* request =
+        new SetMultiDataRefRequest(result, stream, true);
+    if (result!=Protocol::RESULT_OK || !stream) {
+        delete request;
+        stream.writeU8(result);
+        return stream;
+    }
+
+    bool isOK = requestQueue.execute(request);
+
+    if (isOK) {
+        request->writeResult(stream);
+    }
+
+    delete request;
+
+    return isOK;
+}
+
+//------------------------------------------------------------------------------
+
 bool ServerThread::handleRegisterGetMulti()
 {
-    uint32_t numTasks = stream.readU32();
-    if (!stream) {
-        return false;
-    } else if (numTasks==0 || numTasks>Protocol::MAX_MULTI_COUNT) {
-        stream.writeU8(Protocol::RESULT_INVALID_COUNT);
-        return true;
-    }
-
     uint8_t result = Protocol::RESULT_OK;
     GetMultiDataRefRequest* request =
-        new GetMultiDataRefRequest(result, numTasks, stream);
+        new GetMultiDataRefRequest(result, stream);
     if (result!=Protocol::RESULT_OK || !stream) {
         delete request;
@@ -282,5 +326,5 @@
     uint8_t result = Protocol::RESULT_OK;
     SetMultiDataRefRequest* request =
-        new SetMultiDataRefRequest(result, stream);
+        new SetMultiDataRefRequest(result, stream, false);
     if (result!=Protocol::RESULT_OK || !stream) {
         delete request;
Index: src/xplra/ServerThread.h
===================================================================
--- src/xplra/ServerThread.h	(revision 9)
+++ src/xplra/ServerThread.h	(revision 10)
@@ -173,4 +173,18 @@
 
     /**
+     * Handle the COMMAND_GET_MULTI command
+     *
+     * @return true, if we can continue, false if the thread should quit
+     */
+    bool handleGetMulti();
+
+    /**
+     * Handle the COMMAND_SET_MULTI command
+     *
+     * @return true, if we can continue, false if the thread should quit
+     */
+    bool handleSetMulti();
+
+    /**
      * Handle the COMMAND_REGISTER_GET_MULTI command
      *
Index: src/xplra/SetMultiDataRefRequest.cc
===================================================================
--- src/xplra/SetMultiDataRefRequest.cc	(revision 9)
+++ src/xplra/SetMultiDataRefRequest.cc	(revision 10)
@@ -42,5 +42,6 @@
 
 SetMultiDataRefRequest::SetMultiDataRefRequest(uint8_t& result,
-                                               DataStream& stream)
+                                               DataStream& stream,
+                                               bool readValues)
 {
     result = Protocol::RESULT_OK;
@@ -56,5 +57,10 @@
         i<numTasks && result==Protocol::RESULT_OK && stream; ++i) {
         SetDataRefTask* task = SetDataRefTask::create(result, stream);
-        if (task!=0) addTask(task);
+        if (task!=0) {
+            if (readValues) {
+                task->readValue(stream);
+            }
+            addTask(task);
+        }
     }
 }
Index: src/xplra/SetMultiDataRefRequest.h
===================================================================
--- src/xplra/SetMultiDataRefRequest.h	(revision 9)
+++ src/xplra/SetMultiDataRefRequest.h	(revision 10)
@@ -50,5 +50,6 @@
      * the given stream.
      */
-    SetMultiDataRefRequest(uint8_t& result, xplcommon::DataStream& stream);
+    SetMultiDataRefRequest(uint8_t& result, xplcommon::DataStream& stream,
+                           bool readValues);
 
     /**
