stoppign starting works nicely
diff --git a/providers/of/link/src/main/java/org/onlab/onos/provider/of/link/impl/LinkDiscovery.java b/providers/of/link/src/main/java/org/onlab/onos/provider/of/link/impl/LinkDiscovery.java
index 2e8fa55..b0b86f0 100644
--- a/providers/of/link/src/main/java/org/onlab/onos/provider/of/link/impl/LinkDiscovery.java
+++ b/providers/of/link/src/main/java/org/onlab/onos/provider/of/link/impl/LinkDiscovery.java
@@ -86,6 +86,7 @@
     private final OpenFlowController ctrl;
     private final LinkProviderService linkProvider;
     private final Map<Integer, OFPortDesc> ports;
+    private Timeout timeout;
 
     /**
      * Instantiates discovery manager for the given physical switch. Creates a
@@ -127,7 +128,7 @@
                 addPort(port);
             }
         }
-        Timer.getTimer().newTimeout(this, this.probeRate,
+        timeout = Timer.getTimer().newTimeout(this, this.probeRate,
                 TimeUnit.MILLISECONDS);
         this.log.debug("Started discovery manager for switch {}",
                 sw.getId());
@@ -186,6 +187,10 @@
                         portnum);
             }
         }
+        ConnectPoint cp = new ConnectPoint(
+                DeviceId.deviceId("of:" + Long.toHexString(sw.getId())),
+                PortNumber.portNumber(port.getPortNo().getPortNumber()));
+        linkProvider.linksVanished(cp);
 
     }
 
@@ -380,14 +385,19 @@
         }
 
         // reschedule timer
-        Timer.getTimer().newTimeout(this, this.probeRate,
+        timeout = Timer.getTimer().newTimeout(this, this.probeRate,
                 TimeUnit.MILLISECONDS);
     }
 
     public void removeAllPorts() {
-        for (OFPortDesc port : sw.getPorts()) {
+        for (OFPortDesc port : ports.values()) {
             removePort(port);
         }
     }
 
+    public void stop() {
+        removeAllPorts();
+        timeout.cancel();
+    }
+
 }