diff --git a/c_gen/templates/loci_show.h b/c_gen/templates/loci_show.h
index 4179b13..aff632f 100644
--- a/c_gen/templates/loci_show.h
+++ b/c_gen/templates/loci_show.h
@@ -220,6 +220,7 @@
 #define LOCI_SHOW_u32_role(writer, cookie, val) LOCI_SHOW_x32(writer, cookie, val)
 #define LOCI_SHOW_u16_total_len(writer, cookie, val) LOCI_SHOW_u16(writer, cookie, val)
 #define LOCI_SHOW_port_no_port_no(writer, cookie, val) LOCI_SHOW_port_no(writer, cookie, val)
+#define LOCI_SHOW_port_no_loopback_port_no(writer, cookie, val) LOCI_SHOW_port_no(writer, cookie, val)
 #define LOCI_SHOW_mac_hw_addr(writer, cookie, val) LOCI_SHOW_mac(writer, cookie, val)
 #define LOCI_SHOW_u32_config(writer, cookie, val) LOCI_SHOW_x32(writer, cookie, val)
 #define LOCI_SHOW_u32_advertise(writer, cookie, val) LOCI_SHOW_x32(writer, cookie, val)
diff --git a/c_gen/templates/of_wire_buf.h b/c_gen/templates/of_wire_buf.h
index dfec5c3..0922a69 100644
--- a/c_gen/templates/of_wire_buf.h
+++ b/c_gen/templates/of_wire_buf.h
@@ -119,12 +119,6 @@
 #define OF_OBJECT_TO_WBUF(obj) ((obj)->wbuf)
 
 
-
-/**
- * Minimum allocation size for wire buffer object
- */
-#define OF_WIRE_BUFFER_MIN_ALLOC_BYTES 128
-
 /**
  * Allocate a wire buffer object and the underlying data buffer.
  * The wire buffer is initally empty (current_bytes == 0).
@@ -142,10 +136,6 @@
     }
     MEMSET(wbuf, 0, sizeof(of_wire_buffer_t));
 
-    if (a_bytes < OF_WIRE_BUFFER_MIN_ALLOC_BYTES) {
-        a_bytes = OF_WIRE_BUFFER_MIN_ALLOC_BYTES;
-    }
-
     if ((wbuf->buf = (uint8_t *)MALLOC(a_bytes)) == NULL) {
         FREE(wbuf);
         return NULL;
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 1c5be86..5e4e818 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
@@ -1,7 +1,13 @@
 package org.projectfloodlight.openflow.types;
 
+import java.net.Inet4Address;
+import java.net.Inet6Address;
+import java.net.InetAddress;
+
 import javax.annotation.Nonnull;
 
+import com.google.common.base.Preconditions;
+
 public abstract class IPAddress<F extends IPAddress<F>> implements OFValueType<F> {
 
     public abstract IPVersion getIpVersion();
@@ -66,9 +72,7 @@
      */
     @Nonnull
     public static IPAddress<?> of(@Nonnull String ip) {
-        if (ip == null) {
-            throw new NullPointerException("String ip must not be null");
-        }
+        Preconditions.checkNotNull(ip, "ip must not be null");
         if (ip.indexOf('.') != -1)
             return IPv4Address.of(ip);
         else if (ip.indexOf(':') != -1)
@@ -77,4 +81,21 @@
             throw new IllegalArgumentException("IP Address not well formed: " + ip);
     }
 
+    /**
+     * Factory function for InetAddress values.
+     * @param address the InetAddress you wish to parse into an IPAddress object.
+     * @return the IPAddress object.
+     * @throws NullPointerException if address is null
+     */
+    @Nonnull
+    public static IPAddress<?> fromInetAddress(@Nonnull InetAddress address) {
+        Preconditions.checkNotNull(address, "address must not be null");
+        byte [] bytes = address.getAddress();
+        if(address instanceof Inet4Address)
+            return IPv4Address.of(bytes);
+        else if (address instanceof Inet6Address)
+            return IPv6Address.of(bytes);
+        else
+            return IPAddress.of(address.getHostAddress());
+    }
 }
diff --git a/java_gen/pre-written/src/test/java/org/projectfloodlight/openflow/types/IPAddressTest.java b/java_gen/pre-written/src/test/java/org/projectfloodlight/openflow/types/IPAddressTest.java
index 25fc943..865df75 100644
--- a/java_gen/pre-written/src/test/java/org/projectfloodlight/openflow/types/IPAddressTest.java
+++ b/java_gen/pre-written/src/test/java/org/projectfloodlight/openflow/types/IPAddressTest.java
@@ -1,6 +1,9 @@
 package org.projectfloodlight.openflow.types;
 
-import static org.junit.Assert.*;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.fail;
+
+import java.net.UnknownHostException;
 
 import org.junit.Test;
 
