diff --git a/src/python/of11/message_unittests.py b/src/python/of11/message_unittests.py
new file mode 100755
index 0000000..04b8679
--- /dev/null
+++ b/src/python/of11/message_unittests.py
@@ -0,0 +1,40 @@
+#!/usr/bin/python 
+
+import unittest
+import message
+import action
+import instruction
+import cstruct as ofp
+
+class flow_stats_pack(unittest.TestCase):
+    def runTest(self):
+        msg = message.flow_stats_entry()
+        match = ofp.ofp_match()
+        match.wildcards &= ~ofp.OFPFW_IN_PORT
+        act = action.action_output()
+        act.port = 3
+        msg.match = match
+        pkt = msg.pack()
+        self.assertEqual(len(pkt), 136)
+        inst = instruction.instruction_apply_actions()
+        self.assertTrue(inst.actions.add(act), "Could not add action")
+        self.assertTrue(msg.instructions.add(inst), "Could not add instructions")
+        #self.assertTrue(msg.actions.add(act), "Could not add action")
+        pkt = msg.pack()
+        # 160 = 136 for flow_stats_entry and 24 for instruction_list
+        self.assertEqual(len(pkt), 160)
+        rep = message.flow_stats_reply()
+        self.assertEqual(len(rep.pack()),12)
+        rep.stats.append(msg)
+        self.assertEqual(len(rep.pack()),172)
+        
+
+        
+class match_pack(unittest.TestCase):
+    def runTest(self):
+        match = ofp.ofp_match()
+        self.assertEqual(len(match.pack()), 88)
+        
+        
+if __name__ == '__main__':
+    unittest.main()
