diff --git a/apps/proxyarp/src/main/java/org/onosproject/proxyarp/DefaultProxyArp.java b/apps/proxyarp/src/main/java/org/onosproject/proxyarp/DefaultProxyArp.java
index 4f02787..d8095bb 100644
--- a/apps/proxyarp/src/main/java/org/onosproject/proxyarp/DefaultProxyArp.java
+++ b/apps/proxyarp/src/main/java/org/onosproject/proxyarp/DefaultProxyArp.java
@@ -23,7 +23,6 @@
 import org.apache.felix.scr.annotations.ReferenceCardinality;
 import org.onosproject.core.ApplicationId;
 import org.onosproject.core.CoreService;
-import org.onosproject.net.intf.InterfaceService;
 import org.onosproject.net.neighbour.DefaultNeighbourMessageHandler;
 import org.onosproject.net.neighbour.NeighbourResolutionService;
 import org.onosproject.net.ConnectPoint;
@@ -53,14 +52,10 @@
     @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
     protected CoreService coreService;
 
-    @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
-    protected InterfaceService interfaceService;
-
     private ApplicationId appId;
 
     private InternalEdgeListener edgeListener = new InternalEdgeListener();
-    private DefaultNeighbourMessageHandler defaultHandler =
-            new DefaultNeighbourMessageHandler(interfaceService);
+    private DefaultNeighbourMessageHandler defaultHandler = new DefaultNeighbourMessageHandler();
 
     @Activate
     protected void activate() {
diff --git a/core/api/src/main/java/org/onosproject/net/neighbour/DefaultNeighbourMessageHandler.java b/core/api/src/main/java/org/onosproject/net/neighbour/DefaultNeighbourMessageHandler.java
index dd2f1b2..5f34e9f 100644
--- a/core/api/src/main/java/org/onosproject/net/neighbour/DefaultNeighbourMessageHandler.java
+++ b/core/api/src/main/java/org/onosproject/net/neighbour/DefaultNeighbourMessageHandler.java
@@ -16,15 +16,9 @@
 
 package org.onosproject.net.neighbour;
 
-import org.onlab.packet.IpAddress;
-import org.onosproject.net.ConnectPoint;
 import org.onosproject.net.Host;
 import org.onosproject.net.host.HostService;
-import org.onosproject.net.host.InterfaceIpAddress;
-import org.onosproject.net.intf.Interface;
-import org.onosproject.net.intf.InterfaceService;
 
-import java.util.List;
 import java.util.Set;
 
 import static org.onlab.packet.VlanId.vlanId;
@@ -35,13 +29,6 @@
  * L2 network (i.e. ProxyArp behaviour).
  */
 public class DefaultNeighbourMessageHandler implements NeighbourMessageHandler {
-
-    InterfaceService interfaceService;
-
-    public DefaultNeighbourMessageHandler(InterfaceService interfaceService) {
-        this.interfaceService = interfaceService;
-    }
-
     @Override
     public void handleMessage(NeighbourMessageContext context, HostService hostService) {
         switch (context.type()) {
@@ -77,19 +64,7 @@
 
             // The request couldn't be resolved.
             // Flood the request on all ports except the incoming port.
-
-            ConnectPoint inPort = context.inPort();
-            Set<Interface> interfaces = interfaceService.getInterfacesByPort(inPort);
-            IpAddress ipAddress = context.target();
-
-            interfaces.stream()
-                    .filter(iface -> {
-                        List<InterfaceIpAddress> ips = iface.ipAddressesList();
-                        return ips.stream().anyMatch(iip -> iip.subnetAddress().contains(ipAddress));
-                    })
-                    .filter(iface -> !iface.connectPoint().equals(inPort))
-                    .forEach(context::forward);
-//            context.flood();
+            context.flood();
             break;
         default:
             break;
