diff --git a/TestON/drivers/common/cli/onosclidriver.py b/TestON/drivers/common/cli/onosclidriver.py
index 4c23ec1..7aa8a40 100755
--- a/TestON/drivers/common/cli/onosclidriver.py
+++ b/TestON/drivers/common/cli/onosclidriver.py
@@ -6513,7 +6513,7 @@
 
     def composeT3Command( self, sAddr, dAddr, ipv6=False, verbose=True, simple=False ):
         """
-        Compose and return t3-troubleshoot cli command for given source and destination addresses
+        Compose and return a list of t3-troubleshoot cli commands for given source and destination addresses
         Options:
             sAddr: IP address of the source host
             dAddr: IP address of the destination host
@@ -6535,29 +6535,35 @@
                 if sHost and dHost:
                     break
             assert sHost, "Not able to find host with IP {}".format( sAddr )
+            cmdList = []
             if simple:
                 assert dHost, "Not able to find host with IP {}".format( dAddr )
-            cmdStr = "t3-troubleshoot"
-            if simple:
-                cmdStr += "-simple"
-            if verbose:
-                cmdStr += " -vv"
-            if ipv6:
-                cmdStr += " -et ipv6"
-            if simple:
+                cmdStr = "t3-troubleshoot-simple"
+                if verbose:
+                    cmdStr += " -vv"
+                if ipv6:
+                    cmdStr += " -et ipv6"
                 cmdStr += " {}/{} {}/{}".format( sHost[ "mac" ], sHost[ "vlan" ], dHost[ "mac" ], dHost[ "vlan" ] )
+                cmdList.append( cmdStr )
             else:
-                cmdStr += " -s " + str( sAddr )
-                cmdStr += " -sp " + str( sHost[ "locations" ][ 0 ][ "elementId" ] ) + "/" + str( sHost[ "locations" ][ 0 ][ "port" ] )
-                cmdStr += " -sm " + str( sHost[ "mac" ] )
-                if sHost[ "vlan" ] != "None":
-                    cmdStr += " -vid " + sHost[ "vlan" ]
-                cmdStr += " -d " + str( dAddr )
-                netcfg = self.netcfg( args="devices {}".format( sHost[ "locations" ][ 0 ][ "elementId" ] ) )
-                netcfg = json.loads( netcfg )
-                assert netcfg, "Failed to get netcfg"
-                cmdStr += " -dm " + str( netcfg[ "segmentrouting" ][ "routerMac" ] )
-            return cmdStr
+                for location in sHost[ "locations" ]:
+                    cmdStr = "t3-troubleshoot"
+                    if verbose:
+                        cmdStr += " -vv"
+                    if ipv6:
+                        cmdStr += " -et ipv6"
+                    cmdStr += " -s " + str( sAddr )
+                    cmdStr += " -sp " + str( location[ "elementId" ] ) + "/" + str( location[ "port" ] )
+                    cmdStr += " -sm " + str( sHost[ "mac" ] )
+                    if sHost[ "vlan" ] != "None":
+                        cmdStr += " -vid " + sHost[ "vlan" ]
+                    cmdStr += " -d " + str( dAddr )
+                    netcfg = self.netcfg( args="devices {}".format( location[ "elementId" ] ) )
+                    netcfg = json.loads( netcfg )
+                    assert netcfg, "Failed to get netcfg"
+                    cmdStr += " -dm " + str( netcfg[ "segmentrouting" ][ "routerMac" ] )
+                    cmdList.append( cmdStr )
+            return cmdList
         except AssertionError:
             main.log.exception( "" )
             return None
@@ -6570,20 +6576,24 @@
 
     def t3( self, sAddr, dAddr, ipv6=False ):
         """
