diff --git a/providers/netconf/device/src/main/java/org/onosproject/provider/netconf/device/impl/NetconfDeviceProvider.java b/providers/netconf/device/src/main/java/org/onosproject/provider/netconf/device/impl/NetconfDeviceProvider.java
index 24e1d89..c35682c 100644
--- a/providers/netconf/device/src/main/java/org/onosproject/provider/netconf/device/impl/NetconfDeviceProvider.java
+++ b/providers/netconf/device/src/main/java/org/onosproject/provider/netconf/device/impl/NetconfDeviceProvider.java
@@ -436,63 +436,67 @@
         log.debug("Connecting NETCONF device {}, on {}:{} with username {}",
                   deviceId, config.ip(), config.port(), config.username());
         storeDeviceKey(config.sshKey(), config.username(), config.password(), deviceId);
-        retriedPortDiscoveryMap.putIfAbsent(deviceId, new AtomicInteger(0));
+        retriedPortDiscoveryMap.put(deviceId, new AtomicInteger(0));
         if (deviceService.getDevice(deviceId) == null) {
             providerService.deviceConnected(deviceId, deviceDescription);
         }
         try {
-            checkAndUpdateDevice(deviceId, deviceDescription);
+            checkAndUpdateDevice(deviceId, deviceDescription, true);
         } catch (Exception e) {
             log.error("Unhandled exception checking {}", deviceId, e);
         }
     }
 
-    private void checkAndUpdateDevice(DeviceId deviceId, DeviceDescription deviceDescription) {
+    private void checkAndUpdateDevice(DeviceId deviceId, DeviceDescription deviceDescription, boolean newlyConnected) {
         Device device = deviceService.getDevice(deviceId);
         if (device == null) {
-            log.debug("Device {} has not been added to store, " +
-                             "since it's not reachable", deviceId);
-        } else {
-            boolean isReachable = isReachable(deviceId);
-            if (isReachable && !deviceService.isAvailable(deviceId)) {
-                if (device.is(DeviceDescriptionDiscovery.class)) {
-                    if (mastershipService.isLocalMaster(deviceId)) {
-                        DeviceDescriptionDiscovery deviceDescriptionDiscovery =
-                                device.as(DeviceDescriptionDiscovery.class);
-                        DeviceDescription updatedDeviceDescription =
-                                deviceDescriptionDiscovery.discoverDeviceDetails();
-                        if (updatedDeviceDescription != null &&
-                                !descriptionEquals(device, updatedDeviceDescription)) {
-                            providerService.deviceConnected(
-                                    deviceId, new DefaultDeviceDescription(
-                                            updatedDeviceDescription, true,
-                                            updatedDeviceDescription.annotations()));
-                        } else if (updatedDeviceDescription == null) {
-                            providerService.deviceConnected(
-                                    deviceId, new DefaultDeviceDescription(
-                                            deviceDescription, true,
-                                            deviceDescription.annotations()));
-                        }
-                    }
-                } else {
-                    log.warn("No DeviceDescriptionDiscovery behaviour for device {} " +
-                                     "using DefaultDeviceDescription", deviceId);
+            log.debug("Device {} has not been added to store, since it's not reachable", deviceId);
+            return;
+        }
+        boolean isReachable = isReachable(deviceId);
+        if (!isReachable && deviceService.isAvailable(deviceId)) {
+            providerService.deviceDisconnected(deviceId);
+            return;
+        } else if (newlyConnected) {
+            updateDeviceDescription(deviceId, deviceDescription, device);
+        }
+        if (isReachable && deviceService.isAvailable(deviceId) &&
+                mastershipService.isLocalMaster(deviceId)) {
+            //if ports are not discovered, retry the discovery
+            if (deviceService.getPorts(deviceId).isEmpty() &&
+                    retriedPortDiscoveryMap.get(deviceId).getAndIncrement() < maxRetries) {
+                discoverPorts(deviceId);
+            }
+            updatePortStatistics(device);
+        }
+    }
+
+    private void updateDeviceDescription(DeviceId deviceId, DeviceDescription deviceDescription, Device device) {
+        if (device.is(DeviceDescriptionDiscovery.class)) {
+            if (mastershipService.isLocalMaster(deviceId)) {
+                DeviceDescriptionDiscovery deviceDescriptionDiscovery =
+                        device.as(DeviceDescriptionDiscovery.class);
+                DeviceDescription updatedDeviceDescription =
+                        deviceDescriptionDiscovery.discoverDeviceDetails();
+                if (updatedDeviceDescription != null &&
+                        !descriptionEquals(device, updatedDeviceDescription)) {
                     providerService.deviceConnected(
                             deviceId, new DefaultDeviceDescription(
-                                    deviceDescription, true, deviceDescription.annotations()));
+                                    updatedDeviceDescription, true,
+                                    updatedDeviceDescription.annotations()));
+                } else if (updatedDeviceDescription == null) {
+                    providerService.deviceConnected(
+                            deviceId, new DefaultDeviceDescription(
+                                    deviceDescription, true,
+                                    deviceDescription.annotations()));
                 }
-            } else if (!isReachable && deviceService.isAvailable(deviceId)) {
-                providerService.deviceDisconnected(deviceId);
-            } else if (isReachable && deviceService.isAvailable(deviceId) &&
-                    mastershipService.isLocalMaster(deviceId)) {
-
-                //if ports are not discovered, retry the discovery
-                if (deviceService.getPorts(deviceId).isEmpty() &&
-                        retriedPortDiscoveryMap.get(deviceId).getAndIncrement() < maxRetries) {
-                    discoverPorts(deviceId);
-                }
-                updatePortStatistics(device);
             }
+        } else {
+            log.warn("No DeviceDescriptionDiscovery behaviour for device {} " +
+                             "using DefaultDeviceDescription", deviceId);
+            providerService.deviceConnected(
+                    deviceId, new DefaultDeviceDescription(
+                            deviceDescription, true, deviceDescription.annotations()));
         }
     }
 
@@ -529,7 +533,7 @@
                     cfgService.getConfig(deviceId, NetconfDeviceConfig.class);
             DeviceDescription deviceDescription = createDeviceRepresentation(deviceId, config);
             storeDeviceKey(config.sshKey(), config.username(), config.password(), deviceId);
-            checkAndUpdateDevice(deviceId, deviceDescription);
+            checkAndUpdateDevice(deviceId, deviceDescription, false);
         });
     }
 
