Index: src/client/python/xplra.py
===================================================================
--- src/client/python/xplra.py	(revision 34)
+++ src/client/python/xplra.py	(revision 35)
@@ -131,4 +131,8 @@
         """Create a new multi-dataref getter for this X-Plane object."""
         return MultiGetter(self)
+
+    def createMultiSetter(self):
+        """Create a new multi-dataref setter for this X-Plane object."""
+        return MultiSetter(self)
 
     def getInt(self, name):
@@ -251,5 +255,5 @@
             if arr is not None and length>0:
                 arr.fromstring(self._stream.read(length*elementSize))
-            return arr
+            return None if arr is None else arr.tolist()
 
     def _setSingle(self, name, type, value, offset = None):
@@ -524,18 +528,26 @@
             self.finalize()
         type = self._dataRefs[id][1]
+        length = self._dataRefs[id][2]
         if type==TYPE_INT:
             self._values[id] = int(value)
-        elif type==TYPE_FLOAT:
+        elif type==TYPE_FLOAT or type==TYPE_DOUBLE:
             self._values[id] = float(value)
-        elif type==TYPE_DOUBLE:
-            self._values[id] = double(value)
         elif type==TYPE_FLOAT_ARRAY:
+            if len(value)!=length:
+                raise ValueError("xplra.MultiBuffer: expected a list of length %d" % (length,))
             self._values[id] = [float(x) for x in value]
         elif type==TYPE_INT_ARRAY:
+            if len(value)!=length:
+                raise ValueError("xplra.MultiBuffer: expected a list of length %d" % (length,))
             self._values[id] = [int(x) for x in value]
         elif type==TYPE_BYTE_ARRAY:
-            if instanceof(value, str):
-                self._values[id] = [ord(x) for x in value]
+            if isinstance(value, str):
+                lst = [ord(x) for x in value[:length]]
+                if len(lst)<length:
+                    lst += [0] * (length-len(lst))
+                self._values[id] = lst
             else:
+                if len(value)!=length:
+                    raise ValueError("xplra.MultiBuffer: expected a list of length %d" % (length,))
                 self._values[id] = [int(x) for x in value]
 
@@ -578,2 +590,43 @@
 
 #-------------------------------------------------------------------------------
+
+class MultiSetter(MultiBuffer):
+    """Multi-dataref buffer for setting."""
+    def __init__(self, xplane):
+        """Construct the getter."""
+        super(MultiSetter, self).__init__(xplane,
+                                          COMMAND_REGISTER_SET_MULTI,
+                                          COMMAND_UNREGISTER_SET_MULTI)
+
+    def _executeRegistered(self):
+        """Execute the query if the buffer is registered."""
+        self._xplane._writeU8(COMMAND_EXECUTE_SET_MULTI)
+        self._xplane._writeU32(self._registeredID)
+        for i in range(0, len(self._dataRefs)):
+            self._xplane._writeValue(self._dataRefs[i][1], self._values[i])
+        self._xplane._flush()
+
+        self._xplane._checkResult()
+
+    def _executeUnregistered(self):
+        """Execute the query if the buffer is not registered."""
+        self._xplane._writeU8(COMMAND_SET_MULTI)
+
+        numDataRefs = len(self._dataRefs)
+        self._xplane._writeU32(numDataRefs)
+
+        for i in range(0, numDataRefs):
+            (name, type, length, offset) = self._dataRefs[i]
+            value = self._values[i]
+
+            self._xplane._writeString(name)
+            self._xplane._writeType(type)
+            if length is not None and offset is not None:
+                self._xplane._writeS32(len(value))
+                self._xplane._writeS32(offset)
+            self._xplane._writeValue(type, value)
+
+        self._xplane._flush()
+        self._xplane._checkResult()
+
+#-------------------------------------------------------------------------------
Index: test/basictest.py
===================================================================
--- test/basictest.py	(revision 32)
+++ test/basictest.py	(revision 35)
@@ -46,5 +46,5 @@
         print "Querying the aircraft's description..."
         result = xplane.getByteArray("sim/aircraft/view/acf_descrip")
-        print "The description:", result.tolist()
+        print "The description:", result
         print
 
@@ -57,10 +57,10 @@
         print "Querying the aircraft's engine types..."
         result3 = xplane.getIntArray("sim/aircraft/prop/acf_en_type")
