diff --git a/app/src/main/java/org/onosproject/segmentrouting/LinkHandler.java b/app/src/main/java/org/onosproject/segmentrouting/LinkHandler.java
index 5e41dc5..2193c95 100644
--- a/app/src/main/java/org/onosproject/segmentrouting/LinkHandler.java
+++ b/app/src/main/java/org/onosproject/segmentrouting/LinkHandler.java
@@ -339,8 +339,8 @@
      * @param added true if link was added, false if link was removed
      */
     private void updateHostPorts(Link link, boolean added) {
+        DeviceConfiguration devConfig = srManager.deviceConfiguration;
         if (added) {
-            DeviceConfiguration devConfig = srManager.deviceConfiguration;
             try {
                 if (!devConfig.isEdgeDevice(link.src().deviceId())
                         || devConfig.isEdgeDevice(link.dst().deviceId())) {
@@ -360,11 +360,18 @@
                         .changePortState(link.src().deviceId(), pnum, true));
             }
         } else {
+            // If the device does not have a pair device - skip
+            DeviceId dev = link.src().deviceId();
+            if (getPairDeviceIdOrNull(dev) == null) {
+                log.info("Device {} does not have pair device " +
+                                 "not disabling access port", dev);
+                return;
+            }
+            // Verify if last uplink
             if (!lastUplink(link)) {
                 return;
             }
             // find dual homed hosts on this dev to disable
-            DeviceId dev = link.src().deviceId();
             Set<PortNumber> dp = srManager.hostHandler
                     .getDualHomedHostPorts(dev);
             log.warn("Link src {} --> dst {} removed was the last uplink, "
@@ -659,6 +666,13 @@
      * @param loc the host location
      */
     void checkUplinksForHost(HostLocation loc) {
+        // If the device does not have a pair device - return
+        if (getPairDeviceIdOrNull(loc.deviceId()) == null) {
+            log.info("Device {} does not have pair device " +
+                             "not disabling access port", loc.deviceId());
+            return;
+        }
+        // Verify link validity
         try {
             for (Link l : srManager.linkService.getDeviceLinks(loc.deviceId())) {
                 if (srManager.deviceConfiguration.isEdgeDevice(l.dst().deviceId())
@@ -685,6 +699,16 @@
         downedPortStore.put(loc.deviceId(), p);
     }
 
+    private DeviceId getPairDeviceIdOrNull(DeviceId deviceId) {
+        DeviceId pairDev;
+        try {
+            pairDev = srManager.deviceConfiguration.getPairDeviceId(deviceId);
+        } catch (DeviceConfigNotFoundException e) {
+            pairDev = null;
+        }
+        return pairDev;
+    }
+
     ImmutableMap<Link, Boolean> getSeenLinks() {
         return ImmutableMap.copyOf(seenLinks);
     }
