diff --git a/lang_python.py b/lang_python.py
index 4db9e38..396b524 100644
--- a/lang_python.py
+++ b/lang_python.py
@@ -45,8 +45,8 @@
                 const.py        # OpenFlow constants
                 message.py      # Message classes
                 util.py         # Utility functions
-            of12: ...
             of13: ...
+                oxm.py          # OXM classes
 
 The user will add the pyloxi directory to PYTHONPATH. Then they can
 "import loxi" or "import loxi.of10". The idiomatic import is
@@ -70,7 +70,12 @@
 
 prefix = 'pyloxi/loxi'
 
-modules = ["action", "common", "const", "message", "util"]
+modules = {
+    1: ["action", "common", "const", "message", "util"],
+    2: ["action", "common", "const", "message", "util"],
+    3: ["action", "common", "const", "message", "oxm", "util"],
+    4: ["action", "common", "const", "message", "oxm", "util"],
+}
 
 def make_gen(name, version):
     fn = getattr(py_gen.codegen, "generate_" + name)
@@ -86,6 +91,6 @@
 
 for version, subdir in versions.items():
     targets['%s/%s/__init__.py' % (prefix, subdir)] = make_gen('init', version)
-    for module in modules:
+    for module in modules[version]:
         filename = '%s/%s/%s.py' % (prefix, subdir, module)
         targets[filename] = make_gen(module, version)
diff --git a/py_gen/codegen.py b/py_gen/codegen.py
index b8e014f..19bdbaf 100644
--- a/py_gen/codegen.py
+++ b/py_gen/codegen.py
@@ -68,6 +68,13 @@
             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_oxm(cls):
+        oxm_class = 0x8000
+        oxm_type = util.primary_wire_type(cls, version)
+        oxm_masked = cls.find('masked') != -1 and 1 or 0
+        oxm_len = of_g.base_length[(cls, version)]
+        type_values['type_len'] = '%#x' % (oxm_class << 16 | oxm_type << 8 | \
+                                           oxm_masked << 8 | oxm_len)
 
     return type_values
 
@@ -75,7 +82,7 @@
 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", "of_oxm_header", "of_oxm_experimenter_header"]
     ofclasses = []
     for cls in of_g.standard_class_order:
         if version not in of_g.unified[cls] or cls in blacklist:
@@ -85,6 +92,8 @@
         # Name for the generated Python class
         if utils.class_is_action(cls):
             pyname = cls[10:]
+        elif utils.class_is_oxm(cls):
+            pyname = cls[7:]
         else:
             pyname = cls[3:]
 
@@ -131,17 +140,23 @@
     return ofclasses
 
 def generate_init(out, name, version):
-    util.render_template(out, 'init.py')
+    util.render_template(out, 'init.py', version=version)
 
 def generate_action(out, name, version):
     ofclasses = [x for x in build_ofclasses(version)
                  if utils.class_is_action(x.name)]
     util.render_template(out, 'action.py', ofclasses=ofclasses, version=version)
 
+def generate_oxm(out, name, version):
+    ofclasses = [x for x in build_ofclasses(version)
+                 if utils.class_is_oxm(x.name)]
+    util.render_template(out, 'oxm.py', ofclasses=ofclasses, version=version)
+
 def generate_common(out, name, version):
     ofclasses = [x for x in build_ofclasses(version)
                  if not utils.class_is_message(x.name)
                     and not utils.class_is_action(x.name)
+                    and not utils.class_is_oxm(x.name)
                     and not utils.class_is_list(x.name)]
     util.render_template(out, 'common.py', ofclasses=ofclasses, version=version)
 
diff --git a/py_gen/templates/init.py b/py_gen/templates/init.py
index abc8d70..4a14228 100644
--- a/py_gen/templates/init.py
+++ b/py_gen/templates/init.py
@@ -30,6 +30,9 @@
 :: include('_autogen.py')
 
 import action, common, const, message
+:: if version >= 4:
+import oxm
+:: #endif
 from const import *
 from common import *
 from loxi import ProtocolError