@@ -51,4 +54,14 @@
         }
     }
 
+    @Test
+    public void testFromInetAddressException() throws UnknownHostException {
+        try {
+            IPAddress.fromInetAddress(null);
+            fail("Should have thrown NullPointerException");
+        } catch (NullPointerException e) {
+            assertNotNull(e.getMessage());
+        }
+    }
+
 }
diff --git a/openflow_input/bsn_vport b/openflow_input/bsn_vport
index 82d9d33..4f06462 100644
--- a/openflow_input/bsn_vport
+++ b/openflow_input/bsn_vport
@@ -48,6 +48,8 @@
     /* DSCP flags are mutually exclusive */
     OF_BSN_VPORT_L2GRE_DSCP_ASSIGN = 0x2,
     OF_BSN_VPORT_L2GRE_DSCP_COPY = 0x4,
+
+    OF_BSN_VPORT_L2GRE_LOOPBACK_IS_VALID = 0x8,
 };
 
 // BSN Virtual port object header
@@ -79,16 +81,17 @@
     uint16_t type == 1;
     uint16_t length;
     enum ofp_bsn_vport_l2gre_flags flags;
-    of_port_no_t port_no;       /* OF port number of parent */
-    of_mac_addr_t local_mac;    /* Local MAC */
-    of_mac_addr_t nh_mac;       /* Next Hop MAC */
-    of_ipv4_t src_ip;           /* Source IP */
-    of_ipv4_t dst_ip;           /* Destination IP */
+    of_port_no_t port_no;           /* OF port number of parent */
+    of_port_no_t loopback_port_no;  /* OF port number of loopback */
+    of_mac_addr_t local_mac;        /* Local MAC */
+    of_mac_addr_t nh_mac;           /* Next Hop MAC */
+    of_ipv4_t src_ip;               /* Source IP */
+    of_ipv4_t dst_ip;               /* Destination IP */
     uint8_t dscp;
     uint8_t ttl;
     pad(2);
-    uint32_t vpn;               /* VPN ID (for GRE Key) */
-    of_port_name_t if_name;     /* Virtual Interface Name */
+    uint32_t vpn;                   /* VPN ID (for GRE Key) */
+    of_port_name_t if_name;         /* Virtual Interface Name */
 };
 
 
diff --git a/test_data/of13/bsn_virtual_port_create_request__l2gre.data b/test_data/of13/bsn_virtual_port_create_request__l2gre.data
index b5fd5fa..9d90293 100644
--- a/test_data/of13/bsn_virtual_port_create_request__l2gre.data
+++ b/test_data/of13/bsn_virtual_port_create_request__l2gre.data
@@ -1,13 +1,14 @@
 -- binary
 04 04               # version, type
-00 48               # len
+00 4c               # len
 01 02 03 04         # xid
 00 5c 16 c7         # experimenter
 00 00 00 0f         # subtype
 00 01               # vport type
-00 38               # vport len
+00 3c               # vport len
 00 00 00 03         # vport flags
-00 00 00 01         # vport port no
+00 00 00 01         # parent port no
+00 00 00 02         # loopback port no
 0a 0b 0c 0d 0e 0f   # local mac
 01 02 03 04 05 06   # next hop mac
 c0 00 00 02         # src ip
@@ -20,6 +21,7 @@
 xid=0x01020304, vport=ofp.bsn_vport_l2gre(
 flags=ofp.OF_BSN_VPORT_L2GRE_LOCAL_MAC_IS_VALID | ofp.OF_BSN_VPORT_L2GRE_DSCP_ASSIGN,
 port_no=1,
+loopback_port_no=2,
 local_mac=[0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f],
 nh_mac=[0x01, 0x02, 0x03, 0x04, 0x05, 0x06],
 src_ip=0xc0000002,
@@ -42,6 +44,7 @@
             OF_BSN_VPORT_L2GRE_LOCAL_MAC_IS_VALID |
             OF_BSN_VPORT_L2GRE_DSCP_ASSIGN);
         of_bsn_vport_l2gre_port_no_set(vport, 1);
+        of_bsn_vport_l2gre_loopback_port_no_set(vport, 2);
         of_bsn_vport_l2gre_local_mac_set(vport, local_mac);
         of_bsn_vport_l2gre_nh_mac_set(vport, nh_mac);
         of_bsn_vport_l2gre_src_ip_set(vport, 0xc0000002);
@@ -65,6 +68,7 @@
                 )
             )
             .setPortNo(OFPort.of(1))
+            .setLoopbackPortNo(OFPort.of(2))
             .setLocalMac(MacAddress.of("0a:0b:0c:0d:0e:0f"))
             .setNhMac(MacAddress.of("01:02:03:04:05:06"))
             .setSrcIp(IPv4Address.of("192.0.0.2"))
