diff --git a/c_gen/build_of_g.py b/c_gen/build_of_g.py
index 9b19af6..784dcea 100755
--- a/c_gen/build_of_g.py
+++ b/c_gen/build_of_g.py
@@ -403,39 +403,6 @@
                 val = find_type_value(ofclass, 'type')
             type_maps.inheritance_data[parent][wire_version][subcls] = val
 
-            # Extensions (only actions for now)
-            experimenter = find_experimenter(parent, cls)
-            if parent == 'of_action' and experimenter:
-                val = find_type_value(ofclass, 'subtype')
-                type_maps.extension_action_subtype[wire_version][experimenter][cls] = val
-                if wire_version >= of_g.VERSION_1_3:
-                    cls2 = parent + "_id" + cls[len(parent):]
-                    type_maps.extension_action_id_subtype[wire_version][experimenter][cls2] = val
-            elif parent == 'of_instruction' and experimenter:
-                val = find_type_value(ofclass, 'subtype')
-                type_maps.extension_instruction_subtype[wire_version][experimenter][cls] = val
-
-    # Messages
-    for version, protocol in loxi_globals.ir.items():
-        wire_version = version.wire_version
-        for ofclass in protocol.classes:
-            cls = ofclass.name
-            # HACK (though this is what loxi_utils.class_is_message() does)
-            if not [x for x in ofclass.members if isinstance(x, OFDataMember) and x.name == 'xid']:
-                continue
-            if type_maps.class_is_virtual(cls):
-                continue
-            subcls = cls[3:]
-            val = find_type_value(ofclass, 'type')
-            if not val in type_maps.message_types[wire_version].values():
-                type_maps.message_types[wire_version][subcls] = val
-
-            # Extensions
-            experimenter = find_experimenter('of', cls)
-            if experimenter and ofclass.is_subclassof("of_experimenter"):
-                val = find_type_value(ofclass, 'subtype')
-                type_maps.extension_message_subtype[wire_version][experimenter][cls] = val
-
     type_maps.generate_maps()
 
 def analyze_input():
diff --git a/c_gen/type_maps.py b/c_gen/type_maps.py
index 6cbb3a5..0b660bb 100644
--- a/c_gen/type_maps.py
+++ b/c_gen/type_maps.py
@@ -158,230 +158,6 @@
 
 ################################################################
 #
