diff --git a/test/ThriftTest.thrift b/test/ThriftTest.thrift
index 63a533a..da2aaf7 100644
--- a/test/ThriftTest.thrift
+++ b/test/ThriftTest.thrift
@@ -194,3 +194,16 @@
 struct GuessProtocolStruct {
   7: map<string,string> map_field,
 }
+
+struct LargeDeltas {
+  1: Bools b1,
+  10: Bools b10,
+  100: Bools b100,
+  500: bool check_true,
+  1000: Bools b1000,
+  1500: bool check_false,
+  2000: VersioningTestV2 vertwo2000,
+  2500: set<string> a_set2500,
+  3000: VersioningTestV2 vertwo3000,
+  4000: list<i32> big_numbers
+}
diff --git a/test/py/SerializationTest.py b/test/py/SerializationTest.py
index 9e18aea..3ba76fb 100755
--- a/test/py/SerializationTest.py
+++ b/test/py/SerializationTest.py
@@ -24,6 +24,7 @@
 sys.path.insert(0, glob.glob('../../lib/py/build/lib.*')[0])
 
 from ThriftTest.ttypes import *
+from DebugProtoTest.ttypes import CompactProtoTestStruct, Empty
 from thrift.transport import TTransport
 from thrift.transport import TSocket
 from thrift.protocol import TBinaryProtocol, TCompactProtocol
@@ -49,12 +50,76 @@
           newdouble=5.0,
           newstruct=Bonk(message="Hello!", type=123),
           newlist=[7,8,9],
-          newset=[42,1,8],
+          newset=set([42,1,8]),
           newmap={1:2,2:3},
           newstring="Hola!",
           end_in_both=54321,
           )
 
+      self.bools = Bools(im_true=True, im_false=False)
+      self.bools_flipped = Bools(im_true=False, im_false=True)
+
+      self.large_deltas = LargeDeltas (
+          b1=self.bools,
+          b10=self.bools_flipped,
+          b100=self.bools,
+          check_true=True,
+          b1000=self.bools_flipped,
+          check_false=False,
+          vertwo2000=VersioningTestV2(newstruct=Bonk(message='World!', type=314)),
+          a_set2500=set(['lazy', 'brown', 'cow']),
+          vertwo3000=VersioningTestV2(newset=set([2, 3, 5, 7, 11])),
+          big_numbers=[2**8, 2**16, 2**31-1, -(2**31-1)]
+          )
+
+      self.compact_struct = CompactProtoTestStruct(
+          a_byte = 127,
+          a_i16=32000,
+          a_i32=1000000000,
+          a_i64=0xffffffffff,
+          a_double=5.6789,
+          a_string="my string",
+          true_field=True,
+          false_field=False,
+          empty_struct_field=Empty(),
+          byte_list=[-127, -1, 0, 1, 127],
+          i16_list=[-1, 0, 1, 0x7fff],
+          i32_list= [-1, 0, 0xff, 0xffff, 0xffffff, 0x7fffffff],
+          i64_list=[-1, 0, 0xff, 0xffff, 0xffffff, 0xffffffff, 0xffffffffff, 0xffffffffffff, 0xffffffffffffff, 0x7fffffffffffffff],
+          double_list=[0.1, 0.2, 0.3],
+          string_list=["first", "second", "third"],
+          boolean_list=[True, True, True, False, False, False],
+          struct_list=[Empty(), Empty()],
+          byte_set=set([-127, -1, 0, 1, 127]),
+          i16_set=set([-1, 0, 1, 0x7fff]),
+          i32_set=set([1, 2, 3]),
+          i64_set=set([-1, 0, 0xff, 0xffff, 0xffffff, 0xffffffff, 0xffffffffff, 0xffffffffffff, 0xffffffffffffff, 0x7fffffffffffffff]),
+          double_set=set([0.1, 0.2, 0.3]),
+          string_set=set(["first", "second", "third"]),
+          boolean_set=set([True, False]),
+          #struct_set=set([Empty()]), # unhashable instance
+          byte_byte_map={1 : 2},
+          i16_byte_map={1 : 1, -1 : 1, 0x7fff : 1},
+          i32_byte_map={1 : 1, -1 : 1, 0x7fffffff : 1},
+          i64_byte_map={0 : 1,  1 : 1, -1 : 1, 0x7fffffffffffffff : 1},
+          double_byte_map={-1.1 : 1, 1.1 : 1},
+          string_byte_map={"first" : 1, "second" : 2, "third" : 3, "" : 0},
+          boolean_byte_map={True : 1, False: 0},
+          byte_i16_map={1 : 1, 2 : -1, 3 : 0x7fff},
+          byte_i32_map={1 : 1, 2 : -1, 3 : 0x7fffffff},
+          byte_i64_map={1 : 1, 2 : -1, 3 : 0x7fffffffffffffff},
+          byte_double_map={1 : 0.1, 2 : -0.1, 3 : 1000000.1},
+          byte_string_map={1 : "", 2 : "blah", 3 : "loooooooooooooong string"},
+          byte_boolean_map={1 : True, 2 : False},
+          #list_byte_map # unhashable
+          #set_byte_map={set([1, 2, 3]) : 1, set([0, 1]) : 2, set([]) : 0}, # unhashable
+          #map_byte_map # unhashable
+          byte_map_map={0 : {}, 1 : {1 : 1}, 2 : {1 : 1, 2 : 2}},
+          byte_set_map={0 : set([]), 1 : set([1]), 2 : set([1, 2])},
+          byte_list_map={0 : [], 1 : [1], 2 : [1, 2]},
+          )
+
+
   def _serialize(self, obj):
       trans = TTransport.TMemoryBuffer()
       prot = self.protocol_factory.getProtocol(trans)
