diff --git a/src/python/oftest/oft_config.py b/src/python/oftest/config.py
similarity index 100%
rename from src/python/oftest/oft_config.py
rename to src/python/oftest/config.py
diff --git a/src/python/oftest/ofmsg/action_list.py b/src/python/oftest/protocol/action_list.py
similarity index 99%
rename from src/python/oftest/ofmsg/action_list.py
rename to src/python/oftest/protocol/action_list.py
index 5327eee..884b933 100644
--- a/src/python/oftest/ofmsg/action_list.py
+++ b/src/python/oftest/protocol/action_list.py
@@ -3,7 +3,7 @@
 """
 
 from action import *
-from ofp import ofp_header
+from cstruct import ofp_header
 
 # # Map OFP action identifiers to the actual structures used on the wire
 # action_object_map = {
diff --git a/src/python/oftest/ofmsg/of_message.py b/src/python/oftest/protocol/parse.py
similarity index 73%
rename from src/python/oftest/ofmsg/of_message.py
rename to src/python/oftest/protocol/parse.py
index bd6d639..49b5df1 100644
--- a/src/python/oftest/ofmsg/of_message.py
+++ b/src/python/oftest/protocol/parse.py
@@ -1,4 +1,4 @@
-
+o
 from message import *
 from error import *
 from action import *
@@ -85,17 +85,17 @@
     if not hdr.type in msg_type_subclassed:
         return msg_type_to_class_map[hdr.type]()
     if hdr.type == OFPT_STATS_REQUEST:
-        st_hdr = ofp_stats_request()
-        st_hdr.unpack(binary_string)
-        return stats_request_to_class_map[st_hdr.type]()
+        sub_hdr = ofp_stats_request()
+        sub_hdr.unpack(binary_string)
+        return stats_request_to_class_map[sub_hdr.type]()
     elif hdr.type == OFPT_STATS_REPLY:
-        st_hdr = ofp_stats_reply()
-        st_hdr.unpack(binary_string)
-        return stats_reply_to_class_map[st_hdr.type]()
-    elif hdr.type == OFPT_STATS_REPLY:
-        st_hdr = ofp_error_msg()
-        st_hdr.unpack(binary_string)
-        return error_to_class_map[st_hdr.type]()
+        sub_hdr = ofp_stats_reply()
+        sub_hdr.unpack(binary_string)
+        return stats_reply_to_class_map[sub_hdr.type]()
+    elif hdr.type == OFPT_ERROR:
+        sub_hdr = ofp_error_msg()
+        sub_hdr.unpack(binary_string)
+        return error_to_class_map[sub_hdr.type]()
     else:
         print "ERROR parsing packet to object"
         return None
@@ -108,10 +108,8 @@
     members fully populated.
 
     @param binary_string The packet (string) to be parsed
-
     @param raw If true, interpret the packet as an L2 packet.  Not
     yet supported.
-
     @return An object of some message class or None if fails
 
     """
@@ -125,3 +123,39 @@
         obj.unpack(binary_string)
     return obj
 
+
+def of_header_parse(binary_string, raw=False):
+    """
+    Parse only the header from an OpenFlow packet
+
+    Parses the header from a raw OpenFlow packet into a
+    an ofp_header Python class.
+
+    @param binary_string The packet (string) to be parsed
+    @param raw If true, interpret the packet as an L2 packet.  Not
+    yet supported.
+    @return An ofp_header object
+
+    """
+
+    if raw:
+        print "raw packet message parsing not supported"
+        return None
+
+    hdr = ofp_header()
+    hdr.unpack(binary_string)
+
+    return hdr
+
+def packet_to_flow(packet, wildcards=None, pkt_format="L2"):
+    """
+    Create a flow that matches packet with the given wildcards
+
+    @param packet The packet to use as a flow template
+    @param wildcards Wildcards to place in the flow (ignore those 
+    fields from the packet)
+    @param pkt_format May be one string from: L2, L3,  ?  
+    Fields from unspecified layers are forced to be wildcards
+
+    """
+
diff --git a/tools/munger/Makefile b/tools/munger/Makefile
index 9984cc0..0e40e4e 100644
--- a/tools/munger/Makefile
+++ b/tools/munger/Makefile
@@ -10,7 +10,7 @@
 
 PYLIBOF_DIR = ${TOOLS_DIR}/pylibopenflow
 
-TARGET_DIR = ${TOP_DIR}/src/python/oftest/ofmsg
+TARGET_DIR = ${TOP_DIR}/src/python/oftest/protocol
 
 # Relative to pyopenflow-pythonize exec location
 OF_HEADER = include/openflow.h
@@ -19,17 +19,17 @@
 ABS_OF_HEADER = ${PYLIBOF_DIR}/${OF_HEADER}
 
 PYTHONIZE = bin/pyopenflow-pythonize.py