-# These are message types
-#
-################################################################
-
-# The hardcoded message types are for inheritance parents
-message_types = {
-    # version 1.0
-    of_g.VERSION_1_0:dict(
-        error_msg               = 1,
-        experimenter            = 4,
-        flow_mod                = 14,
-        stats_request           = 16,
-        stats_reply             = 17,
-        ),
-
-    # version 1.1
-    of_g.VERSION_1_1:dict(
-        error_msg               = 1,
-        experimenter            = 4,
-        flow_mod                = 14,
-        group_mod               = 15,
-        stats_request           = 18,
-        stats_reply             = 19,
-        ),
-
-    # version 1.2
-    of_g.VERSION_1_2:dict(
-        error_msg               = 1,
-        experimenter            = 4,
-        flow_mod                = 14,
-        group_mod               = 15,
-        stats_request           = 18,
-        stats_reply             = 19,
-        ),
-
-    # version 1.3
-    of_g.VERSION_1_3:dict(
-        error_msg               = 1,
-        experimenter            = 4,
-        flow_mod                = 14,
-        group_mod               = 15,
-        stats_request           = 18,  # FIXME Multipart
-        stats_reply             = 19,
-        )
-    }
-
-################################################################
-#
-# These are other objects that have a notion of type but are
-# not (yet) promoted to objects with inheritance
-#
-################################################################
-
-stats_types = {
-    # version 1.0
-    of_g.VERSION_1_0:dict(
-        desc = 0,
-        flow = 1,
-        aggregate = 2,
-        table = 3,
-        port = 4,
-        queue = 5,
-        experimenter = 0xffff
-        ),
-
-    # version 1.1
-    of_g.VERSION_1_1:dict(
-        desc = 0,
-        flow = 1,
-        aggregate = 2,
-        table = 3,
-        port = 4,
-        queue = 5,
-        group = 6,
-        group_desc = 7,
-        experimenter = 0xffff
-        ),
-
-    # version 1.2
-        of_g.VERSION_1_2:dict(
-        desc = 0,
-        flow = 1,
-        aggregate = 2,
-        table = 3,
-        port = 4,
-        queue = 5,
-        group = 6,
-        group_desc = 7,
-        group_features = 8,
-        experimenter = 0xffff
-        ),
-
-    # version 1.3
-        of_g.VERSION_1_3:dict(
-        desc = 0,
-        flow = 1,
-        aggregate = 2,
-        table = 3,
-        port = 4,
-        queue = 5,
-        group = 6,
-        group_desc = 7,
-        group_features = 8,
-        meter = 9,
-        meter_config = 10,
-        meter_features = 11,
-        table_features = 12,
-        port_desc = 13,
-        experimenter = 0xffff,
-        bsn_lacp = 0xffff,
-        bsn_switch_pipeline = 0xffff,
-        bsn_port_counter = 0xffff,
-        bsn_vlan_counter = 0xffff
-        )
-    }
-
-common_flow_mod_types = dict(
-    add = 0,
-    modify = 1,
-    modify_strict = 2,
-    delete = 3,
-    delete_strict = 4
-    )
-
-flow_mod_types = {
-    # version 1.0
-    of_g.VERSION_1_0:common_flow_mod_types,
-    of_g.VERSION_1_1:common_flow_mod_types,
-    of_g.VERSION_1_2:common_flow_mod_types,
-    of_g.VERSION_1_3:common_flow_mod_types
-    }
-
-# These do not translate to objects (yet)
-error_types = {
-    # version 1.0
-    of_g.VERSION_1_0:dict(
-        hello_failed        = 0,
-        bad_request         = 1,
-        bad_action          = 2,
-        flow_mod_failed     = 3,
-        port_mod_failed     = 4,
-        queue_op_failed     = 5
-        ),
-
-    # version 1.1
-    of_g.VERSION_1_1:dict(
-        hello_failed         = 0,
-        bad_request          = 1,
-        bad_action           = 2,
-        bad_instruction      = 3,
-        bad_match            = 4,
-        flow_mod_failed      = 5,
-        group_mod_failed     = 6,
-        port_mod_failed      = 7,
-        table_mod_failed     = 8,
-        queue_op_failed      = 9,
-        switch_config_failed = 10
-        ),
-
-    # version 1.2
-    of_g.VERSION_1_2:dict(
-        hello_failed         = 0,
-        bad_request          = 1,
-        bad_action           = 2,
-        bad_instruction      = 3,
-        bad_match            = 4,
-        flow_mod_failed      = 5,
-        group_mod_failed     = 6,
-        port_mod_failed      = 7,
-        table_mod_failed     = 8,
-        queue_op_failed      = 9,
-        switch_config_failed = 10,
-        role_request_failed  = 11,
-        experimenter = 0xffff
-        ),
-
-    # version 1.3
-    of_g.VERSION_1_3:dict(
-        hello_failed         = 0,
-        bad_request          = 1,
-        bad_action           = 2,
-        bad_instruction      = 3,
-        bad_match            = 4,
-        flow_mod_failed      = 5,
-        group_mod_failed     = 6,
-        port_mod_failed      = 7,
-        table_mod_failed     = 8,
-        queue_op_failed      = 9,
-        switch_config_failed = 10,
-        role_request_failed  = 11,
-        meter_mod_failed     = 12,
-        table_features_failed= 13,
-        experimenter = 0xffff
-        )
-    }
-
-group_mod_types = {
-    # version 1.0
-    of_g.VERSION_1_0:dict(),
-
-    # version 1.1
-    of_g.VERSION_1_1:dict(
-        add = 0,
-        modify = 1,
-        delete = 2
-        ),
-
-    # version 1.2
-    of_g.VERSION_1_2:dict(
-        add = 0,
-        modify = 1,
-        delete = 2
-        ),
-
-    # version 1.3
-    of_g.VERSION_1_3:dict(
-        add = 0,
-        modify = 1,
-        delete = 2
-        )
-    }
-
-################################################################
-#
 # type_val is the primary data structure that maps an
 # (class_name, version) pair to the wire data type value
 #
