diff --git a/TestON/drivers/common/cli/emulator/scapyclidriver.py b/TestON/drivers/common/cli/emulator/scapyclidriver.py
index bcaebfb..d340d5c 100644
--- a/TestON/drivers/common/cli/emulator/scapyclidriver.py
+++ b/TestON/drivers/common/cli/emulator/scapyclidriver.py
@@ -727,7 +727,7 @@
                 # clear buffer
                 if debug:
                     main.log.warn( "%s expect loop iteration" % i )
-                self.handle.expect( self.scapyPrompt, timeout=1 )
+                self.handle.expect( self.scapyPrompt, timeout=5 )
                 response += self.cleanOutput( self.handle.before, debug )
             except pexpect.TIMEOUT:
                 return response
diff --git a/TestON/drivers/common/cli/networkdriver.py b/TestON/drivers/common/cli/networkdriver.py
index c151aab..0f7b699 100755
--- a/TestON/drivers/common/cli/networkdriver.py
+++ b/TestON/drivers/common/cli/networkdriver.py
@@ -532,12 +532,12 @@
                     # Use scapy to send and recieve packets
                     hostPair[ 1 ].startScapy( ifaceName=dstIface )
                     hostPair[ 1 ].addRoutes()
-                    hostPair[ 1 ].startFilter( ifaceName=dstIface, pktFilter="ether host %s and ip host %s" % ( srcMac, srcIPs[0] ) )
+                    hostPair[ 1 ].startFilter( ifaceName=dstIface, pktFilter="ether src host %s and ip src host %s" % ( srcMac, srcIPs[0] ) )
 
                     hostPair[ 0 ].startScapy( ifaceName=srcIface )
                     hostPair[ 0 ].addRoutes()
-                    hostPair[ 0 ].buildEther( dst=dstMac )
-                    hostPair[ 0 ].buildIP( src=srcIPs, dst=dstIPs )
+                    hostPair[ 0 ].buildEther( src=srcMac, dst=dstMac )
+                    hostPair[ 0 ].buildIP( src=srcIPs[0], dst=dstIPs[0] )
                     hostPair[ 0 ].buildICMP( )
                     hostPair[ 0 ].sendPacket( iface=srcIface )
 
@@ -545,7 +545,7 @@
                     if not waiting:
                         pingResult = main.FALSE
                         packets = hostPair[ 1 ].readPackets()
-                        main.log.warn( packets )
+                        main.log.warn( repr( packets ) )
                         for packet in packets.splitlines():
                             main.log.debug( packet )
                             if srcIPs[0] in packet:
@@ -625,7 +625,7 @@
                             main.log.debug( "Pinging from " + str( srcHost.shortName ) + " to " + str( dstHost.shortName ) )
                             # Use scapy to send and recieve packets
                             dstHost.startFilter()
-                            srcHost.buildEther( dst=srcHost.interfaces[0].get( 'mac') )
+                            srcHost.buildEther( src=srcHost.interfaces[0].get( 'mac'), dst=dstHost.interfaces[0].get( 'mac') )
                             srcHost.sendPacket()
                             output = dstHost.checkFilter()
                             main.log.debug( output )
@@ -781,11 +781,12 @@
             main.log.exception( self.name + ": Uncaught exception!" )
             main.cleanAndExit()
 
-    def getIPAddress( self, host, proto='IPV4' ):
+    def getIPAddress( self, host, iface=None, proto='IPV4' ):
         """
         Returns IP address of the host
         """
-        response = self.runCmdOnHost( host, "ifconfig" )
+        cmd = "ifconfig %s" % iface if iface else ""
+        response = self.runCmdOnHost( host, cmd )
         pattern = ''
         if proto == 'IPV4':
             pattern = "inet\s(\d+\.\d+\.\d+\.\d+)\s\snetmask"
@@ -1049,11 +1050,13 @@
             for host in hostList:
                 flushCmd = ""
                 cmd = ""
-                if self.getIPAddress( host ) or hosts[host]['interfaces'][0].get( 'ips', False ) :
+                intf = hosts[host]['interfaces'][0].get( 'name' )
+                hostIp = self.getIPAddress( host, iface=intf ) or hosts[host]['interfaces'][0].get( 'ips', False )
+                if hostIp:
                     flushCmd = "sudo ip neigh flush all"
-                    intf = hosts[host]['interfaces'][0].get( 'name' )
                     intfStr = "-i {}".format( intf ) if intf else ""
-                    cmd = "sudo arping -c 1 -w {} {} {}".format( wait, intfStr, dstIp )
+                    srcIp = "-S {}".format( hostIp if isinstance( hostIp, types.StringType ) else hostIp[0] ) if intf else ""
+                    cmd = "sudo arping -c 1 -w {} {} {} {}".format( wait, intfStr, srcIp, dstIp )
                     main.log.debug( "Sending IPv4 arping from host {}".format( host ) )
                 elif self.getIPAddress( host, proto='IPV6' ):
                     flushCmd = "sudo ip -6 neigh flush all"
diff --git a/TestON/drivers/common/cli/onosclidriver.py b/TestON/drivers/common/cli/onosclidriver.py
index ef69aec..b0bf7cb 100755
--- a/TestON/drivers/common/cli/onosclidriver.py
+++ b/TestON/drivers/common/cli/onosclidriver.py
@@ -3318,7 +3318,7 @@
                 result = main.TRUE
             else:
                 output = output + \
-                    "The number of links, switches, nodes, and SCCs  does not match " + \
+                    "The number of links, switches, nodes, and SCCs does not match " + \
                     "what was expected"
                 result = main.FALSE
             output = output + "\n ONOS sees %i devices " % int( devices )
@@ -6774,7 +6774,7 @@
             output = ""
             for cmdStr in cmdList:
                 self.handle.sendline( cmdStr )
-                self.handle.expect( self.dockerPrompt, timeout=120 )
+                self.handle.expect( self.dockerPrompt, timeout=420 )
                 self.handle.sendline( "" )
                 self.handle.expect( self.dockerPrompt )
                 handle = self.handle.before
diff --git a/TestON/drivers/common/cli/stratumosswitchdriver.py b/TestON/drivers/common/cli/stratumosswitchdriver.py
index 3eae155..1490079 100644
--- a/TestON/drivers/common/cli/stratumosswitchdriver.py
+++ b/TestON/drivers/common/cli/stratumosswitchdriver.py
@@ -106,8 +106,9 @@
         try:
             if self.handle:
                 # Stop the agent
-                self.stopSwitchAgent()
-                main.log.debug( self.name + ": Disconnected" )
+                if not main.persistentSetup:
+                    self.stopSwitchAgent()
+                    main.log.debug( self.name + ": Disconnected" )
                 # Disconnect from the device
                 self.handle.sendline( "" )
                 self.handle.expect( self.prompt )
