diff --git a/of-save/lib/gen-src/main/java/org/projectfloodlight/openflow/protocol/ver13/OFBadInstructionCodeSerializerVer13.java b/of-save/lib/gen-src/main/java/org/projectfloodlight/openflow/protocol/ver13/OFBadInstructionCodeSerializerVer13.java
new file mode 100644
index 0000000..86f6777
--- /dev/null
+++ b/of-save/lib/gen-src/main/java/org/projectfloodlight/openflow/protocol/ver13/OFBadInstructionCodeSerializerVer13.java
@@ -0,0 +1,109 @@
+// 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.ver13;
+
+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 OFBadInstructionCodeSerializerVer13 {
+
+    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 BAD_EXPERIMENTER_VAL = (short) 0x5;
+    public final static short BAD_EXPERIMENTER_TYPE_VAL = (short) 0x6;
+    public final static short BAD_LEN_VAL = (short) 0x7;
+    public final static short EPERM_VAL = (short) 0x8;
+
+    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 BAD_EXPERIMENTER_VAL:
+                return OFBadInstructionCode.BAD_EXPERIMENTER;
+            case BAD_EXPERIMENTER_TYPE_VAL:
+                return OFBadInstructionCode.BAD_EXPERIMENTER_TYPE;
+            case BAD_LEN_VAL:
+                return OFBadInstructionCode.BAD_LEN;
+            case EPERM_VAL:
+                return OFBadInstructionCode.EPERM;
+            default:
+                throw new IllegalArgumentException("Illegal wire value for type OFBadInstructionCode in version 1.3: " + 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 BAD_EXPERIMENTER:
+                return BAD_EXPERIMENTER_VAL;
+            case BAD_EXPERIMENTER_TYPE:
+                return BAD_EXPERIMENTER_TYPE_VAL;
+            case BAD_LEN:
+                return BAD_LEN_VAL;
+            case EPERM:
+                return EPERM_VAL;
+            default:
+                throw new IllegalArgumentException("Illegal enum value for type OFBadInstructionCode in version 1.3: " + e);
+        }
+    }
+
+}
