diff --git a/providers/general/device/src/main/java/org/onosproject/provider/general/device/impl/GeneralDeviceProvider.java b/providers/general/device/src/main/java/org/onosproject/provider/general/device/impl/GeneralDeviceProvider.java
index b341149..34e707f 100644
--- a/providers/general/device/src/main/java/org/onosproject/provider/general/device/impl/GeneralDeviceProvider.java
+++ b/providers/general/device/src/main/java/org/onosproject/provider/general/device/impl/GeneralDeviceProvider.java
@@ -621,20 +621,24 @@
     }
 
     private void doDisconnectDevice(DeviceId deviceId) {
-        log.info("Initiating disconnection from {}...", deviceId);
-        // Remove from core (if master)
-        if (mastershipService.isLocalMaster(deviceId)
-                && deviceService.isAvailable(deviceId)) {
+        log.debug("Initiating disconnection from {}...", deviceId);
+        final DeviceHandshaker handshaker = handshakers.remove(deviceId);
+        final boolean isAvailable = deviceService.isAvailable(deviceId);
+        // Signal disconnection to core (if master).
+        if (isAvailable && mastershipService.isLocalMaster(deviceId)) {
             providerService.deviceDisconnected(deviceId);
         }
+        // Cancel tasks.
         cancelStatsPolling(deviceId);
-        // Perform disconnection with device.
-        final DeviceHandshaker handshaker = handshakers.remove(deviceId);
+        // Disconnect device.
         if (handshaker == null) {
-            // Gracefully ignore
-            log.warn("Missing DeviceHandshaker behavior for {}, " +
-                             "no guarantees of complete disconnection",
-                     deviceId);
+            if (isAvailable) {
+                // If not available don't bother logging. We are probably
+                // invoking this method multiple times for the same device.
+                log.warn("Missing DeviceHandshaker behavior for {}, " +
+                                 "no guarantees of complete disconnection",
+                         deviceId);
+            }
             return;
         }
         handshaker.removeDeviceAgentListener(deviceAgentListener);
@@ -706,6 +710,19 @@
 
         @Override
         public void event(NetworkConfigEvent event) {
+            connectionExecutor.execute(() -> consumeConfigEvent(event));
+        }
+
+        @Override
+        public boolean isRelevant(NetworkConfigEvent event) {
+            return (event.configClass().equals(GeneralProviderDeviceConfig.class) ||
+                    event.configClass().equals(BasicDeviceConfig.class) ||
+                    event.configClass().equals(PiPipeconfConfig.class)) &&
+                    (event.type() == NetworkConfigEvent.Type.CONFIG_ADDED ||
+                            event.type() == NetworkConfigEvent.Type.CONFIG_UPDATED);
+        }
+
+        private void consumeConfigEvent(NetworkConfigEvent event) {
             DeviceId deviceId = (DeviceId) event.subject();
             //Assuming that the deviceId comes with uri 'device:'
             if (notMyScheme(deviceId)) {
@@ -770,15 +787,6 @@
             }
             return false;
         }
-
-        @Override
-        public boolean isRelevant(NetworkConfigEvent event) {
-            return (event.configClass().equals(GeneralProviderDeviceConfig.class) ||
-                    event.configClass().equals(BasicDeviceConfig.class) ||
-                    event.configClass().equals(PiPipeconfConfig.class)) &&
-                    (event.type() == NetworkConfigEvent.Type.CONFIG_ADDED ||
-                            event.type() == NetworkConfigEvent.Type.CONFIG_UPDATED);
-        }
     }
 
     private void augmentConfigData(GeneralProviderDeviceConfig providerConfig, DriverData driverData) {
