diff --git a/src/main/java/org/onosproject/segmentrouting/DefaultRoutingHandler.java b/src/main/java/org/onosproject/segmentrouting/DefaultRoutingHandler.java
index 3aed5cc..882bbe7 100644
--- a/src/main/java/org/onosproject/segmentrouting/DefaultRoutingHandler.java
+++ b/src/main/java/org/onosproject/segmentrouting/DefaultRoutingHandler.java
@@ -268,9 +268,9 @@
             }
             currentEcmpSpgMap.entrySet().forEach(entry -> {
                 updatedEcmpSpgMap.put(entry.getKey(), entry.getValue());
-                if (log.isDebugEnabled()) {
-                    log.debug("Root switch: {}", entry.getKey());
-                    log.debug("  Current/Existing SPG: {}", entry.getValue());
+                if (log.isTraceEnabled()) {
+                    log.trace("Root switch: {}", entry.getKey());
+                    log.trace("  Current/Existing SPG: {}", entry.getValue());
                 }
             });
             Set<EdgePair> edgePairs = new HashSet<>();
diff --git a/src/main/java/org/onosproject/segmentrouting/LinkHandler.java b/src/main/java/org/onosproject/segmentrouting/LinkHandler.java
index 2961e50..c643991 100644
--- a/src/main/java/org/onosproject/segmentrouting/LinkHandler.java
+++ b/src/main/java/org/onosproject/segmentrouting/LinkHandler.java
@@ -71,6 +71,7 @@
                 .withTimestampProvider((k, v) -> new WallClockTimestamp())
                 .build();
         log.trace("Current size {}", downedPortStore.size());
+        init();
     }
 
     /**
@@ -85,6 +86,15 @@
     }
 
     /**
+     * Initialize LinkHandler.
+     */
+    private void init() {
+        log.info("Loading stored links");
+        srManager.linkService.getActiveLinks()
+                .forEach(link -> processLinkAdded(link));
+    }
+
+    /**
      * Preprocessing of added link before being sent for route-path handling.
      * Also performs post processing of link.
      *
@@ -95,8 +105,8 @@
         if (!isLinkValid(link)) {
             return;
         }
-        if (!srManager.deviceConfiguration
-                .isConfigured(link.src().deviceId())) {
+        if (srManager.deviceConfiguration == null ||
+                !srManager.deviceConfiguration.isConfigured(link.src().deviceId())) {
             updateSeenLink(link, true);
             // XXX revisit - what about devicePortMap
             log.warn("Source device of this link is not configured.. "
@@ -262,6 +272,10 @@
             return false;
         }
         DeviceConfiguration devConfig = srManager.deviceConfiguration;
+        if (devConfig == null) {
+            log.warn("Cannot check validity of link without device config");
+            return true;
+        }
         try {
             if (!devConfig.isEdgeDevice(srcId)
                     && !devConfig.isEdgeDevice(dstId)) {
diff --git a/src/main/java/org/onosproject/segmentrouting/SegmentRoutingManager.java b/src/main/java/org/onosproject/segmentrouting/SegmentRoutingManager.java
index 7bfa29b..f661add 100644
--- a/src/main/java/org/onosproject/segmentrouting/SegmentRoutingManager.java
+++ b/src/main/java/org/onosproject/segmentrouting/SegmentRoutingManager.java
@@ -136,6 +136,8 @@
 import static com.google.common.base.Preconditions.checkState;
 import static org.onlab.packet.Ethernet.TYPE_ARP;
 import static org.onlab.util.Tools.groupedThreads;
+import static org.onosproject.net.config.NetworkConfigEvent.Type.CONFIG_REGISTERED;
+import static org.onosproject.net.config.NetworkConfigEvent.Type.CONFIG_UNREGISTERED;
 
 /**
  * Segment routing manager.
@@ -425,7 +427,7 @@
         cfgService.registerConfigFactory(xConnectConfigFactory);
         cfgService.registerConfigFactory(mcastConfigFactory);
         cfgService.registerConfigFactory(pwaasConfigFactory);
-
+        log.info("Configuring network before adding listeners");
         cfgListener.configureNetwork();
 
         hostService.addListener(hostListener);
@@ -1055,9 +1057,6 @@
                     }
                     if (event.type() == LinkEvent.Type.LINK_ADDED ||
                             event.type() == LinkEvent.Type.LINK_UPDATED) {
-                        // Note: do not update seenLinks here, otherwise every
-                        // link, even one seen for the first time, will be appear
-                        // to be a previously seen link
                         linkHandler.processLinkAdded((Link) event.subject());
                     } else if (event.type() == LinkEvent.Type.LINK_REMOVED) {
                         linkHandler.processLinkRemoved((Link) event.subject());
@@ -1258,8 +1257,10 @@
 
     private void createOrUpdateDeviceConfiguration() {
         if (deviceConfiguration == null) {
+            log.info("Creating new DeviceConfiguration");
             deviceConfiguration = new DeviceConfiguration(this);
         } else {
+            log.info("Updating DeviceConfiguration");
             deviceConfiguration.updateConfig();
         }
     }
@@ -1295,6 +1296,7 @@
          * Reads network config and initializes related data structure accordingly.
          */
         void configureNetwork() {
+            log.info("Configuring network ...");
             createOrUpdateDeviceConfiguration();
 
             arpHandler = new ArpHandler(srManager);
@@ -1310,6 +1312,7 @@
                                               tunnelHandler, policyStore);
             // add a small delay to absorb multiple network config added notifications
             if (!programmingScheduled.get()) {
+                log.info("Buffering config calls for {} secs", PROGRAM_DELAY);
                 programmingScheduled.set(true);
                 executorService.schedule(new ConfigChange(), PROGRAM_DELAY,
                                          TimeUnit.SECONDS);
@@ -1368,6 +1371,7 @@
                     default:
                         break;
                 }
+                log.info("App config event .. configuring network");
                 configureNetwork();
             } else if (event.configClass().equals(XConnectConfig.class)) {
                 checkState(xConnectHandler != null, "XConnectHandler is not initialized");
@@ -1404,21 +1408,29 @@
 
         @Override
         public boolean isRelevant(NetworkConfigEvent event) {
-            if (event.configClass().equals(SegmentRoutingDeviceConfig.class) ||
-                    event.configClass().equals(SegmentRoutingAppConfig.class) ||
-                    event.configClass().equals(InterfaceConfig.class) ||
-                    event.configClass().equals(XConnectConfig.class) ||
-                    event.configClass().equals(PwaasConfig.class)) {
-                return true;
+            if (event.type() == CONFIG_REGISTERED ||
+                    event.type() == CONFIG_UNREGISTERED) {
+                log.debug("Ignore event {} due to type mismatch", event);
+                return false;
             }
-            log.debug("Ignore irrelevant event class {}", event.configClass().getName());
-            return false;
+
+            if (!event.configClass().equals(SegmentRoutingDeviceConfig.class) &&
+                    !event.configClass().equals(SegmentRoutingAppConfig.class) &&
+                    !event.configClass().equals(InterfaceConfig.class) &&
+                    !event.configClass().equals(XConnectConfig.class) &&
+                    !event.configClass().equals(PwaasConfig.class)) {
+                log.debug("Ignore event {} due to class mismatch", event);
+                return false;
+            }
+
+            return true;
         }
 
         private final class ConfigChange implements Runnable {
             @Override
             public void run() {
                 programmingScheduled.set(false);
+                log.info("Reacting to config changes after buffer delay");
                 for (Device device : deviceService.getDevices()) {
                     processDeviceAdded(device);
                 }