@@ -77,6 +142,30 @@
       self.assertEquals(obj.begin_in_both, self.v2obj.begin_in_both)
       self.assertEquals(obj.end_in_both, self.v2obj.end_in_both)
 
+  def testSerializeV1(self):
+    obj = self._deserialize(VersioningTestV1, self._serialize(self.v1obj))
+    self.assertEquals(obj, self.v1obj)
+
+  def testSerializeV2(self):
+    obj = self._deserialize(VersioningTestV2, self._serialize(self.v2obj))
+    self.assertEquals(obj, self.v2obj)
+
+  def testBools(self):
+    self.assertNotEquals(self.bools, self.bools_flipped)
+    obj = self._deserialize(Bools, self._serialize(self.bools))
+    self.assertEquals(obj, self.bools)
+    obj = self._deserialize(Bools, self._serialize(self.bools_flipped))
+    self.assertEquals(obj, self.bools_flipped)
+
+  def testLargeDeltas(self):
+    # test large field deltas (meaningful in CompactProto only)
+    obj = self._deserialize(LargeDeltas, self._serialize(self.large_deltas))
+    self.assertEquals(obj, self.large_deltas)
+
+  def testCompactStruct(self):
+    # test large field deltas (meaningful in CompactProto only)
+    obj = self._deserialize(CompactProtoTestStruct, self._serialize(self.compact_struct))
+    self.assertEquals(obj, self.compact_struct)
 
 class NormalBinaryTest(AbstractTest):
   protocol_factory = TBinaryProtocol.TBinaryProtocolFactory()
@@ -139,6 +228,19 @@
     deserialize(objcopy, serialize(obj))
     self.assertEquals(obj, objcopy)
 
+    # test booleans
+    obj = Bools(im_true=True, im_false=False)
+    objcopy = Bools()
+    deserialize(objcopy, serialize(obj))
+    self.assertEquals(obj, objcopy)
+    
+    # test enums
+    for num, name in Numberz._VALUES_TO_NAMES.iteritems():
+      obj = Bonk(message='enum Numberz value %d is string %s' % (num, name), type=num)
+      objcopy = Bonk()
+      deserialize(objcopy, serialize(obj))
+      self.assertEquals(obj, objcopy)
+  
 
 def suite():
   suite = unittest.TestSuite()
