diff --git a/core/net/src/main/java/org/onlab/onos/net/host/impl/DefaultPortAddresses.java b/core/net/src/main/java/org/onlab/onos/net/host/impl/DefaultPortAddresses.java
deleted file mode 100644
index fb656cf..0000000
--- a/core/net/src/main/java/org/onlab/onos/net/host/impl/DefaultPortAddresses.java
+++ /dev/null
@@ -1,36 +0,0 @@
-package org.onlab.onos.net.host.impl;
-
-import org.onlab.onos.net.ConnectPoint;
-import org.onlab.onos.net.host.PortAddresses;
-import org.onlab.packet.IpAddress;
-import org.onlab.packet.MacAddress;
-
-public class DefaultPortAddresses implements PortAddresses {
-
-    private final ConnectPoint connectPoint;
-    private final IpAddress ipAddress;
-    private final MacAddress macAddress;
-
-    public DefaultPortAddresses(ConnectPoint connectPoint,
-            IpAddress ip, MacAddress mac) {
-        this.connectPoint = connectPoint;
-        this.ipAddress = ip;
-        this.macAddress = mac;
-    }
-
-    @Override
-    public ConnectPoint connectPoint() {
-        return connectPoint;
-    }
-
-    @Override
-    public IpAddress ip() {
-        return ipAddress;
-    }
-
-    @Override
-    public MacAddress mac() {
-        return macAddress;
-    }
-
-}
diff --git a/core/net/src/main/java/org/onlab/onos/net/host/impl/HostManager.java b/core/net/src/main/java/org/onlab/onos/net/host/impl/HostManager.java
index 3c1a499..9b8ecf7 100644
--- a/core/net/src/main/java/org/onlab/onos/net/host/impl/HostManager.java
+++ b/core/net/src/main/java/org/onlab/onos/net/host/impl/HostManager.java
@@ -155,14 +155,18 @@
     }
 
     @Override
-    public void bindAddressesToPort(IpAddress ip, MacAddress mac,
-            ConnectPoint connectPoint) {
-        store.updateAddressBindings(new DefaultPortAddresses(connectPoint, ip, mac));
+    public void bindAddressesToPort(PortAddresses addresses) {
+        store.updateAddressBindings(addresses);
     }
 
     @Override
-    public void unbindAddressesFromPort(ConnectPoint connectPoint) {
-        store.removeAddressBindings(connectPoint);
+    public void unbindAddressesFromPort(PortAddresses portAddresses) {
+        store.removeAddressBindings(portAddresses);
+    }
+
+    @Override
+    public void clearAddresses(ConnectPoint connectPoint) {
+        store.clearAddressBindings(connectPoint);
     }
 
     @Override
diff --git a/core/net/src/main/java/org/onlab/onos/net/host/impl/HostMonitor.java b/core/net/src/main/java/org/onlab/onos/net/host/impl/HostMonitor.java
index f27cd78..71d1130 100644
--- a/core/net/src/main/java/org/onlab/onos/net/host/impl/HostMonitor.java
+++ b/core/net/src/main/java/org/onlab/onos/net/host/impl/HostMonitor.java
@@ -128,9 +128,11 @@
                 ConnectPoint cp = new ConnectPoint(device.id(), port.number());
                 PortAddresses addresses = hostStore.getAddressBindingsForPort(cp);
 
-                if (addresses.ip().contains(targetIp)) {
-                    sendProbe(device.id(), port, addresses, targetIp);
-                }
+                /*for (IpPrefix prefix : addresses.ips()) {
+                    if (prefix.contains(targetIp)) {
+                        sendProbe(device.id(), port, addresses, targetIp);
+                    }
+                }*/
             }
         }
 
@@ -173,7 +175,7 @@
         }
 
         arp.setSenderHardwareAddress(sourceMacAddress)
-           .setSenderProtocolAddress(portAddresses.ip().toOctets())
+           //TODO .setSenderProtocolAddress(portAddresses.ips().toOctets())
            .setTargetHardwareAddress(ZERO_MAC_ADDRESS)
            .setTargetProtocolAddress(targetIp.toOctets());
 