diff --git a/py_gen/templates/oxm.py b/py_gen/templates/oxm.py
new file mode 100644
index 0000000..c210874
--- /dev/null
+++ b/py_gen/templates/oxm.py
@@ -0,0 +1,93 @@
+:: # Copyright 2013, Big Switch Networks, Inc.
+:: #
+:: # LoxiGen is licensed under the Eclipse Public License, version 1.0 (EPL), with
+:: # the following special exception:
+:: #
+:: # LOXI Exception
+:: #
+:: # As a special exception to the terms of the EPL, you may distribute libraries
+:: # generated by LoxiGen (LoxiGen Libraries) under the terms of your choice, provided
+:: # that copyright and licensing notices generated by LoxiGen are not altered or removed
+:: # from the LoxiGen Libraries and the notice provided below is (i) included in
+:: # the LoxiGen Libraries, if distributed in source code form and (ii) included in any
+:: # documentation for the LoxiGen Libraries, if distributed in binary form.
+:: #
+:: # Notice: "Copyright 2013, Big Switch Networks, Inc. This library was generated by the LoxiGen Compiler."
+:: #
+:: # You may not use this file except in compliance with the EPL or LOXI Exception. You may obtain
+:: # a copy of the EPL at:
+:: #
+:: # http://www.eclipse.org/legal/epl-v10.html
+:: #
+:: # Unless required by applicable law or agreed to in writing, software
+:: # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+:: # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+:: # EPL for the specific language governing permissions and limitations
+:: # under the EPL.
+::
+:: import itertools
+:: import of_g
+:: include('_copyright.py')
+
+:: include('_autogen.py')
+
+import struct
+import const
+import util
+import loxi
+
+class OXM(object):
+    type_len = None # override in subclass
+    pass
+
+:: for ofclass in ofclasses:
+:: nonskip_members = [m for m in ofclass.members if not m.skip]
+class ${ofclass.pyname}(OXM):
+:: for m in ofclass.type_members:
+    ${m.name} = ${m.value}
+:: #endfor
+
+    def __init__(self, ${', '.join(["%s=None" % m.name for m in nonskip_members])}):
+:: for m in nonskip_members:
+        if ${m.name} != None:
+            self.${m.name} = ${m.name}
+        else:
+            self.${m.name} = ${m.oftype.gen_init_expr()}
+:: #endfor
+
+    def pack(self):
+        packed = []
+:: include("_pack.py", ofclass=ofclass)
+        return ''.join(packed)
+
+    @staticmethod
+    def unpack(buf):
+        obj = ${ofclass.pyname}()
+:: include("_unpack.py", ofclass=ofclass)
+        return obj
+
+    def __eq__(self, other):
+        if type(self) != type(other): return False
+:: for m in nonskip_members:
+        if self.${m.name} != other.${m.name}: return False
+:: #endfor
+        return True
+
+    def __ne__(self, other):
+        return not self.__eq__(other)
+
+    def show(self):
+        import loxi.pp
+        return loxi.pp.pp(self)
+
+    def pretty_print(self, q):
+:: include('_pretty_print.py', ofclass=ofclass)
+
+:: #endfor
+
+parsers = {
+:: key = lambda x: int(x.type_members[0].value, 16)
+:: for ofclass in sorted(ofclasses, key=key):
+    ${key(ofclass)} : ${ofclass.pyname}.unpack,
+:: #endfor
+}
diff --git a/py_gen/tests/of13.py b/py_gen/tests/of13.py
index 512d4aa..7d146a4 100644
--- a/py_gen/tests/of13.py
+++ b/py_gen/tests/of13.py
@@ -53,6 +53,30 @@
         self.assertTrue(hasattr(loxi.of13, "const"))
         self.assertTrue(hasattr(loxi.of13, "message"))
 
+class TestOXM(unittest.TestCase):
+    def test_oxm_in_phy_port_pack(self):
+        import loxi.of13 as ofp
+        obj = ofp.oxm.in_phy_port(value=42)
+        expected = ''.join([
+            '\x80\x00', # class
+            '\x02', # type/masked
+            '\x08', # length
+            '\x00\x00\x00\x2a' # value
+        ])
+        self.assertEquals(expected, obj.pack())
+
+    def test_oxm_in_phy_port_masked_pack(self):
+        import loxi.of13 as ofp
+        obj = ofp.oxm.in_phy_port_masked(value=42, value_mask=0xaabbccdd)
+        expected = ''.join([
+            '\x80\x00', # class
+            '\x03', # type/masked
+            '\x0c', # length
+            '\x00\x00\x00\x2a', # value
+            '\xaa\xbb\xcc\xdd' # mask
+        ])
+        self.assertEquals(expected, obj.pack())
+
 class TestAllOF13(unittest.TestCase):
     """
     Round-trips every class through serialization/deserialization.
@@ -61,7 +85,7 @@
     """
 
     def setUp(self):
