diff --git a/src/main/java/org/onosproject/t3/impl/TroubleshootManager.java b/src/main/java/org/onosproject/t3/impl/TroubleshootManager.java
index ed02d03..cf40de9 100644
--- a/src/main/java/org/onosproject/t3/impl/TroubleshootManager.java
+++ b/src/main/java/org/onosproject/t3/impl/TroubleshootManager.java
@@ -198,20 +198,22 @@
 
 
         try {
+            ImmutableSet.Builder<StaticPacketTrace> traces = ImmutableSet.builder();
             //if the location deviceId is the same, the two hosts are under same subnet and vlan on the interface
             // we are under same leaf so it's L2 Unicast.
             if (areBridged(source, destination)) {
                 selectorBuilder.matchEthDst(destination.mac());
-                ImmutableSet.Builder<StaticPacketTrace> traces = ImmutableSet.builder();
                 source.locations().forEach(hostLocation -> {
                     selectorBuilder.matchInPort(hostLocation.port());
                     StaticPacketTrace trace = trace(selectorBuilder.build(), hostLocation);
                     trace.addEndpointHosts(Pair.of(source, destination));
                     traces.add(trace);
                 });
-                return traces.build();
+                //The destination host is not dual homed, if it is the other path might be done through routing.
+                if (destination.locations().size() == 1) {
+                    return traces.build();
+                }
             }
-
             //handle the IPs for src and dst in case of L3
             if (etherType.equals(EtherType.IPV4) || etherType.equals(EtherType.IPV6)) {
 
@@ -242,7 +244,6 @@
                         " router MAC from segment routing config can't perform L3 tracing.");
                 failTrace.setSuccess(false);
             }
-            ImmutableSet.Builder<StaticPacketTrace> traces = ImmutableSet.builder();
             source.locations().forEach(hostLocation -> {
                 selectorBuilder.matchInPort(hostLocation.port());
                 StaticPacketTrace trace = trace(selectorBuilder.build(), hostLocation);
@@ -508,11 +509,10 @@
                         " which is enabled and is edge port");
                 trace.setSuccess(true);
                 computePath(completePath, trace, outputPath.getOutput());
-                completePath.clear();
                 if (!hasOtherOutput(in.deviceId(), trace, outputPath.getOutput())) {
                     return trace;
                 }
-            } else if (deviceService.getPort(cp).isEnabled()) {
+            } else if (deviceService.getPort(cp) != null && deviceService.getPort(cp).isEnabled()) {
                 EthTypeCriterion ethTypeCriterion = (EthTypeCriterion) trace.getInitialPacket()
                         .getCriterion(Criterion.Type.ETH_TYPE);
                 //We treat as correct output only if it's not LLDP or BDDP
@@ -556,11 +556,17 @@
                 }
 
             } else {
-                //No links means that the packet gets dropped.
-                log.warn("No links out of {}", cp);
                 computePath(completePath, trace, cp);
-                trace.addResultMessage("No links depart from " + cp + ". Packet is dropped");
                 trace.setSuccess(false);
+                if (deviceService.getPort(cp) == null) {
+                    //Port is not existant on device.
+                    log.warn("Port {} is not available on device.", cp);
+                    trace.addResultMessage("Port " + cp + "is not available on device. Packet is dropped");
+                } else {
+                    //No links means that the packet gets dropped.
+                    log.warn("No links out of {}", cp);
+                    trace.addResultMessage("No links depart from " + cp + ". Packet is dropped");
+                }
             }
         }
         return trace;
