diff --git a/lang_python.py b/lang_python.py
index 417bc8d..639cf1a 100644
--- a/lang_python.py
+++ b/lang_python.py
@@ -46,6 +46,7 @@
                 message.py      # Message classes
                 util.py         # Utility functions
             of11: ...           # (code generation incomplete)
+                instruction.py  # Instruction classes
             of12: ...           # (code generation incomplete)
                 oxm.py          # OXM classes
             of13: ...           # (code generation incomplete)
@@ -75,9 +76,9 @@
 
 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", "meter_band", "oxm", "util"],
+    2: ["action", "common", "const", "instruction", "message", "util"],
+    3: ["action", "common", "const", "instruction", "message", "oxm", "util"],
+    4: ["action", "common", "const", "instruction", "message", "meter_band", "oxm", "util"],
 }
 
 def make_gen(name, version):
diff --git a/py_gen/codegen.py b/py_gen/codegen.py
index dc6b999..e552d61 100644
--- a/py_gen/codegen.py
+++ b/py_gen/codegen.py
@@ -93,6 +93,8 @@
         type_values['type'] = 1
     elif utils.class_is_meter_band(cls):
         type_values['type'] = util.constant_for_value(version, "ofp_meter_band_type", util.primary_wire_type(cls, version))
+    elif utils.class_is_instruction(cls):
+        type_values['type'] = util.constant_for_value(version, "ofp_instruction_type", util.primary_wire_type(cls, version))
 
     return type_values
 
@@ -117,6 +119,8 @@
             pyname = cls[7:]
         elif utils.class_is_meter_band(cls):
             pyname = cls[14:]
+        elif utils.class_is_instruction(cls):
+            pyname = cls[15:]
         else:
             pyname = cls[3:]
 
@@ -176,6 +180,7 @@
     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_instruction(x.name)
                     and not utils.class_is_meter_band(x.name)
                     and not utils.class_is_oxm(x.name)
                     and not utils.class_is_list(x.name)]
@@ -193,6 +198,11 @@
             groups[group] = items
     util.render_template(out, 'const.py', version=version, groups=groups)
 
+def generate_instruction(out, name, version):
+    ofclasses = [x for x in build_ofclasses(version)
+                 if utils.class_is_instruction(x.name)]
+    util.render_template(out, 'instruction.py', ofclasses=ofclasses, version=version)
+
 def generate_message(out, name, version):
     ofclasses = [x for x in build_ofclasses(version)
                  if utils.class_is_message(x.name)]
diff --git a/py_gen/templates/init.py b/py_gen/templates/init.py
index 190d65e..f66e62a 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 >= 2:
+import instruction
+:: #endif
 :: if version >= 3:
 import oxm
 :: #endif
diff --git a/py_gen/templates/instruction.py b/py_gen/templates/instruction.py
new file mode 100644
index 0000000..bfa0628
--- /dev/null
+++ b/py_gen/templates/instruction.py
@@ -0,0 +1,68 @@
+:: # 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 action
+import const
+import util
+import loxi.generic_util
+import loxi
+
+def unpack_list(reader):
+    def deserializer(reader, typ):
+        parser = parsers.get(typ)
+        if not parser: raise loxi.ProtocolError("unknown instruction type %d" % typ)
+        return parser(reader)
+    return loxi.generic_util.unpack_list_tlv16(reader, deserializer)
+
+class Instruction(object):
+    type = None # override in subclass
+    pass
+
+:: for ofclass in ofclasses:
+:: include('_ofclass.py', ofclass=ofclass, superclass="Instruction")
+
+:: #endfor
+
+parsers = {
+:: sort_key = lambda x: x.type_members[0].value
+:: msgtype_groups = itertools.groupby(sorted(ofclasses, key=sort_key), sort_key)
+:: for (k, v) in msgtype_groups:
+:: v = list(v)
+:: if len(v) == 1:
+    ${k} : ${v[0].pyname}.unpack,
+:: else:
+    ${k} : parse_${k[12:].lower()},
+:: #endif
+:: #endfor
+}
diff --git a/py_gen/tests/of13.py b/py_gen/tests/of13.py
index 9b8bceb..6ec9897 100644
--- a/py_gen/tests/of13.py
+++ b/py_gen/tests/of13.py
@@ -885,6 +885,39 @@
         ])
         self.assertEquals(expected, obj.pack())
 
+class TestInstructions(unittest.TestCase):
+    def test_goto_table(self):
+        obj = ofp.instruction.goto_table(table_id=5)
+        buf = ''.join([
+            '\x00\x01', # type
+            '\x00\x08', # length
+            '\x05', # table_id
+            '\x00' * 3, # pad
+        ])
+        test_serialization(obj, buf)
+
+    def test_write_metadata(self):
+        # TODO
+        pass
+
+    def test_write_actions(self):
+        # TODO
+        pass
+
+    def test_apply_actions(self):
+        # TODO
+        pass
+
+    def test_clear_actions(self):
+        # TODO
+        pass
+
+    def test_meter(self):
+        # TODO
+        pass
+
+    # TODO test experimenter instructions
+
 class TestAllOF13(unittest.TestCase):
     """
     Round-trips every class through serialization/deserialization.