-        Run t3-troubleshoot cli command for given source and destination addresses
+        Run t3-troubleshoot cli commands for all posible routes given source and destination addresses
         Options:
             sAddr: IP address of the source host
             dAddr: IP address of the destination host
         """
         try:
-            cmdStr = self.composeT3Command( sAddr, dAddr, ipv6 )
-            handle = self.sendline( cmdStr )
-            assert handle is not None, "Error in sendline"
-            assert "Command not found:" not in handle, handle
-            assert "Unsupported command:" not in handle, handle
-            assert "Error executing command" not in handle, handle
-            assert "Tracing packet" in handle
-            return handle
+            cmdList = self.composeT3Command( sAddr, dAddr, ipv6 )
+            assert cmdList is not None, "composeT3Command returned None"
+            t3Output = ""
+            for cmdStr in cmdList:
+                handle = self.sendline( cmdStr )
+                assert handle is not None, "Error in sendline"
+                assert "Command not found:" not in handle, handle
+                assert "Unsupported command:" not in handle, handle
+                assert "Error executing command" not in handle, handle
+                assert "Tracing packet" in handle
+                t3Output += handle
+            return t3Output
         except AssertionError:
             main.log.exception( "" )
             return None
diff --git a/TestON/drivers/common/cli/onosdriver.py b/TestON/drivers/common/cli/onosdriver.py
index be64d99..a666d77 100755
--- a/TestON/drivers/common/cli/onosdriver.py
+++ b/TestON/drivers/common/cli/onosdriver.py
@@ -928,12 +928,14 @@
             main.log.exception( self.name + ": Uncaught exception!" )
             main.cleanAndExit()
 
-    def onosCli( self, ONOSIp, cmdstr ):
+    def onosCli( self, ONOSIp, cmdstr, timeout=60 ):
         """
         Uses 'onos' command to send various ONOS CLI arguments.
         Required:
             * ONOSIp: specify the ip of the cell machine
             * cmdstr: specify the command string to send
+        Optional:
+            * timeout: pexpect timeout for running the command
 
         This function is intended to expose the entire karaf
         CLI commands for ONOS. Try to use this function first
@@ -960,15 +962,20 @@
             self.handle.expect( self.prompt )
 
             self.handle.sendline( "onos " + ONOSIp + " " + cmdstr )
-            self.handle.expect( self.prompt )
-
-            handleBefore = self.handle.before
-            main.log.info( "Command sent successfully" )
-            # Obtain return handle that consists of result from
-            # the onos command. The string may need to be
-            # configured further.
-            returnString = handleBefore
-            return returnString
+            i = self.handle.expect( [ self.prompt, pexpect.TIMEOUT ], timeout=timeout )
+            if i == 0:
+                handleBefore = self.handle.before
+                main.log.info( "Command sent successfully" )
+                # Obtain return handle that consists of result from
+                # the onos command. The string may need to be
+                # configured further.
+                returnString = handleBefore
+                return returnString
+            elif i == 1:
+                main.log.error( self.name + ": Timeout when sending " + cmdstr )
+                self.handle.sendline( "\x03" )  # Control-C
+                self.handle.expect( self.prompt )
+                return main.FALSE
         except pexpect.TIMEOUT:
             main.log.exception( self.name + ": Timeout when sending " + cmdstr )
             return main.FALSE
@@ -1614,7 +1621,7 @@
             main.log.exception( self.name + ": Uncaught exception!" )
             main.cleanAndExit()
 
-    def dumpONOSCmd( self, ONOSIp, CMD, destDir, filename, options="" ):
+    def dumpONOSCmd( self, ONOSIp, CMD, destDir, filename, options="", timeout=60 ):
         """
         Dump Cmd to a desired directory.
         For debugging purposes, you may want to use
@@ -1627,7 +1634,9 @@
             * destDir: specify directory to copy to.
               ex ) /tmp/
             * fileName: Name of the file
+        Optional:
             * options: Options for ONOS command
+            * timeout: pexpect timeout for running the ONOS command
         """
 
         localtime = time.strftime( '%x %X' )
@@ -1637,7 +1646,7 @@
         if destDir[ -1: ] != "/":
             destDir += "/"
         cmd = CMD + " " + options + " > " + str( destDir ) + str( filename ) + localtime
-        return self.onosCli( ONOSIp, cmd )
+        return self.onosCli( ONOSIp, cmd, timeout=timeout )
 
     def cpLogsToDir( self, logToCopy,
                      destDir, copyFileName="" ):
