diff --git a/apps/sdnip/src/main/java/org/onlab/onos/sdnip/HostToInterfaceAdaptor.java b/apps/sdnip/src/main/java/org/onlab/onos/sdnip/HostToInterfaceAdaptor.java
index 5dc2d1f..a02ce27 100644
--- a/apps/sdnip/src/main/java/org/onlab/onos/sdnip/HostToInterfaceAdaptor.java
+++ b/apps/sdnip/src/main/java/org/onlab/onos/sdnip/HostToInterfaceAdaptor.java
@@ -24,10 +24,10 @@
 
 import org.onlab.onos.net.ConnectPoint;
 import org.onlab.onos.net.host.HostService;
+import org.onlab.onos.net.host.InterfaceIpAddress;
 import org.onlab.onos.net.host.PortAddresses;
 import org.onlab.onos.sdnip.config.Interface;
 import org.onlab.packet.IpAddress;
-import org.onlab.packet.IpPrefix;
 
 import com.google.common.collect.Sets;
 
@@ -59,7 +59,7 @@
         PortAddresses portAddresses =
                 hostService.getAddressBindingsForPort(connectPoint);
 
-        if (!portAddresses.ips().isEmpty()) {
+        if (!portAddresses.ipAddresses().isEmpty()) {
             return new Interface(portAddresses);
         }
 
@@ -71,8 +71,8 @@
         checkNotNull(ipAddress);
 
         for (PortAddresses portAddresses : hostService.getAddressBindings()) {
-            for (IpPrefix p : portAddresses.ips()) {
-                if (p.contains(ipAddress)) {
+            for (InterfaceIpAddress ia : portAddresses.ipAddresses()) {
+                if (ia.subnetAddress().contains(ipAddress)) {
                     return new Interface(portAddresses);
                 }
             }
diff --git a/apps/sdnip/src/main/java/org/onlab/onos/sdnip/config/Interface.java b/apps/sdnip/src/main/java/org/onlab/onos/sdnip/config/Interface.java
index 52c4cde..829cffa 100644
--- a/apps/sdnip/src/main/java/org/onlab/onos/sdnip/config/Interface.java
+++ b/apps/sdnip/src/main/java/org/onlab/onos/sdnip/config/Interface.java
@@ -22,8 +22,8 @@
 import java.util.Set;
 
 import org.onlab.onos.net.ConnectPoint;
+import org.onlab.onos.net.host.InterfaceIpAddress;
 import org.onlab.onos.net.host.PortAddresses;
-import org.onlab.packet.IpPrefix;
 import org.onlab.packet.MacAddress;
 
 import com.google.common.base.MoreObjects;
@@ -35,21 +35,22 @@
  */
 public class Interface {
     private final ConnectPoint connectPoint;
-    private final Set<IpPrefix> ipAddresses;
+    private final Set<InterfaceIpAddress> ipAddresses;
     private final MacAddress macAddress;
 
     /**
-     * Creates an Interface based on a connection point, a set of IP addresses
-     * and a MAC address.
+     * Creates an Interface based on a connection point, a set of interface
+     * IP addresses, and a MAC address.
      *
      * @param connectPoint the connect point this interface is mapped to
-     * @param prefixAddress the IP addresses for the interface
+     * @param ipAddresses the IP addresses for the interface
      * @param macAddress the MAC address of the interface
      */
-    public Interface(ConnectPoint connectPoint, Set<IpPrefix> prefixAddress,
+    public Interface(ConnectPoint connectPoint,
+                     Set<InterfaceIpAddress> ipAddresses,
                      MacAddress macAddress) {
         this.connectPoint = connectPoint;
-        this.ipAddresses = Sets.newHashSet(prefixAddress);
+        this.ipAddresses = Sets.newHashSet(ipAddresses);
         this.macAddress = macAddress;
     }
 
@@ -60,7 +61,7 @@
      */
     public Interface(PortAddresses portAddresses) {
         connectPoint = portAddresses.connectPoint();
-        ipAddresses = Sets.newHashSet(portAddresses.ips());
+        ipAddresses = Sets.newHashSet(portAddresses.ipAddresses());
         macAddress = portAddresses.mac();
     }
 
@@ -76,9 +77,9 @@
     /**
      * Retrieves the set of IP addresses that are assigned to the interface.
      *
-     * @return the set of IP addresses
+     * @return the set of interface IP addresses
      */
-   public Set<IpPrefix> ips() {
+   public Set<InterfaceIpAddress> ipAddresses() {
         return ipAddresses;
     }
 
diff --git a/apps/sdnip/src/test/java/org/onlab/onos/sdnip/HostToInterfaceAdaptorTest.java b/apps/sdnip/src/test/java/org/onlab/onos/sdnip/HostToInterfaceAdaptorTest.java
index e9a8420..a42cd87 100644
--- a/apps/sdnip/src/test/java/org/onlab/onos/sdnip/HostToInterfaceAdaptorTest.java
+++ b/apps/sdnip/src/test/java/org/onlab/onos/sdnip/HostToInterfaceAdaptorTest.java
@@ -35,6 +35,7 @@
 import org.onlab.onos.net.DeviceId;
 import org.onlab.onos.net.PortNumber;
 import org.onlab.onos.net.host.HostService;
+import org.onlab.onos.net.host.InterfaceIpAddress;
 import org.onlab.onos.net.host.PortAddresses;
 import org.onlab.onos.sdnip.config.Interface;
 import org.onlab.packet.IpAddress;
@@ -76,20 +77,33 @@
         portAddresses = Sets.newHashSet();
         interfaces = Maps.newHashMap();
 
+        InterfaceIpAddress ia11 =
+            new InterfaceIpAddress(IpAddress.valueOf("192.168.1.1"),
+                                   IpPrefix.valueOf("192.168.1.0/24"));
         createPortAddressesAndInterface(CP1,
-                Sets.newHashSet(IpPrefix.valueOf("192.168.1.1/24")),
+                Sets.newHashSet(ia11),
                 MacAddress.valueOf("00:00:00:00:00:01"));
 
         // Two addresses in the same subnet
+        InterfaceIpAddress ia21 =
+            new InterfaceIpAddress(IpAddress.valueOf("192.168.2.1"),
+                                   IpPrefix.valueOf("192.168.2.0/24"));
+        InterfaceIpAddress ia22 =
+            new InterfaceIpAddress(IpAddress.valueOf("192.168.2.2"),
+                                   IpPrefix.valueOf("192.168.2.0/24"));
         createPortAddressesAndInterface(CP2,
-                Sets.newHashSet(IpPrefix.valueOf("192.168.2.1/24"),
-                        IpPrefix.valueOf("192.168.2.2/24")),
+                Sets.newHashSet(ia21, ia22),
                 MacAddress.valueOf("00:00:00:00:00:02"));
 
         // Two addresses in different subnets
+        InterfaceIpAddress ia31 =
+            new InterfaceIpAddress(IpAddress.valueOf("192.168.3.1"),
+                                   IpPrefix.valueOf("192.168.3.0/24"));
+        InterfaceIpAddress ia41 =
+            new InterfaceIpAddress(IpAddress.valueOf("192.168.4.1"),
+                                   IpPrefix.valueOf("192.168.4.0/24"));
         createPortAddressesAndInterface(CP3,
-                Sets.newHashSet(IpPrefix.valueOf("192.168.3.1/24"),
-                        IpPrefix.valueOf("192.168.4.1/24")),
+                Sets.newHashSet(ia31, ia41),
                 MacAddress.valueOf("00:00:00:00:00:03"));
 
         expect(hostService.getAddressBindings()).andReturn(portAddresses).anyTimes();
@@ -104,16 +118,17 @@
      * places them in the correct global data stores.
      *
      * @param cp the connect point
-     * @param ips the set of IP addresses
+     * @param ipAddresses the set of interface IP addresses
      * @param mac the MAC address
      */
     private void createPortAddressesAndInterface(
-            ConnectPoint cp, Set<IpPrefix> ips, MacAddress mac) {
-        PortAddresses pa = new PortAddresses(cp, ips, mac);
+            ConnectPoint cp, Set<InterfaceIpAddress> ipAddresses,
+            MacAddress mac) {
+        PortAddresses pa = new PortAddresses(cp, ipAddresses, mac);
         portAddresses.add(pa);
         expect(hostService.getAddressBindingsForPort(cp)).andReturn(pa).anyTimes();
 
-        Interface intf = new Interface(cp, ips, mac);
+        Interface intf = new Interface(cp, ipAddresses, mac);
         interfaces.put(cp, intf);
     }
 
diff --git a/apps/sdnip/src/test/java/org/onlab/onos/sdnip/PeerConnectivityManagerTest.java b/apps/sdnip/src/test/java/org/onlab/onos/sdnip/PeerConnectivityManagerTest.java
index e3e4896..832989f 100644
--- a/apps/sdnip/src/test/java/org/onlab/onos/sdnip/PeerConnectivityManagerTest.java
+++ b/apps/sdnip/src/test/java/org/onlab/onos/sdnip/PeerConnectivityManagerTest.java
@@ -31,6 +31,7 @@
 import org.onlab.onos.net.flow.DefaultTrafficTreatment;
 import org.onlab.onos.net.flow.TrafficSelector;
 import org.onlab.onos.net.flow.TrafficTreatment;
+import org.onlab.onos.net.host.InterfaceIpAddress;
 import org.onlab.onos.net.intent.IntentService;
 import org.onlab.onos.net.intent.PointToPointIntent;
 import org.onlab.onos.sdnip.bgp.BgpConstants;
@@ -175,14 +176,20 @@
         configuredInterfaces = new HashMap<>();
 
         String interfaceSw1Eth1 = "s1-eth1";
+        InterfaceIpAddress ia1 =
+            new InterfaceIpAddress(IpAddress.valueOf("192.168.10.1"),
+                                   IpPrefix.valueOf("192.168.10.0/24"));
         Interface intfsw1eth1 = new Interface(s1Eth1,
-                Collections.singleton(IpPrefix.valueOf("192.168.10.0/24")),
+                Collections.singleton(ia1),
                 MacAddress.valueOf("00:00:00:00:00:01"));
 
         configuredInterfaces.put(interfaceSw1Eth1, intfsw1eth1);
         String interfaceSw2Eth1 = "s2-eth1";
+        InterfaceIpAddress ia2 =
+            new InterfaceIpAddress(IpAddress.valueOf("192.168.20.2"),
+                                   IpPrefix.valueOf("192.168.20.0/24"));
         Interface intfsw2eth1 = new Interface(s2Eth1,
-                Collections.singleton(IpPrefix.valueOf("192.168.20.0/24")),
+                Collections.singleton(ia2),
                 MacAddress.valueOf("00:00:00:00:00:02"));
         configuredInterfaces.put(interfaceSw2Eth1, intfsw2eth1);
 
diff --git a/apps/sdnip/src/test/java/org/onlab/onos/sdnip/RouterTest.java b/apps/sdnip/src/test/java/org/onlab/onos/sdnip/RouterTest.java
index add4f79..6d77a2c 100644
--- a/apps/sdnip/src/test/java/org/onlab/onos/sdnip/RouterTest.java
+++ b/apps/sdnip/src/test/java/org/onlab/onos/sdnip/RouterTest.java
@@ -51,6 +51,7 @@
 import org.onlab.onos.net.flow.TrafficTreatment;
 import org.onlab.onos.net.host.HostListener;
 import org.onlab.onos.net.host.HostService;
+import org.onlab.onos.net.host.InterfaceIpAddress;
 import org.onlab.onos.net.intent.IntentService;
 import org.onlab.onos.net.intent.MultiPointToSinglePointIntent;
 import org.onlab.onos.net.provider.ProviderId;
@@ -150,22 +151,31 @@
 
         Set<Interface> interfaces = Sets.newHashSet();
 
+        InterfaceIpAddress ia1 =
+            new InterfaceIpAddress(IpAddress.valueOf("192.168.10.101"),
+                                   IpPrefix.valueOf("192.168.10.0/24"));
         Interface sw1Eth1 = new Interface(SW1_ETH1,
-                Sets.newHashSet(IpPrefix.valueOf("192.168.10.101/24")),
+                Sets.newHashSet(ia1),
                 MacAddress.valueOf("00:00:00:00:00:01"));
 
         expect(interfaceService.getInterface(SW1_ETH1)).andReturn(sw1Eth1).anyTimes();
         interfaces.add(sw1Eth1);
 
+        InterfaceIpAddress ia2 =
+            new InterfaceIpAddress(IpAddress.valueOf("192.168.20.101"),
+                                   IpPrefix.valueOf("192.168.20.0/24"));
         Interface sw2Eth1 = new Interface(SW2_ETH1,
-                Sets.newHashSet(IpPrefix.valueOf("192.168.20.101/24")),
+                Sets.newHashSet(ia2),
                 MacAddress.valueOf("00:00:00:00:00:02"));
 
         expect(interfaceService.getInterface(SW2_ETH1)).andReturn(sw2Eth1).anyTimes();
         interfaces.add(sw2Eth1);
 
+        InterfaceIpAddress ia3 =
+            new InterfaceIpAddress(IpAddress.valueOf("192.168.30.101"),
+                                   IpPrefix.valueOf("192.168.30.0/24"));
         Interface sw3Eth1 = new Interface(SW3_ETH1,
-                Sets.newHashSet(IpPrefix.valueOf("192.168.30.101/24")),
+                Sets.newHashSet(ia3),
                 MacAddress.valueOf("00:00:00:00:00:03"));
 
         expect(interfaceService.getInterface(SW3_ETH1)).andReturn(sw3Eth1).anyTimes();