-OFP_GEN_CMD = (cd ${PYLIBOF_DIR} && ${PYTHONIZE} -i ${OF_HEADER} \
-	${TARGET_DIR}/ofp.py)
-OFP_AUX_INFO = ${TARGET_DIR}/ofp_aux.py
+CSTRUCT_GEN_CMD = (cd ${PYLIBOF_DIR} && ${PYTHONIZE} -i ${OF_HEADER} \
+	${TARGET_DIR}/cstruct.py)
+CSTRUCT_AUX_INFO = ${TARGET_DIR}/class_maps.py
 
-# Dependencies for ofp.py
-OFP_DEP = ${ABS_OF_HEADER} $(wildcard ${PYLIBOF_DIR}/pylib/*.py)
-OFP_DEP += $(wildcard ${PYLIBOF_DIR}/pylib/of/*.py) 
+# Dependencies for cstruct.py
+CSTRUCT_DEP = ${ABS_OF_HEADER} $(wildcard ${PYLIBOF_DIR}/pylib/*.py)
+CSTRUCT_DEP += $(wildcard ${PYLIBOF_DIR}/pylib/of/*.py) 
 
 # Generated and other files
-GEN_FILES := $(addprefix ${TARGET_DIR}/,ofp.py message.py error.py action.py)
-OTHER_FILES :=  $(addprefix ${TARGET_DIR}/,action_list.py of_message.py)
+GEN_FILES := $(addprefix ${TARGET_DIR}/,cstruct.py message.py error.py action.py)
+OTHER_FILES :=  $(addprefix ${TARGET_DIR}/,action_list.py parse.py)
 LINT_SOURCE := ${GEN_FILES} ${OTHER_FILES}
 LINT_FILES := $(subst .py,.log,${LINT_SOURCE})
 LINT_FILES := $(subst ${TARGET_DIR}/,lint/,${LINT_FILES})
@@ -37,11 +37,11 @@
 all: ${GEN_FILES}
 
 # The core OpenFlow libraries generated from openflow.h
-${TARGET_DIR}/ofp.py: ${OFP_DEP}
-	${OFP_GEN_CMD} > ${OFP_AUX_INFO}
+${TARGET_DIR}/cstruct.py: ${CSTRUCT_DEP}
+	${CSTRUCT_GEN_CMD} > ${CSTRUCT_AUX_INFO}
 
 # General rule like src/message.py comes from scripts/message_gen.py
-${TARGET_DIR}/%.py: scripts/%_gen.py ${TARGET_DIR}/ofp.py
+${TARGET_DIR}/%.py: scripts/%_gen.py ${TARGET_DIR}/cstruct.py
 	python $< > $@
 
 # The pylint files
@@ -76,7 +76,7 @@
 	@echo
 	@echo "Files generated GEN_FILES:  ${GEN_FILES}"
 	@echo
-	@echo "Dependencies for ofp.py OFP_DEP:  ${OFP_DEP}"
+	@echo "Dependencies for cstruct.py CSTRUCT_DEP:  ${CSTRUCT_DEP}"
 	@echo
 	@echo "Already created files OTHER_FILES:  ${OTHER_FILES}"
 	@echo
diff --git a/tools/munger/scripts/action_gen.py b/tools/munger/scripts/action_gen.py
index 65a1293..6f9d11a 100644
--- a/tools/munger/scripts/action_gen.py
+++ b/tools/munger/scripts/action_gen.py
@@ -5,14 +5,14 @@
 
 import re
 import sys
-sys.path.append("../../src/python/oftest/ofmsg")
-from ofp import *
-from ofp_aux import class_to_members_map
+sys.path.append("../../src/python/oftest/protocol")
+from cstruct import *
+from class_maps import class_to_members_map
 
 print """
 # Python OpenFlow action wrapper classes
 
-from ofp import *
+from cstruct import *
 
 """
 
diff --git a/tools/munger/scripts/error_gen.py b/tools/munger/scripts/error_gen.py
index 0a6d241..d82df10 100644
--- a/tools/munger/scripts/error_gen.py
+++ b/tools/munger/scripts/error_gen.py
@@ -5,14 +5,14 @@
 
 import re
 import sys
-sys.path.append("../../src/python/oftest/ofmsg")
-from ofp import *
-from ofp_aux import class_to_members_map
+sys.path.append("../../src/python/oftest/protocol")
+from cstruct import *
+from class_maps import class_to_members_map
 
 print """
 # Python OpenFlow error wrapper classes
 
-from ofp import *
+from cstruct import *
 
 """
 
diff --git a/tools/munger/scripts/message_gen.py b/tools/munger/scripts/message_gen.py
index 1f93b1c..d56f20b 100644
--- a/tools/munger/scripts/message_gen.py
+++ b/tools/munger/scripts/message_gen.py
@@ -80,14 +80,14 @@
 import re
 import string
 import sys
-sys.path.append("../../src/python/oftest/ofmsg")
-from ofp import *
-from ofp_aux import class_to_members_map
+sys.path.append("../../src/python/oftest/protocol")
+from cstruct import *
+from class_maps import class_to_members_map
 
 message_top_matter = """
 # Python OpenFlow message wrapper classes
 
-from ofp import *
+from cstruct import *
 from action_list import action_list
 
 # Define templates for documentation
@@ -327,10 +327,19 @@
     if has_string:
         _p2('self.data = ""')
 
-    print
-    _p1("def pack(self):")
-    _p2("self.header.length = len(self)")
-    _p2("packed = self.header.pack()")
+    print """
+
+    def pack(self):
+        \"""
+        Pack object into string
+
+        @return The packed string which can go on the wire
+
+        \"""
+        self.header.length = len(self)
+        packed = self.header.pack()
+"""
+
     if has_core_members:
         _p2("packed += " + parent + ".pack(self)")
     if has_list:
@@ -343,9 +352,19 @@
         _p2('packed += self.data')
     _p2("return packed")
 
-    print
-    _p1("def unpack(self, binary_string):")
-    _p2("binary_string = self.header.unpack(binary_string)")
+    print """
+    def unpack(self, binary_string):
+        \"""
+        Unpack object from a binary string
+
+        @param binary_string The wire protocol byte string holding the object
+        represented as an array of bytes.
+        @return Typically returns the remainder of binary_string that
+        was not parsed.  May give a warning if that string is non-empty
+
+        \"""
+        binary_string = self.header.unpack(binary_string)
+"""
     if has_core_members:
         _p2("binary_string = " + parent + ".unpack(self, binary_string)")
     if has_list:
@@ -369,9 +388,17 @@
         _p2("# Fixme: If no self.data, add check for data remaining")
     _p2("return binary_string")
 
-    print
-    _p1("def __len__(self):")
-    _p2("length = OFP_HEADER_BYTES")
+    print """
+    def __len__(self):
+        \"""
+        Return the length of this object once packed into a string
+
+        @return An integer representing the number bytes in the packed
+        string.
+
+        \"""
+        length = OFP_HEADER_BYTES
+"""
     if has_core_members:
         _p2("length += " + parent + ".__len__(self)")
     if has_list:
@@ -384,9 +411,16 @@
         _p2("length += len(self.data)")
     _p2("return length")
 
-    print
-    _p1("##@todo Convert this to __str__")
-    _p1("def show(self, prefix=''):")
+    print """
+    ##@todo Convert this to __str__
+    def show(self, prefix=''):
+        \"""
+        Display the contents of the object in a readable manner
+
+        @param prefix Printed at the beginning of each line.
+
+        \"""
+"""
     _p2("print prefix + '" + msg + " (" + msg_name + ")'")
     _p2("prefix += '  '")
     _p2("self.header.show(prefix)")
@@ -410,10 +444,17 @@
         _p3("# else:")
         _p4('# print prefix + "Unable to parse data"')
 
-    print
-    _p1("def __eq__(self, other):")
-    _p2("if type(self) != type(other): return False")
-    _p2("if not self.header.__eq__(other.header): return False")
+    print """
+    def __eq__(self, other):
+        \"""
+        Return True if self and other hold the same data
+
+        @param other Other object in comparison
+
+        \"""
+        if type(self) != type(other): return False
+        if not self.header.__eq__(other.header): return False
+"""
     if has_core_members:
         _p2("if not " + parent + ".__eq__(self, other): return False")
     if has_string:
@@ -422,9 +463,16 @@
         _p2("if self." + list_var + " != other." + list_var + ": return False")
     _p2("return True")
 
-    print
-    _p1("def __ne__(self, other): return not self.__eq__(other)")
+    print """
+    def __ne__(self, other):
+        \"""
+        Return True if self and other do not hold the same data
 
+        @param other Other object in comparison
+
+        \"""
+        return not self.__eq__(other)
+    """
 
 
 ################################################################
diff --git a/tools/munger/tests/msg_test.py b/tools/munger/tests/msg_test.py
index b92acae..02a368c 100644
--- a/tools/munger/tests/msg_test.py
+++ b/tools/munger/tests/msg_test.py
@@ -1,9 +1,9 @@
 import sys
-sys.path.append('../../../src/python/oftest/ofmsg')
+sys.path.append('../../../src/python/oftest/protocol')
 from message import *
 from action import *
 from error import *
-from ofp_aux import *
+from class_maps import *
 
 header_fields = ['version', 'xid']
 fixed_header_fields = ['type', 'length']
@@ -171,6 +171,21 @@
 
 print "End of class pack check"
 print
+print
+
+
+print "Testing message parsing"
+print
+for cls in keys:
+    print "Creating class " + ofmsg_names[cls]
+    obj = cls()
+    print ofmsg_names[cls] + " length: " + str(len(obj))
+    obj.show("  ")
+    print
+
+print "End of class generation"
+print
+print
 
 
 #