-        print "Got:", result3.tolist()
+        print "Got:", result3
         print
 
         print "Querying the aircraft's propeller directions..."
         result5 = xplane.getFloatArray("sim/aircraft/prop/acf_prop_dir")
-        print  "Got:", result5.tolist()
+        print  "Got:", result5
         print
 
@@ -87,5 +87,5 @@
         print
 
-        numBlades = xplane.getFloatArray("sim/aircraft/prop/acf_num_blades").tolist()
+        numBlades = xplane.getFloatArray("sim/aircraft/prop/acf_num_blades")
         print "Setting the number of blades"
         print "    from:", numBlades
@@ -94,9 +94,9 @@
         xplane.setFloatArray("sim/aircraft/prop/acf_num_blades",  numBlades)
 
-        numBlades = xplane.getFloatArray("sim/aircraft/prop/acf_num_blades").tolist()
+        numBlades = xplane.getFloatArray("sim/aircraft/prop/acf_num_blades")
         print "The result:", numBlades
         print
 
-        batteryArrayOn = xplane.getIntArray("sim/cockpit/electrical/battery_array_on").tolist()
+        batteryArrayOn = xplane.getIntArray("sim/cockpit/electrical/battery_array_on")
         print "Setting the batteries"
         print "    from:", batteryArrayOn
@@ -104,5 +104,5 @@
         print "    to:", batteryArrayOn
         xplane.setIntArray("sim/cockpit/electrical/battery_array_on", batteryArrayOn)
-        batteryArrayOn = xplane.getIntArray("sim/cockpit/electrical/battery_array_on").tolist()
+        batteryArrayOn = xplane.getIntArray("sim/cockpit/electrical/battery_array_on")
         print "The result:", batteryArrayOn
         print
Index: test/multigettest.py
===================================================================
--- test/multigettest.py	(revision 34)
+++ test/multigettest.py	(revision 35)
@@ -96,6 +96,6 @@
             print "altimeter: %f, qnh: %f" % \
                 (getter[altimeterID], getter[qnhID]);
-            print "NAV types:", getter[navTypesID].tolist()
-            print "bus voltages:", getter[busVoltsID].tolist()
+            print "NAV types:", getter[navTypesID]
+            print "bus voltages:", getter[busVoltsID]
             print
             time.sleep(1.0)
Index: test/multisettest.py
===================================================================
--- test/multisettest.py	(revision 35)
+++ test/multisettest.py	(revision 35)
@@ -0,0 +1,55 @@
+# Multi-dataref query test program for the Python client library
+
+#------------------------------------------------------------------------------
+
+if __name__ == "__main__":
+    import sys
+    import time
+    from xplra import XPlane, ProtocolException
+
+    xplane = XPlane()
+
+    dontregister = "dontregister" in sys.argv
+
+    try:
+        print "Connecting to X-Plane..."
+        xplane.connect()
+        print "Connected to X-Plane."
+        print
+
+        setter = xplane.createMultiSetter()
+
+        simSpeedID = setter.addInt("sim/time/sim_speed")
+        zuluSecID = setter.addFloat("sim/time/zulu_time_sec")
+        localXID = setter.addDouble("sim/flightmodel/position/local_x")
+        tailNumID = setter.addByteArray("sim/aircraft/view/acf_tailnum", 40)
+        generatorOnID = setter.addIntArray("sim/cockpit/electrical/generator_on", 8)
+        propPitchID = setter.addFloatArray("sim/cockpit2/engine/actuators/prop_pitch_deg", 2)
+
+        if dontregister:
+            setter.finalize()
+        else:
+            print "Registering setter..."
+            setter.register();
+            print "Registered setter"
+            print
+
+        print "Setting values..."
+
+        setter[simSpeedID] = 0
+        setter[zuluSecID] = 7265.0
+        setter[localXID] = 12.0
+        setter[tailNumID] = "Kukutyin"
+        setter[generatorOnID] =[ 1, 0, 1, 0, 1, 0, 1 , 0 ]
+        setter[propPitchID] = [ 32.4, 78.2 ]
+
+        print "Executing..."
+
+        setter.execute()
+
+        print "Done."
+
+    except Exception as e:
+        print ">>>>>>>>>>>>>>>>>>>>>> Exception caught:", str(e)
+    finally:
+        xplane.disconnect()
