diff --git a/of-save/lib/gen-src/main/java/org/projectfloodlight/openflow/protocol/ver11/OFBadInstructionCodeSerializerVer11.java b/of-save/lib/gen-src/main/java/org/projectfloodlight/openflow/protocol/ver11/OFBadInstructionCodeSerializerVer11.java
new file mode 100644
index 0000000..78ddd43
--- /dev/null
+++ b/of-save/lib/gen-src/main/java/org/projectfloodlight/openflow/protocol/ver11/OFBadInstructionCodeSerializerVer11.java
@@ -0,0 +1,94 @@
+// Copyright (c) 2008 The Board of Trustees of The Leland Stanford Junior University
+// Copyright (c) 2011, 2012 Open Networking Foundation
+// Copyright (c) 2012, 2013 Big Switch Networks, Inc.
+// This library was generated by the LoxiGen Compiler.
+// See the file LICENSE.txt which should have been included in the source distribution
+
+// Automatically generated by LOXI from template const_serializer.java
+// Do not modify
+
+package org.projectfloodlight.openflow.protocol.ver11;
+
+import org.projectfloodlight.openflow.protocol.*;
+import org.projectfloodlight.openflow.protocol.action.*;
+import org.projectfloodlight.openflow.protocol.actionid.*;
+import org.projectfloodlight.openflow.protocol.bsntlv.*;
+import org.projectfloodlight.openflow.protocol.errormsg.*;
+import org.projectfloodlight.openflow.protocol.meterband.*;
+import org.projectfloodlight.openflow.protocol.instruction.*;
+import org.projectfloodlight.openflow.protocol.instructionid.*;
+import org.projectfloodlight.openflow.protocol.match.*;
+import org.projectfloodlight.openflow.protocol.oxm.*;
+import org.projectfloodlight.openflow.protocol.queueprop.*;
+import org.projectfloodlight.openflow.types.*;
+import org.projectfloodlight.openflow.util.*;
+import org.projectfloodlight.openflow.exceptions.*;
+import org.projectfloodlight.openflow.protocol.OFBadInstructionCode;
+import org.jboss.netty.buffer.ChannelBuffer;
+import com.google.common.hash.PrimitiveSink;
+
+public class OFBadInstructionCodeSerializerVer11 {
+
+    public final static short UNKNOWN_INST_VAL = (short) 0x0;
+    public final static short UNSUP_INST_VAL = (short) 0x1;
+    public final static short BAD_TABLE_ID_VAL = (short) 0x2;
+    public final static short UNSUP_METADATA_VAL = (short) 0x3;
+    public final static short UNSUP_METADATA_MASK_VAL = (short) 0x4;
+    public final static short UNSUP_EXP_INST_VAL = (short) 0x5;
+
+    public static OFBadInstructionCode readFrom(ChannelBuffer bb) throws OFParseError {
+        try {
+            return ofWireValue(bb.readShort());
+        } catch (IllegalArgumentException e) {
+            throw new OFParseError(e);
+        }
+    }
+
+    public static void writeTo(ChannelBuffer bb, OFBadInstructionCode e) {
+        bb.writeShort(toWireValue(e));
+    }
+
+    public static void putTo(OFBadInstructionCode e, PrimitiveSink sink) {
+        sink.putShort(toWireValue(e));
+    }
+
+    public static OFBadInstructionCode ofWireValue(short val) {
+        switch(val) {
+            case UNKNOWN_INST_VAL:
+                return OFBadInstructionCode.UNKNOWN_INST;
+            case UNSUP_INST_VAL:
+                return OFBadInstructionCode.UNSUP_INST;
+            case BAD_TABLE_ID_VAL:
+                return OFBadInstructionCode.BAD_TABLE_ID;
+            case UNSUP_METADATA_VAL:
+                return OFBadInstructionCode.UNSUP_METADATA;
+            case UNSUP_METADATA_MASK_VAL:
+                return OFBadInstructionCode.UNSUP_METADATA_MASK;
+            case UNSUP_EXP_INST_VAL:
+                return OFBadInstructionCode.UNSUP_EXP_INST;
+            default:
+                throw new IllegalArgumentException("Illegal wire value for type OFBadInstructionCode in version 1.1: " + val);
+        }
+    }
+
+
+    public static short toWireValue(OFBadInstructionCode e) {
+        switch(e) {
+            case UNKNOWN_INST:
+                return UNKNOWN_INST_VAL;
+            case UNSUP_INST:
+                return UNSUP_INST_VAL;
+            case BAD_TABLE_ID:
+                return BAD_TABLE_ID_VAL;
+            case UNSUP_METADATA:
+                return UNSUP_METADATA_VAL;
+            case UNSUP_METADATA_MASK:
+                return UNSUP_METADATA_MASK_VAL;
+            case UNSUP_EXP_INST:
+                return UNSUP_EXP_INST_VAL;
+            default:
+                throw new IllegalArgumentException("Illegal enum value for type OFBadInstructionCode in version 1.1: " + e);
+        }
+    }
+
+}
