diff --git a/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/AuxId.java b/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/AuxId.java
new file mode 100644
index 0000000..3d4a689
--- /dev/null
+++ b/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/AuxId.java
@@ -0,0 +1,77 @@
+package org.projectfloodlight.openflow.types;
+
+import org.jboss.netty.buffer.ChannelBuffer;
+import org.projectfloodlight.openflow.exceptions.OFParseError;
+
+import com.google.common.primitives.Shorts;
+
+public class AuxId implements Comparable<AuxId> {
+    
+    private static final short VALIDATION_MASK = 0xFF;
+    
+    private static final short MAIN_VAL = 0x0000;
+    
+    public static final AuxId MAIN = new AuxId(MAIN_VAL);
+            
+    private final short id;
+
+    private AuxId(short id) {
+        this.id = id;
+    }
+
+    public static AuxId of(short id) {
+        switch(id) {
+            case MAIN_VAL:
+                return MAIN;
+            default:
+                if ((id & VALIDATION_MASK) != id)
+                    throw new IllegalArgumentException("Illegal Aux id value: " + id);
+                return new AuxId(id);
+        }
+    }
+
+    public static AuxId of(int id) {
+        if((id & VALIDATION_MASK) != id)
+            throw new IllegalArgumentException("Illegal Aux id value: "+id);
+        return of((short) id);
+    }
+
+    @Override
+    public String toString() {
+        return "0x" + Integer.toHexString(id);
+    }
+
+    public short getValue() {
+        return id;
+    }
+
+    public void writeByte(ChannelBuffer c) {
+        c.writeByte(this.id);
+    }
+
+    public static AuxId readByte(ChannelBuffer c) throws OFParseError {
+        return AuxId.of(c.readUnsignedByte());
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (!(obj instanceof TableId))
+            return false;
+        AuxId other = (AuxId)obj;
+        if (other.id != this.id)
+            return false;
+        return true;
+    }
+
+    @Override
+    public int hashCode() {
+        int prime = 13873;
+        return this.id * prime;
+    }
+
+    @Override
+    public int compareTo(AuxId other) {
+        return Shorts.compare(this.id, other.id);
+    }
+
+}
