diff --git a/lib/python/labcomm/LabComm.py b/lib/python/labcomm/LabComm.py
index 2a66397bd46e82ace847832ee6c8870ebf8167d6..6fa3ca8e50ff8abfe3a7c19f22360e6d2894a30e 100644
--- a/lib/python/labcomm/LabComm.py
+++ b/lib/python/labcomm/LabComm.py
@@ -93,6 +93,7 @@
 # sequences of 7 bit chunks, represented in bytes with the high bit meaning 
 # that more data is to come.
  
+import types
 import struct as packer
 
 VERSION = "LabComm2013"
@@ -316,18 +317,26 @@ class array(object):
             encoder.encode_packed32(i)
         encoder.encode_type_number(self.decl)
 
-    def min_max_shape(self, l, depth=0, shape=[]):
-        if isinstance(l, list):
+    def min_max_shape(self, l, depth, shape):
+        if isinstance(l, types.StringTypes):
+            return shape
+        try:
             length = len(l)
             if len(shape) <= depth:
                 shape.append((length, length))
+                pass
             else:
                 (low, high) = shape[depth]
                 low = min(low, length)
                 high = max(high, length)
                 shape[depth] = (low, high)
+                pass
             for e in l:
                 shape = self.min_max_shape(e, depth + 1, shape)
+                pass
+            pass
+        except TypeError:
+            pass
         return shape    
 
     def shape(self, l):
@@ -356,7 +365,8 @@ class array(object):
         return depth
 
     def encode_value(self, encoder, value, depth):
-        if depth and isinstance(value, list):
+        # if depth and isinstance(value, list):
+        if depth:
             for e in value:
                 self.encode_value(encoder, e, depth - 1)
         else:
@@ -585,7 +595,7 @@ class Encoder(Codec):
             self.pack("!b", 0)
 
     def encode_byte(self, v):
-        self.pack("!b", v)
+        self.pack("!B", v)
 
     def encode_short(self, v):
         self.pack("!h", v)
@@ -669,7 +679,7 @@ class Decoder(Codec):
         return self.unpack("!b") != 0
     
     def decode_byte(self):
-        return self.unpack("!b")
+        return self.unpack("!B")
     
     def decode_short(self):
         return self.unpack("!h")
diff --git a/test/test_encoder_decoder.py b/test/test_encoder_decoder.py
index acd08e5e4e15f9ccf8b517b606fd17360474861e..3818ab45a990ae13b34b119d153b114fca3c083a 100755
--- a/test/test_encoder_decoder.py
+++ b/test/test_encoder_decoder.py
@@ -59,7 +59,7 @@ def generate(decl):
         return [False, True]
 
     elif decl.__class__ == labcomm.BYTE:
-        return [-128, 0, 127]
+        return [0, 127, 128, 255]
 
     elif decl.__class__ == labcomm.SHORT:
         return [-32768, 0, 32767]