-        mods = [ofp.action,ofp.message,ofp.common]
+        mods = [ofp.action,ofp.message,ofp.common,ofp.oxm]
         self.klasses = [klass for mod in mods
                               for klass in mod.__dict__.values()
                               if hasattr(klass, 'show')]
@@ -111,79 +135,6 @@
             ofp.common.meter_band_dscp_remark,
             ofp.common.meter_band_experimenter,
             ofp.common.meter_band_header,
-            ofp.common.oxm_arp_op,
-            ofp.common.oxm_arp_op_masked,
-            ofp.common.oxm_arp_sha,
-            ofp.common.oxm_arp_sha_masked,
-            ofp.common.oxm_arp_spa,
-            ofp.common.oxm_arp_spa_masked,
-            ofp.common.oxm_arp_tha,
-            ofp.common.oxm_arp_tha_masked,
-            ofp.common.oxm_arp_tpa,
-            ofp.common.oxm_arp_tpa_masked,
-            ofp.common.oxm_eth_dst,
-            ofp.common.oxm_eth_dst_masked,
-            ofp.common.oxm_eth_src,
-            ofp.common.oxm_eth_src_masked,
-            ofp.common.oxm_eth_type,
-            ofp.common.oxm_eth_type_masked,
-            ofp.common.oxm_header,
-            ofp.common.oxm_icmpv4_code,
-            ofp.common.oxm_icmpv4_code_masked,
-            ofp.common.oxm_icmpv4_type,
-            ofp.common.oxm_icmpv4_type_masked,
-            ofp.common.oxm_icmpv6_code,
-            ofp.common.oxm_icmpv6_code_masked,
-            ofp.common.oxm_icmpv6_type,
-            ofp.common.oxm_icmpv6_type_masked,
-            ofp.common.oxm_in_phy_port,
-            ofp.common.oxm_in_phy_port_masked,
-            ofp.common.oxm_in_port,
-            ofp.common.oxm_in_port_masked,
-            ofp.common.oxm_ip_dscp,
-            ofp.common.oxm_ip_dscp_masked,
-            ofp.common.oxm_ip_ecn,
-            ofp.common.oxm_ip_ecn_masked,
-            ofp.common.oxm_ip_proto,
-            ofp.common.oxm_ip_proto_masked,
-            ofp.common.oxm_ipv4_dst,
-            ofp.common.oxm_ipv4_dst_masked,
-            ofp.common.oxm_ipv4_src,
-            ofp.common.oxm_ipv4_src_masked,
-            ofp.common.oxm_ipv6_dst,
-            ofp.common.oxm_ipv6_dst_masked,
-            ofp.common.oxm_ipv6_flabel,
-            ofp.common.oxm_ipv6_flabel_masked,
-            ofp.common.oxm_ipv6_nd_sll,
-            ofp.common.oxm_ipv6_nd_sll_masked,
-            ofp.common.oxm_ipv6_nd_target,
-            ofp.common.oxm_ipv6_nd_target_masked,
-            ofp.common.oxm_ipv6_nd_tll,
-            ofp.common.oxm_ipv6_nd_tll_masked,
-            ofp.common.oxm_ipv6_src,
-            ofp.common.oxm_ipv6_src_masked,
-            ofp.common.oxm_metadata,
-            ofp.common.oxm_metadata_masked,
-            ofp.common.oxm_mpls_label,
-            ofp.common.oxm_mpls_label_masked,
-            ofp.common.oxm_mpls_tc,
-            ofp.common.oxm_mpls_tc_masked,
-            ofp.common.oxm_sctp_dst,
-            ofp.common.oxm_sctp_dst_masked,
-            ofp.common.oxm_sctp_src,
-            ofp.common.oxm_sctp_src_masked,
-            ofp.common.oxm_tcp_dst,
-            ofp.common.oxm_tcp_dst_masked,
-            ofp.common.oxm_tcp_src,
-            ofp.common.oxm_tcp_src_masked,
-            ofp.common.oxm_udp_dst,
-            ofp.common.oxm_udp_dst_masked,
-            ofp.common.oxm_udp_src,
-            ofp.common.oxm_udp_src_masked,
-            ofp.common.oxm_vlan_pcp,
-            ofp.common.oxm_vlan_pcp_masked,
-            ofp.common.oxm_vlan_vid,
-            ofp.common.oxm_vlan_vid_masked,
             ofp.common.table_feature_prop,
             ofp.common.table_feature_prop_apply_actions,
             ofp.common.table_feature_prop_apply_actions_miss,
