diff --git a/of/lib/gen-src/main/java/org/projectfloodlight/openflow/protocol/ver11/OFGroupTypeSerializerVer11.java b/of/lib/gen-src/main/java/org/projectfloodlight/openflow/protocol/ver11/OFGroupTypeSerializerVer11.java
new file mode 100644
index 0000000..0801791
--- /dev/null
+++ b/of/lib/gen-src/main/java/org/projectfloodlight/openflow/protocol/ver11/OFGroupTypeSerializerVer11.java
@@ -0,0 +1,84 @@
+// 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.OFGroupType;
+import org.jboss.netty.buffer.ChannelBuffer;
+import com.google.common.hash.PrimitiveSink;
+
+public class OFGroupTypeSerializerVer11 {
+
+    public final static byte ALL_VAL = (byte) 0x0;
+    public final static byte SELECT_VAL = (byte) 0x1;
+    public final static byte INDIRECT_VAL = (byte) 0x2;
+    public final static byte FF_VAL = (byte) 0x3;
+
+    public static OFGroupType readFrom(ChannelBuffer bb) throws OFParseError {
+        try {
+            return ofWireValue(bb.readByte());
+        } catch (IllegalArgumentException e) {
+            throw new OFParseError(e);
+        }
+    }
+
+    public static void writeTo(ChannelBuffer bb, OFGroupType e) {
+        bb.writeByte(toWireValue(e));
+    }
+
+    public static void putTo(OFGroupType e, PrimitiveSink sink) {
+        sink.putByte(toWireValue(e));
+    }
+
+    public static OFGroupType ofWireValue(byte val) {
+        switch(val) {
+            case ALL_VAL:
+                return OFGroupType.ALL;
+            case SELECT_VAL:
+                return OFGroupType.SELECT;
+            case INDIRECT_VAL:
+                return OFGroupType.INDIRECT;
+            case FF_VAL:
+                return OFGroupType.FF;
+            default:
+                throw new IllegalArgumentException("Illegal wire value for type OFGroupType in version 1.1: " + val);
+        }
+    }
+
+
+    public static byte toWireValue(OFGroupType e) {
+        switch(e) {
+            case ALL:
+                return ALL_VAL;
+            case SELECT:
+                return SELECT_VAL;
+            case INDIRECT:
+                return INDIRECT_VAL;
+            case FF:
+                return FF_VAL;
+            default:
+                throw new IllegalArgumentException("Illegal enum value for type OFGroupType in version 1.1: " + e);
+        }
+    }
+
+}
