diff --git a/lib/python/labcomm2014/LabComm.py b/lib/python/labcomm2014/LabComm.py
index e5a347ff8a0966f0298c21b7901d981792f6b0e6..aae802e318ab305b78a7adcdea669ce2f8100683 100644
--- a/lib/python/labcomm2014/LabComm.py
+++ b/lib/python/labcomm2014/LabComm.py
@@ -693,7 +693,7 @@ class struct(type_decl):
         result = "labcomm.struct(["
         for (intentions, decl) in self.field:
             try:
-                name = intentions['']
+                name = dict(intentions)['']
             except:
                 name = '(no name)'
             result += "%s\n  ('%s', %s)" % (delim, name, decl)
@@ -916,6 +916,10 @@ class Decoder(Codec):
         super(Decoder, self).__init__()
         self.reader = reader
         self.version = version
+        self.handlers = {}
+
+    def register_handler(self, sig, handler):
+        self.handlers[str(sig)] = handler
 
     def unpack(self, format):
         size = packer.calcsize(format)
@@ -945,6 +949,17 @@ class Decoder(Codec):
         else:
             raise Exception("Invalid type index %d" % index)
 
+    def runOne(self):
+        data,decl = self.decode()
+        if decl:
+            if data:
+                if str(decl) in self.handlers:
+                    handler = self.handlers[str(decl)]
+                    handler(data)
+                else:
+                    print ("No handler for %s" % decl.name )
+
+
     def decode(self):
         while True:
             index = self.decode_type_number()