@@ -274,79 +225,6 @@
             ofp.common.meter_band_dscp_remark,
             ofp.common.meter_band_experimenter,
             ofp.common.meter_band_header,
-            ofp.common.oxm_arp_op,
-            ofp.common.oxm_arp_op_masked,
-            ofp.common.oxm_arp_sha,
-            ofp.common.oxm_arp_sha_masked,
-            ofp.common.oxm_arp_spa,
-            ofp.common.oxm_arp_spa_masked,
-            ofp.common.oxm_arp_tha,
-            ofp.common.oxm_arp_tha_masked,
-            ofp.common.oxm_arp_tpa,
-            ofp.common.oxm_arp_tpa_masked,
-            ofp.common.oxm_eth_dst,
-            ofp.common.oxm_eth_dst_masked,
-            ofp.common.oxm_eth_src,
-            ofp.common.oxm_eth_src_masked,
-            ofp.common.oxm_eth_type,
-            ofp.common.oxm_eth_type_masked,
-            ofp.common.oxm_header,
-            ofp.common.oxm_icmpv4_code,
-            ofp.common.oxm_icmpv4_code_masked,
-            ofp.common.oxm_icmpv4_type,
-            ofp.common.oxm_icmpv4_type_masked,
-            ofp.common.oxm_icmpv6_code,
-            ofp.common.oxm_icmpv6_code_masked,
-            ofp.common.oxm_icmpv6_type,
-            ofp.common.oxm_icmpv6_type_masked,
-            ofp.common.oxm_in_phy_port,
-            ofp.common.oxm_in_phy_port_masked,
-            ofp.common.oxm_in_port,
-            ofp.common.oxm_in_port_masked,
-            ofp.common.oxm_ip_dscp,
-            ofp.common.oxm_ip_dscp_masked,
-            ofp.common.oxm_ip_ecn,
-            ofp.common.oxm_ip_ecn_masked,
-            ofp.common.oxm_ip_proto,
-            ofp.common.oxm_ip_proto_masked,
-            ofp.common.oxm_ipv4_dst,
-            ofp.common.oxm_ipv4_dst_masked,
-            ofp.common.oxm_ipv4_src,
-            ofp.common.oxm_ipv4_src_masked,
-            ofp.common.oxm_ipv6_dst,
-            ofp.common.oxm_ipv6_dst_masked,
-            ofp.common.oxm_ipv6_flabel,
-            ofp.common.oxm_ipv6_flabel_masked,
-            ofp.common.oxm_ipv6_nd_sll,
-            ofp.common.oxm_ipv6_nd_sll_masked,
-            ofp.common.oxm_ipv6_nd_target,
-            ofp.common.oxm_ipv6_nd_target_masked,
-            ofp.common.oxm_ipv6_nd_tll,
-            ofp.common.oxm_ipv6_nd_tll_masked,
-            ofp.common.oxm_ipv6_src,
-            ofp.common.oxm_ipv6_src_masked,
-            ofp.common.oxm_metadata,
-            ofp.common.oxm_metadata_masked,
-            ofp.common.oxm_mpls_label,
-            ofp.common.oxm_mpls_label_masked,
-            ofp.common.oxm_mpls_tc,
-            ofp.common.oxm_mpls_tc_masked,
-            ofp.common.oxm_sctp_dst,
-            ofp.common.oxm_sctp_dst_masked,
-            ofp.common.oxm_sctp_src,
-            ofp.common.oxm_sctp_src_masked,
-            ofp.common.oxm_tcp_dst,
-            ofp.common.oxm_tcp_dst_masked,
-            ofp.common.oxm_tcp_src,
-            ofp.common.oxm_tcp_src_masked,
-            ofp.common.oxm_udp_dst,
-            ofp.common.oxm_udp_dst_masked,
-            ofp.common.oxm_udp_src,
-            ofp.common.oxm_udp_src_masked,
-            ofp.common.oxm_vlan_pcp,
-            ofp.common.oxm_vlan_pcp_masked,
-            ofp.common.oxm_vlan_vid,
-            ofp.common.oxm_vlan_vid_masked,
             ofp.common.table_feature_prop,
             ofp.common.table_feature_prop_apply_actions,
             ofp.common.table_feature_prop_apply_actions_miss,