@@ -397,11 +173,6 @@
             for subcls in subclasses:
                 inheritance_map[parent].add(subcls)
 
-    for version, classes in message_types.items():
-        for cls in classes:
-            name = "of_" + cls
-            type_val[(name, version)] = classes[cls]
-
     for parent, versioned in inheritance_data.items():
         for version, subclasses in versioned.items():
             for subcls, value in subclasses.items():
@@ -468,92 +239,3 @@
         rv.append((instance, subcls))
 
     return rv
-
-################################################################
-#
-# Extension related data and functions
-#
-################################################################
-
-# Per OF Version, per experimenter, map exp msg type (subtype) to object IDs
-# @fixme Generate defines for OF_<exp>_SUBTYPE_<msg> for the values below?
-extension_message_subtype = {
-    # version 1.0
-    of_g.VERSION_1_0:dict(  # Version 1.0 extensions
-        bsn = {   # BSN extensions; indexed by class name, value is subtype
-            },
-        nicira = {   # Nicira extensions, value is subtype
-            },
-        ),
-    of_g.VERSION_1_1:dict(  # Version 1.0 extensions
-        bsn = {   # BSN extensions; indexed by class name, value is subtype
-            },
-        ),
-    of_g.VERSION_1_2:dict(  # Version 1.0 extensions
-        bsn = {   # BSN extensions; indexed by class name, value is subtype
-            },
-        ),
-    of_g.VERSION_1_3:dict(  # Version 1.0 extensions
-        bsn = {   # BSN extensions; indexed by class name, value is subtype
-            },
-        ),
-}
-
-# Set to empty dict if no extension actions defined
-# Per OF Version, per experimenter, map actions to subtype
-extension_action_subtype = {
-    # version 1.0
-    of_g.VERSION_1_0:dict(  # Version 1.0 extensions
-        bsn = {   # of_action_bsn_
-            },
-        nicira = {   # of_action_nicira_
-            }
-        ),
-    of_g.VERSION_1_1:dict(  # Version 1.0 extensions
-        bsn = {   # of_action_bsn_
-            },
-        nicira = {   # of_action_nicira_
-            }
-        ),
-    of_g.VERSION_1_2:dict(  # Version 1.0 extensions
-        bsn = {   # of_action_bsn_
-            },
-        nicira = {   # of_action_nicira_
-            }
-        ),
-    of_g.VERSION_1_3:dict(  # Version 1.0 extensions
-        bsn = {   # of_action_bsn_
-            },
-        nicira = {   # of_action_nicira_
-            }
-        ),
-}
-
-# Set to empty dict if no extension actions defined
-# Per OF Version, per experimenter, map actions to subtype
-extension_action_id_subtype = {
-    # version 1.0
-    of_g.VERSION_1_0:dict(),
-    of_g.VERSION_1_1:dict(),
-    of_g.VERSION_1_2:dict(),
-    of_g.VERSION_1_3:dict(  # Version 1.3 extensions
-        bsn = {   # of_action_bsn_
-            },
-        nicira = {   # of_action_nicira_
-            }
-        ),
-}
-
-# Set to empty dict if no extension instructions defined
-extension_instruction_subtype = {
-    # version 1.0
-    of_g.VERSION_1_0:dict(),
-    of_g.VERSION_1_1:dict(),
-    of_g.VERSION_1_2:dict(),
-    of_g.VERSION_1_3:dict(
-        bsn = {   # of_instruction_bsn_
-            },
-        nicira = {   # of_instruction_nicira_
-            }
-        ),
-}
