diff --git a/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/protocol/match/MatchField.java b/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/protocol/match/MatchField.java
index 08a368d..3eaaa95 100644
--- a/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/protocol/match/MatchField.java
+++ b/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/protocol/match/MatchField.java
@@ -13,7 +13,7 @@
 import org.projectfloodlight.openflow.types.MacAddress;
 import org.projectfloodlight.openflow.types.OFMetadata;
 import org.projectfloodlight.openflow.types.OFPort;
-import org.projectfloodlight.openflow.types.OFPortMap;
+import org.projectfloodlight.openflow.types.OFPortBitmap;
 import org.projectfloodlight.openflow.types.OFValueType;
 import org.projectfloodlight.openflow.types.TransportPort;
 import org.projectfloodlight.openflow.types.U32;
@@ -171,8 +171,8 @@
             new MatchField<U8>("mpls_tc", MatchFields.MPLS_TC,
                     new Prerequisite<EthType>(MatchField.ETH_TYPE, EthType.MPLS_UNICAST, EthType.MPLS_MULTICAST));
 
-    public final static MatchField<OFPortMap> BSN_IN_PORTS_MASKED_128 =
-            new MatchField<OFPortMap>("bsn_in_port_masked_128", MatchFields.BSN_IN_PORTS_MASKED_128);
+    public final static MatchField<OFPortBitmap> BSN_IN_PORTS_128 =
+            new MatchField<OFPortBitmap>("bsn_in_port_masked_128", MatchFields.BSN_IN_PORTS_128);
 
     public String getName() {
         return name;
diff --git a/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/protocol/match/MatchFields.java b/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/protocol/match/MatchFields.java
index c73530b..0de5caf 100644
--- a/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/protocol/match/MatchFields.java
+++ b/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/protocol/match/MatchFields.java
@@ -38,5 +38,5 @@
     IPV6_ND_TLL,
     MPLS_LABEL,
     MPLS_TC,
-    BSN_IN_PORTS_MASKED_128
+    BSN_IN_PORTS_128
 }
diff --git a/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/OFPortBitmap.java b/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/OFPortBitmap.java
new file mode 100644
index 0000000..ecf9bc5
--- /dev/null
+++ b/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/OFPortBitmap.java
@@ -0,0 +1,85 @@
+package org.projectfloodlight.openflow.types;
+
+import org.jboss.netty.buffer.ChannelBuffer;
+
+public class OFPortBitmap implements OFValueType<OFPortBitmap> {
+
+    static final int LENGTH = 16;
+
+    private final long raw1; // MSBs (ports 64-127)
+    private final long raw2; // LSBs (ports 0-63)
+
+    public static final OFPortBitmap ALL = new OFPortBitmap(-1, -1);
+    public static final OFPortBitmap NONE = new OFPortBitmap(0, 0);
+
+    private OFPortBitmap(long raw1, long raw2) {
+        this.raw1 = raw1;
+        this.raw2 = raw2;
+    }
+
+    static OFPortBitmap of(long raw1, long raw2) {
+        if (raw1 == -1 && raw2 == -1)
+            return ALL;
+        if (raw1 == 0 && raw2 == 0)
+            return NONE;
+        return new OFPortBitmap(raw1, raw2);
+    }
+
+    @Override
+    public int getLength() {
+        return LENGTH;
+    }
+
+    @Override
+    public OFPortBitmap applyMask(OFPortBitmap mask) {
+        return of(this.raw1 & mask.raw1, this.raw2 & mask.raw2);
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (!(obj instanceof OFPortBitmap))
+            return false;
+        OFPortBitmap other = (OFPortBitmap)obj;
+        return (other.raw1 == this.raw1 && other.raw2 == this.raw2);
+    }
+
+    @Override
+    public int hashCode() {
+        return (int)(31 * raw1 + raw2);
+    }
+
+    protected static boolean isBitOn(long raw1, long raw2, int bit) {
+        if (bit < 0 || bit >= 128)
+            throw new IndexOutOfBoundsException("Port number is out of bounds");
+        long word;
+        if (bit < 64) {
+            word = raw2; // ports 0-63
+        } else {
+            word = raw1; // ports 64-127
+            bit -= 64;
+        }
+        return (word & ((long)1 << bit)) != 0;
+    }
+
+
+    public void write16Bytes(ChannelBuffer cb) {
+        cb.writeLong(raw1);
+        cb.writeLong(raw2);
+    }
+
+    public static OFPortBitmap read16Bytes(ChannelBuffer cb) {
+        long raw1 = cb.readLong();
+        long raw2 = cb.readLong();
+        return of(raw1, raw2);
+    }
+
+    public boolean isOn(OFPort port) {
+        return isBitOn(raw1, raw2, port.getPortNumber());
+    }
+
+    @Override
+    public String toString() {
+        return (String.format("%64s", Long.toBinaryString(raw2)) + String.format("%64s", Long.toBinaryString(raw1))).replaceAll(" ", "0");
+    }
+
+}
diff --git a/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/OFPortMap.java b/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/OFPortMap.java
index b666782..0454d39 100644
--- a/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/OFPortMap.java
+++ b/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/OFPortMap.java
@@ -1,64 +1,14 @@
 package org.projectfloodlight.openflow.types;
 
