diff --git a/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/IPAddress.java b/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/IPAddress.java
index 5e4e818..8831ee1 100644
--- a/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/IPAddress.java
+++ b/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/IPAddress.java
@@ -55,6 +55,8 @@
      */
     public abstract F not();
 
+    public abstract byte[] getBytes();
+
     @Override
     public abstract boolean equals(Object other);
 
@@ -88,7 +90,7 @@
      * @throws NullPointerException if address is null
      */
     @Nonnull
-    public static IPAddress<?> fromInetAddress(@Nonnull InetAddress address) {
+    public static IPAddress<?> of(@Nonnull InetAddress address) {
         Preconditions.checkNotNull(address, "address must not be null");
         byte [] bytes = address.getAddress();
         if(address instanceof Inet4Address)
@@ -98,4 +100,10 @@
         else
             return IPAddress.of(address.getHostAddress());
     }
+
+    @Deprecated
+    @Nonnull
+    public static IPAddress<?> fromInetAddress(@Nonnull InetAddress address) {
+        return of(address);
+    }
 }
diff --git a/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/IPv4Address.java b/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/IPv4Address.java
index 8f3cce3..e845521 100644
--- a/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/IPv4Address.java
+++ b/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/IPv4Address.java
@@ -1,5 +1,6 @@
 package org.projectfloodlight.openflow.types;
 
+import java.net.Inet4Address;
 import java.util.Arrays;
 
 import javax.annotation.Nonnull;
@@ -98,7 +99,8 @@
         return IPv4Address.of(~rawValue);
     }
 
-    public static IPv4Address of(final byte[] address) {
+    @Nonnull
+    public static IPv4Address of(@Nonnull final byte[] address) {
         Preconditions.checkNotNull(address, "address must not be null");
 
         if (address.length != LENGTH) {
@@ -117,6 +119,7 @@
      * @param raw the IPAdress represented as a 32-bit integer
      * @return the constructed IPv4Address
      */
+    @Nonnull
     public static IPv4Address of(final int raw) {
         if(raw == NONE_VAL)
             return NONE;
@@ -158,6 +161,13 @@
         return IPv4Address.of(raw);
     }
 
+    @Nonnull
+    public static IPv4Address of(@Nonnull final Inet4Address address) {
+        Preconditions.checkNotNull(address, "address must not be null");
+        return IPv4Address.of(address.getAddress());
+    }
+
+    @Nonnull
     public static IPv4Address ofCidrMaskLength(final int cidrMaskLength) {
         Preconditions.checkArgument(
                 cidrMaskLength >= 0 && cidrMaskLength <= 32,
@@ -173,6 +183,27 @@
         }
     }
 
+    public IPv4AddressWithMask withMask(@Nonnull byte[] mask) {
+        return IPv4AddressWithMask.of(this, IPv4Address.of(mask));
+    }
+
+    public IPv4AddressWithMask withMask(int mask) {
+        return IPv4AddressWithMask.of(this, IPv4Address.of(mask));
+    }
+
+    public IPv4AddressWithMask withMask(@Nonnull String mask) {
+        return IPv4AddressWithMask.of(this, IPv4Address.of(mask));
+    }
+
+    public IPv4AddressWithMask withMask(@Nonnull Inet4Address mask) {
+        return IPv4AddressWithMask.of(this, IPv4Address.of(mask));
+    }
+
+    public IPv4AddressWithMask withMaskOfLength(int cidrMaskLength) {
+        return IPv4AddressWithMask.of(this,
+                IPv4Address.ofCidrMaskLength(cidrMaskLength));
+    }
+
     public int getInt() {
         return rawValue;
     }
