diff --git a/providers/netcfglinks/src/main/java/org/onosproject/provider/netcfglinks/NetworkConfigLinksProvider.java b/providers/netcfglinks/src/main/java/org/onosproject/provider/netcfglinks/NetworkConfigLinksProvider.java
index edbc25c..2671d93 100644
--- a/providers/netcfglinks/src/main/java/org/onosproject/provider/netcfglinks/NetworkConfigLinksProvider.java
+++ b/providers/netcfglinks/src/main/java/org/onosproject/provider/netcfglinks/NetworkConfigLinksProvider.java
@@ -117,7 +117,7 @@
     private final InternalDeviceListener deviceListener = new InternalDeviceListener();
     private final InternalConfigListener cfgListener = new InternalConfigListener();
 
-    private Set<LinkKey> configuredLinks = new HashSet<>();
+    protected Set<LinkKey> configuredLinks = new HashSet<>();
 
     public NetworkConfigLinksProvider() {
         super(new ProviderId("lldp", PROVIDER_NAME));
@@ -259,6 +259,35 @@
     }
 
     /**
+     * Removes after stopping discovery helper for specified device.
+     * @param deviceId device to remove
+     */
+    private void removeDevice(final DeviceId deviceId) {
+        discoverers.computeIfPresent(deviceId, (did, ld) -> {
+            ld.stop();
+            return null;
+        });
+
+    }
+
+    /**
+     * Removes a port from the specified discovery helper.
+     * @param port the port
+     */
+    private void removePort(Port port) {
+        if (port.element() instanceof Device) {
+            Device d = (Device) port.element();
+            LinkDiscovery ld = discoverers.get(d.id());
+            if (ld != null) {
+                ld.removePort(port.number());
+            }
+        } else {
+            log.warn("Attempted to remove non-Device port", port);
+        }
+    }
+
+
+    /**
      * Processes incoming packets.
      */
     private class InternalPacketProcessor implements PacketProcessor {
@@ -355,21 +384,21 @@
                         updateDevice(device).ifPresent(ld -> updatePort(ld, port));
                     } else {
                         log.debug("Port down {}", port);
-                        //removePort(port);
+                        removePort(port);
                         providerService.linksVanished(new ConnectPoint(port.element().id(),
                                                                        port.number()));
                     }
                     break;
                 case PORT_REMOVED:
                     log.debug("Port removed {}", port);
-                    //removePort(port);
+                    removePort(port);
                     providerService.linksVanished(new ConnectPoint(port.element().id(),
                                                                    port.number()));
                     break;
                 case DEVICE_REMOVED:
                 case DEVICE_SUSPENDED:
                     log.debug("Device removed {}", deviceId);
-                    //removeDevice(deviceId);
+                    removeDevice(deviceId);
                     providerService.linksVanished(deviceId);
                     break;
                 case DEVICE_AVAILABILITY_CHANGED:
@@ -378,7 +407,7 @@
                         updateDevice(device).ifPresent(ld -> updatePorts(ld, deviceId));
                     } else {
                         log.debug("Device down {}", deviceId);
-                        //removeDevice(deviceId);
+                        removeDevice(deviceId);
                         providerService.linksVanished(deviceId);
                     }
                     break;
