diff --git a/src/main/java/net/onrc/onos/apps/segmentrouting/SegmentRoutingManager.java b/src/main/java/net/onrc/onos/apps/segmentrouting/SegmentRoutingManager.java
index 8c49a6a..e8ea854 100644
--- a/src/main/java/net/onrc/onos/apps/segmentrouting/SegmentRoutingManager.java
+++ b/src/main/java/net/onrc/onos/apps/segmentrouting/SegmentRoutingManager.java
@@ -389,10 +389,10 @@
 
             IOF13Switch sw = (IOF13Switch) floodlightProvider.getMasterSwitch(
                     getSwId(port.getDpid().toString()));
-            if (sw != null)
+            if (sw != null) {
                 sw.addPortToGroups(port.getPortNumber());
-
-            log.debug("Add port {} to switch {}", port, dpid);
+                log.debug("Add port {} to switch {}", port, dpid);
+            }
         }
     }
 
@@ -418,13 +418,16 @@
             IOF13Switch dstSw = (IOF13Switch) floodlightProvider.getMasterSwitch(
                     getSwId(dstPort.getDpid().toString()));
 
-            if ((srcSw != null) && (dstSw != null))
+            if ((srcSw == null) || (dstSw == null))
                 /* If this link is not between two switches, ignore it */
                 continue;
 
             srcSw.addPortToGroups(srcPort.getPortNumber());
             dstSw.addPortToGroups(dstPort.getPortNumber());
 
+            log.debug("Add port {} to switch {}", srcPort, srcSw);
+            log.debug("Add port {} to switch {}", dstPort, dstSw);
+
             /*
             if (!topologyLinks.contains(link)) {
                 topologyLinks.add(link);
@@ -461,12 +464,15 @@
                     getSwId(srcPort.getDpid().toString()));
             IOF13Switch dstSw = (IOF13Switch) floodlightProvider.getMasterSwitch(
                     getSwId(dstPort.getDpid().toString()));
-            if ((srcSw != null) && (dstSw != null))
+            if ((srcSw == null) || (dstSw == null))
                 /* If this link is not between two switches, ignore it */
                 continue;
             srcSw.removePortFromGroups(srcPort.getPortNumber());
             dstSw.removePortFromGroups(dstPort.getPortNumber());
 
+            log.debug("Remove port {} from switch {}", srcPort, srcSw);
+            log.debug("Remove port {} from switch {}", dstPort, dstSw);
+
             Switch srcSwitch = mutableTopology.getSwitch(srcPort.getDpid());
             if (srcSwitch.getLinkToNeighbor(dstPort.getDpid()) == null) {
                 // TODO: it is only for debugging purpose.
@@ -492,9 +498,10 @@
 
             IOF13Switch sw = (IOF13Switch) floodlightProvider.getMasterSwitch(
                     getSwId(port.getDpid().toString()));
-            if (sw != null)
+            if (sw != null) {
                 sw.removePortFromGroups(port.getPortNumber());
-            log.debug("Remove port {} from switch {}", port, dpid);
+                log.debug("Remove port {} from switch {}", port, dpid);
+            }
         }
     }
 
