diff --git a/py_gen/codegen.py b/py_gen/codegen.py
index 19bdbaf..9765815 100644
--- a/py_gen/codegen.py
+++ b/py_gen/codegen.py
@@ -68,6 +68,8 @@
             type_values['subtype'] = type_maps.extension_action_to_subtype(cls, version)
     elif utils.class_is_queue_prop(cls):
         type_values['type'] = util.constant_for_value(version, "ofp_queue_properties", util.primary_wire_type(cls, version))
+    elif utils.class_is_hello_elem(cls):
+        type_values['type'] = util.constant_for_value(version, "ofp_hello_elem_type", util.primary_wire_type(cls, version))
     elif utils.class_is_oxm(cls):
         oxm_class = 0x8000
         oxm_type = util.primary_wire_type(cls, version)
@@ -82,7 +84,8 @@
 def build_ofclasses(version):
     blacklist = ["of_action", "of_action_header", "of_header", "of_queue_prop",
                  "of_queue_prop_header", "of_experimenter", "of_action_experimenter",
-                 "of_oxm", "of_oxm_header", "of_oxm_experimenter_header"]
+                 "of_oxm", "of_oxm_header", "of_oxm_experimenter_header",
+                 "of_hello_elem", "of_hello_elem_header"]
     ofclasses = []
     for cls in of_g.standard_class_order:
         if version not in of_g.unified[cls] or cls in blacklist:
diff --git a/py_gen/oftype.py b/py_gen/oftype.py
index a52bd2e..481321c 100644
--- a/py_gen/oftype.py
+++ b/py_gen/oftype.py
@@ -122,6 +122,8 @@
             return 'common.unpack_list_queue_prop(buffer(%s, %s))' % (buf_expr, offset_expr)
         elif self.base == 'of_list_packet_queue_t':
             return 'common.unpack_list_packet_queue(buffer(%s, %s))' % (buf_expr, offset_expr)
+        elif self.base == 'of_list_hello_elem_t':
+            return 'common.unpack_list_hello_elem(buffer(%s, %s))' % (buf_expr, offset_expr)
         elif self.base == 'of_port_name_t':
             return self._gen_string_unpack_expr(16, buf_expr, offset_expr)
         elif self.base == 'of_table_name_t' or self.base == 'of_serial_num_t':
diff --git a/py_gen/templates/common.py b/py_gen/templates/common.py
index 99d3f71..2f9310e 100644
--- a/py_gen/templates/common.py
+++ b/py_gen/templates/common.py
@@ -53,6 +53,15 @@
 def unpack_list_packet_queue(buf):
     return util.unpack_list(packet_queue.unpack, "!4xH", buf)
 
+def unpack_list_hello_elem(buf):
+    def deserializer(buf):
+        type, = struct.unpack_from("!H", buf)
+        if type == const.OFPHET_VERSIONBITMAP:
+            return hello_elem_versionbitmap.unpack(buf)
+        else:
+            return None
+    return [x for x in util.unpack_list(deserializer, "!2xH", buf) if x != None]
+
 :: for ofclass in ofclasses:
 :: include('_ofclass.py', ofclass=ofclass, superclass="object")
 
diff --git a/py_gen/tests/of13.py b/py_gen/tests/of13.py
index 0294684..68cbb1a 100644
--- a/py_gen/tests/of13.py
+++ b/py_gen/tests/of13.py
@@ -53,6 +53,35 @@
         self.assertTrue(hasattr(loxi.of13, "const"))
         self.assertTrue(hasattr(loxi.of13, "message"))
 
+class TestCommon(unittest.TestCase):
+    sample_hello_elem_buf = ''.join([
+        '\x00\x01', # type
+        '\x00\x0c', # length
+        '\x01\x23\x45\x67', # bitmaps[0]
+        '\x89\xab\xcd\xef', # bitmaps[1]
+    ])
+
+    def test_hello_elem_versionbitmap_pack(self):
+        obj = ofp.hello_elem_versionbitmap(bitmaps=[ofp.uint32(0x01234567),ofp.uint32(0x89abcdef)])
+        self.assertEquals(self.sample_hello_elem_buf, obj.pack())
+
+    def test_hello_elem_versionbitmap_unpack(self):
+        obj = ofp.hello_elem_versionbitmap.unpack(self.sample_hello_elem_buf)
+        self.assertEquals(len(obj.bitmaps), 2)
+        self.assertEquals(obj.bitmaps[0], ofp.uint32(0x01234567))
+        self.assertEquals(obj.bitmaps[1], ofp.uint32(0x89abcdef))
+
+    def test_list_hello_elem_unpack(self):
+        buf = ''.join([
+            '\x00\x01\x00\x04', # versionbitmap
+            '\x00\x00\x00\x04', # unknown type
+            '\x00\x01\x00\x04', # versionbitmap
+        ])
+        l = ofp.unpack_list_hello_elem(buf)
+        self.assertEquals(len(l), 2)
+        self.assertTrue(isinstance(l[0], ofp.hello_elem_versionbitmap))
+        self.assertTrue(isinstance(l[1], ofp.hello_elem_versionbitmap))
+
 class TestOXM(unittest.TestCase):
     def test_oxm_in_phy_port_pack(self):
         import loxi.of13 as ofp
@@ -128,9 +157,6 @@
             ofp.common.action_id_set_queue,
             ofp.common.flow_stats_entry,
             ofp.common.group_desc_stats_entry,
-            ofp.common.hello_elem,
-            ofp.common.hello_elem_header,
-            ofp.common.hello_elem_versionbitmap,
             ofp.common.instruction,
             ofp.common.instruction_apply_actions,
             ofp.common.instruction_clear_actions,
@@ -218,9 +244,6 @@
             ofp.common.action_id_set_queue,
             ofp.common.flow_stats_entry,
             ofp.common.group_desc_stats_entry,
-            ofp.common.hello_elem,
-            ofp.common.hello_elem_header,
-            ofp.common.hello_elem_versionbitmap,
             ofp.common.instruction,
             ofp.common.instruction_apply_actions,
             ofp.common.instruction_clear_actions,
