diff --git a/providers/host/src/test/java/org/onosproject/provider/host/impl/HostLocationProviderTest.java b/providers/host/src/test/java/org/onosproject/provider/host/impl/HostLocationProviderTest.java
index 264465e..86c9c4c 100644
--- a/providers/host/src/test/java/org/onosproject/provider/host/impl/HostLocationProviderTest.java
+++ b/providers/host/src/test/java/org/onosproject/provider/host/impl/HostLocationProviderTest.java
@@ -61,6 +61,7 @@
 import org.onosproject.net.device.DeviceEvent;
 import org.onosproject.net.device.DeviceListener;
 import org.onosproject.net.device.DeviceServiceAdapter;
+import org.onosproject.net.flow.FlowRule;
 import org.onosproject.net.flow.TrafficSelector;
 import org.onosproject.net.flow.TrafficTreatment;
 import org.onosproject.net.host.HostDescription;
@@ -287,6 +288,12 @@
         public void requestPackets(TrafficSelector selector,
                                    PacketPriority priority, ApplicationId appId) {
         }
+
+        @Override
+        public void requestPackets(TrafficSelector selector,
+                                   PacketPriority priority, ApplicationId appId,
+                                   FlowRule.Type tableType) {
+        }
     }
 
 
diff --git a/providers/lldp/src/main/java/org/onosproject/provider/lldp/impl/LLDPLinkProvider.java b/providers/lldp/src/main/java/org/onosproject/provider/lldp/impl/LLDPLinkProvider.java
index 9350410..a855d5a 100644
--- a/providers/lldp/src/main/java/org/onosproject/provider/lldp/impl/LLDPLinkProvider.java
+++ b/providers/lldp/src/main/java/org/onosproject/provider/lldp/impl/LLDPLinkProvider.java
@@ -73,7 +73,7 @@
 public class LLDPLinkProvider extends AbstractProvider implements LinkProvider {
 
     private static final String PROP_USE_BDDP = "useBDDP";
-
+    private static final String PROP_DISABLE_LD = "disableLinkDiscovery";
     private static final String PROP_LLDP_SUPPRESSION = "lldpSuppression";
 
     private static final String DEFAULT_LLDP_SUPPRESSION_CONFIG = "../config/lldp_suppression.json";
@@ -99,14 +99,16 @@
 
     private ScheduledExecutorService executor;
 
-    @Property(name = PROP_USE_BDDP, boolValue = true,
-            label = "use BDDP for link discovery")
+    @Property(name = PROP_USE_BDDP, label = "use BDDP for link discovery")
     private boolean useBDDP = true;
 
+    @Property(name = PROP_DISABLE_LD, label = "permanently disable link discovery")
+    private boolean disableLD = false;
+
     private static final long INIT_DELAY = 5;
     private static final long DELAY = 5;
 
-    @Property(name = PROP_LLDP_SUPPRESSION, value = DEFAULT_LLDP_SUPPRESSION_CONFIG,
+    @Property(name = PROP_LLDP_SUPPRESSION,
             label = "Path to LLDP suppression configuration file")
     private String filePath = DEFAULT_LLDP_SUPPRESSION_CONFIG;
 
@@ -128,11 +130,16 @@
     }
 
     @Activate
-    public void activate() {
+    public void activate(ComponentContext context) {
         appId =
             coreService.registerApplication("org.onosproject.provider.lldp");
 
-        loadSuppressionRules();
+        // to load configuration at startup
+        modified(context);
+        if (disableLD) {
+            log.info("Link Discovery has been permanently disabled by configuration");
+            return;
+        }
 
         providerService = providerRegistry.register(this);
         deviceService.addListener(listener);
@@ -170,6 +177,9 @@
 
     @Deactivate
     public void deactivate() {
+        if (disableLD) {
+            return;
+        }
         executor.shutdownNow();
         for (LinkDiscovery ld : discoverers.values()) {
             ld.stop();
@@ -186,21 +196,22 @@
     @Modified
     public void modified(ComponentContext context) {
         if (context == null) {
+            loadSuppressionRules();
             return;
         }
         @SuppressWarnings("rawtypes")
         Dictionary properties = context.getProperties();
 
-        String s = (String) properties.get(PROP_USE_BDDP);
-        if (Strings.isNullOrEmpty(s)) {
-            useBDDP = true;
-        } else {
+        String s = (String) properties.get(PROP_DISABLE_LD);
+        if (!Strings.isNullOrEmpty(s)) {
+            disableLD = Boolean.valueOf(s);
+        }
+        s = (String) properties.get(PROP_USE_BDDP);
+        if (!Strings.isNullOrEmpty(s)) {
             useBDDP = Boolean.valueOf(s);
         }
         s = (String) properties.get(PROP_LLDP_SUPPRESSION);
-        if (Strings.isNullOrEmpty(s)) {
-            filePath = DEFAULT_LLDP_SUPPRESSION_CONFIG;
-        } else {
+        if (!Strings.isNullOrEmpty(s)) {
             filePath = s;
         }
 
@@ -210,6 +221,7 @@
     private void loadSuppressionRules() {
         SuppressionRulesStore store = new SuppressionRulesStore(filePath);
         try {
+            log.info("Reading suppression rules from {}", filePath);
             rules = store.read();
         } catch (IOException e) {
             log.info("Failed to load {}, using built-in rules", filePath);
diff --git a/providers/lldp/src/test/java/org/onosproject/provider/lldp/impl/LLDPLinkProviderTest.java b/providers/lldp/src/test/java/org/onosproject/provider/lldp/impl/LLDPLinkProviderTest.java
index b48af6a..f7be862 100644
--- a/providers/lldp/src/test/java/org/onosproject/provider/lldp/impl/LLDPLinkProviderTest.java
+++ b/providers/lldp/src/test/java/org/onosproject/provider/lldp/impl/LLDPLinkProviderTest.java
@@ -55,6 +55,7 @@
 import org.onosproject.net.device.DeviceEvent;
 import org.onosproject.net.device.DeviceListener;
 import org.onosproject.net.device.DeviceServiceAdapter;
+import org.onosproject.net.flow.FlowRule;
 import org.onosproject.net.flow.TrafficSelector;
 import org.onosproject.net.flow.TrafficTreatment;
 import org.onosproject.net.link.LinkDescription;
@@ -116,7 +117,7 @@
         provider.masterService = masterService;
 
 
-        provider.activate();
+        provider.activate(null);
     }
 
     @Test
@@ -211,6 +212,7 @@
 
     }
 
+    @SuppressWarnings(value = { "unused" })
     private DeviceEvent portEvent(DeviceEvent.Type type, DeviceId did, PortNumber port) {
         return new  DeviceEvent(type, deviceService.getDevice(did),
                                 deviceService.getPort(did, port));
@@ -400,6 +402,12 @@
         public void requestPackets(TrafficSelector selector,
                                    PacketPriority priority, ApplicationId appId) {
         }
+
+        @Override
+        public void requestPackets(TrafficSelector selector,
+                                   PacketPriority priority, ApplicationId appId,
+                                   FlowRule.Type tableType) {
+        }
     }
 
     private class TestDeviceService extends DeviceServiceAdapter {