-import org.jboss.netty.buffer.ChannelBuffer;
 
-public class OFPortMap implements OFValueType<OFPortMap> {
+public class OFPortMap extends Masked<OFPortBitmap> {
 
-    static final int LENGTH = 16;
-
-    private final long raw1;
-    private final long raw2;
-
-    public static final OFPortMap NONE = of(0, 0);
-
-    private OFPortMap(long raw1, long raw2) {
-        this.raw1 = raw1;
-        this.raw2 = raw2;
-
-    }
-
-    public static OFPortMap of(long raw1, long raw2) {
-        if (raw1 == 0 && raw2 == 0)
-            return NONE;
-        return new OFPortMap(raw1, raw2);
-    }
-
-    @Override
-    public int getLength() {
-        return LENGTH;
-    }
-
-    @Override
-    public OFPortMap applyMask(OFPortMap mask) {
-        return of(this.raw1 & mask.raw1, this.raw2 & mask.raw2);
-    }
-
-    public void write16Bytes(ChannelBuffer cb) {
-        cb.writeLong(raw1);
-        cb.writeLong(raw2);
-    }
-
-    public static OFPortMap read16Bytes(ChannelBuffer cb) {
-        long raw1 = cb.readLong();
-        long raw2 = cb.readLong();
-        return of(raw1, raw2);
-    }
-
-    private static boolean isBitOn(long raw1, long raw2, int bit) {
-        if (bit < 0 || bit >= 128)
-            throw new IndexOutOfBoundsException("Port number is out of bounds");
-        long word;
-        if (bit < 64) {
-            word = raw1;
-        } else {
-            word = raw2;
-            bit -= 64;
-        }
-        return (word & ((long)1 << bit)) != 0;
+    private OFPortMap(OFPortBitmap mask) {
+        super(OFPortBitmap.NONE, mask);
     }
 
     public boolean isOn(OFPort port) {
-        return isBitOn(raw1, raw2, port.getPortNumber());
+        return this.mask.isOn(port);
     }
 
     public static OFPortMap ofPorts(OFPort... ports) {
@@ -70,8 +20,16 @@
     }
 
     @Override
-    public String toString() {
-        return (String.format("%64s", Long.toBinaryString(raw2)) + String.format("%64s", Long.toBinaryString(raw1))).replaceAll(" ", "0");
+    public boolean equals(Object obj) {
+        if (!(obj instanceof OFPortMap))
+            return false;
+        OFPortMap other = (OFPortMap)obj;
+        return (other.value.equals(this.value) && other.mask.equals(this.mask));
+    }
+
+    @Override
+    public int hashCode() {
+        return 619 * mask.hashCode() + 257 * value.hashCode();
     }
 
     public static class Builder {
@@ -82,7 +40,7 @@
         }
 
         public boolean isOn(OFPort port) {
-            return isBitOn(raw1, raw2, port.getPortNumber());
+            return OFPortBitmap.isBitOn(raw1, raw2, port.getPortNumber());
         }
 
         public Builder set(OFPort port) {
@@ -90,9 +48,9 @@
             if (bit < 0 || bit >= 128)
                 throw new IndexOutOfBoundsException("Port number is out of bounds");
             if (bit < 64) {
-                raw1 |= ((long)1 << bit);
+                raw2 |= ((long)1 << bit);
             } else {
-                raw2 |= ((long)1 << (bit - 64));
+                raw1 |= ((long)1 << (bit - 64));
             }
             return this;
         }
@@ -102,15 +60,15 @@
             if (bit < 0 || bit >= 128)
                 throw new IndexOutOfBoundsException("Port number is out of bounds");
             if (bit < 64) {
-                raw1 &= ~((long)1 << bit);
+                raw2 &= ~((long)1 << bit);
             } else {
-                raw2 &= ~((long)1 << (bit - 64));
+                raw1 &= ~((long)1 << (bit - 64));
             }
             return this;
         }
 
         public OFPortMap build() {
-            return OFPortMap.of(raw1, raw2);
+            return new OFPortMap(OFPortBitmap.of(raw1, raw2));
         }
     }
 
