diff --git a/java_gen/java_type.py b/java_gen/java_type.py
index 4e1306b..fc223d7 100644
--- a/java_gen/java_type.py
+++ b/java_gen/java_type.py
@@ -438,6 +438,14 @@
         .op(read='TableId.readByte(bb)',
             write='$name.writeByte(bb)',
             default='TableId.ZERO')
+aux_id = JType("AuxId") \
+        .op(read='AuxId.readByte(bb)',
+            write='$name.writeByte(bb)',
+            default='AuxId.ALL')
+aux_id_default_main = JType("AuxId") \
+        .op(read='AuxId.readByte(bb)',
+            write='$name.writeByte(bb)',
+            default='AuxId.MAIN')
 of_version = JType("OFVersion", 'byte') \
             .op(read='bb.readByte()', write='bb.writeByte($name)')
 
@@ -632,6 +640,8 @@
 
         'of_bsn_tlv_vlan_vid' : { 'value' : vlan_vid },
         'of_bsn_gentable_entry_add' : { 'table_id' : gen_table_id },
+
+        'of_features_reply_auxiliary_id' : {aux_id}
 }
 
 
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);
+    }
+
+}
