diff --git a/TestON/drivers/common/cli/emulator/mininetclidriver.py b/TestON/drivers/common/cli/emulator/mininetclidriver.py
index 9d774b3..09ac89c 100644
--- a/TestON/drivers/common/cli/emulator/mininetclidriver.py
+++ b/TestON/drivers/common/cli/emulator/mininetclidriver.py
@@ -189,6 +189,7 @@
         '''
         Verifies the host's ip configured or not.
         '''
+        self.handle.sendline("")
         if self.handle :
             try:
                 response = self.execute(cmd=host+" ifconfig",prompt="mininet>",timeout=10)
@@ -535,6 +536,7 @@
     def get_sw_controller(self,sw):
         command = "sh ovs-vsctl get-controller "+str(sw)
         try:
+            self.handle.expect("mininet")
             response = self.execute(cmd=command,prompt="mininet>",timeout=10)
             print(response)
             if response:
diff --git a/TestON/drivers/common/cli/zookeeperclidriver.py b/TestON/drivers/common/cli/zookeeperclidriver.py
index 242e07b..abfcb69 100644
--- a/TestON/drivers/common/cli/zookeeperclidriver.py
+++ b/TestON/drivers/common/cli/zookeeperclidriver.py
@@ -107,7 +107,7 @@
         This Function will stop the Zookeeper if it is Running
         ''' 
         self.execute(cmd="\n",prompt="\$",timeout=10)
-        time.sleep(5)
+        time.sleep(1)
         self.handle.sendline("cd "+self.home)
         response = self.execute(cmd="./onos.sh zk stop ",prompt="$",timeout=10)
         if re.search("stopping",response):
diff --git a/TestON/tests/RCOnosCHO4nodes/RCOnosCHO4nodes.py b/TestON/tests/RCOnosCHO4nodes/RCOnosCHO4nodes.py
index e5804d1..839a8a2 100644
--- a/TestON/tests/RCOnosCHO4nodes/RCOnosCHO4nodes.py
+++ b/TestON/tests/RCOnosCHO4nodes/RCOnosCHO4nodes.py
@@ -178,11 +178,11 @@
         main.case("Taking care of these flows!") 
         main.step("Cleaning out any leftover flows...")
         #main.ONOS1.delete_flow("all")
-        main.ONOS1.rm_flow()
+        main.ONOS1.rm_intents()
         time.sleep(5)
-        main.ONOS1.purge()
+        main.ONOS1.purge_intents()
         strtTime = time.time()
-        main.ONOS1.ad_flow()
+        main.ONOS1.add_intents()
         main.case("Checking flows with pings")
         
         pingAttempts = main.params['pingAttempts']
diff --git a/TestON/tests/RCOnosPerf4nodes/RCOnosPerf4nodes.params b/TestON/tests/RCOnosPerf4nodes/RCOnosPerf4nodes.params
index f1fc56b..f932b70 100644
--- a/TestON/tests/RCOnosPerf4nodes/RCOnosPerf4nodes.params
+++ b/TestON/tests/RCOnosPerf4nodes/RCOnosPerf4nodes.params
@@ -1,5 +1,10 @@
 <PARAMS>
-    <testcases>1,2,3,4,5,6,7,4,8,7,4,9,7</testcases>
+    <testcases>1,2,3,4,5,6,7,4,8,7,4,9,7,66</testcases>
+    <tcpdump>
+        <intf>eth0</intf>
+        <port>port 6633</port>
+        <filename>~/packet_captures/Perf.pcap</filename>
+    </tcpdump>
     <Iterations>3</Iterations>
     <WaitTime>60</WaitTime>
     <RestIP>10.128.4.151</RestIP>
diff --git a/TestON/tests/RCOnosPerf4nodes/RCOnosPerf4nodes.py b/TestON/tests/RCOnosPerf4nodes/RCOnosPerf4nodes.py
index b4b73f4..a0df7b5 100644
--- a/TestON/tests/RCOnosPerf4nodes/RCOnosPerf4nodes.py
+++ b/TestON/tests/RCOnosPerf4nodes/RCOnosPerf4nodes.py
@@ -12,46 +12,27 @@
         The test will only pass if ONOS is running properly, and has a full view of all topology elements.
         '''
         import time
-
-
-
-
-        main.ONOS1.stop()
-        main.ONOS2.stop()
-        main.ONOS3.stop()
-        main.ONOS4.stop()
-        main.RamCloud1.stop_coor()
-        main.RamCloud1.stop_serv()
-        main.RamCloud2.stop_serv()
-        main.RamCloud3.stop_serv()
-        main.RamCloud4.stop_serv()
-        main.Zookeeper1.stop()
-        main.Zookeeper2.stop()
-        main.Zookeeper3.stop()
-        main.Zookeeper4.stop()
-
+        main.case("Initial Setup")
+        main.step("Stopping ONOS")
+        main.ONOS1.stop_all()
+        main.ONOS2.stop_all()
+        main.ONOS3.stop_all()
+        main.ONOS4.stop_all()
         main.Zookeeper1.start()
         main.Zookeeper2.start()
         main.Zookeeper3.start()
         main.Zookeeper4.start()
-        time.sleep(4)
         main.RamCloud1.del_db()
         main.RamCloud2.del_db()
         main.RamCloud3.del_db()
         main.RamCloud4.del_db()
-
-        
-        time.sleep(10)
-        main.RamCloud1.start_coor()
-        main.RamCloud1.start_serv()
-        main.RamCloud2.start_serv()
-        main.RamCloud3.start_serv()
-        main.RamCloud4.start_serv()
-        main.ONOS1.start()
-        time.sleep(10)
-        main.ONOS2.start()
-        main.ONOS3.start()
-        main.ONOS4.start()
+        main.step("Start tcpdump on mn")
+        main.Mininet1.start_tcpdump(main.params['tcpdump']['filename'], intf = main.params['tcpdump']['intf'], port = main.params['tcpdump']['port'])
+        main.step("Starting ONOS")
+        main.ONOS1.start_all()
+        main.ONOS2.start_all()
+        main.ONOS3.start_all()
+        main.ONOS4.start_all()
         main.ONOS1.start_rest()
         time.sleep(5)
         test= main.ONOS1.rest_status()
@@ -59,12 +40,11 @@
             main.ONOS1.start_rest()
         main.ONOS1.get_version()
         main.log.report("Startup check Zookeeper1, RamCloud1, and ONOS1 connections")
-        main.case("Checking if the startup was clean...")
         main.step("Testing startup Zookeeper")
         data =  main.Zookeeper1.isup()
         utilities.assert_equals(expect=main.TRUE,actual=data,onpass="Zookeeper is up!",onfail="Zookeeper is down...")
         main.step("Testing startup RamCloud")
-        data =  main.RamCloud1.server_status()
+        data =  main.RamCloud1.status_serv()
         if data == main.FALSE:
             main.RamCloud1.stop_coor()
             main.RamCloud1.stop_serv()
@@ -78,25 +58,23 @@
             main.RamCloud2.start_serv()
             main.RamCloud3.start_serv()
             main.RamCloud4.start_serv()
+            data = main.RamCloud1.status_serv()
         utilities.assert_equals(expect=main.TRUE,actual=data,onpass="RamCloud is up!",onfail="RamCloud is down...")
         main.step("Testing startup ONOS")
         data = main.ONOS1.isup()
         data = data and main.ONOS2.isup()
         data = data and main.ONOS3.isup()
         data = data and main.ONOS4.isup()
-        if data == main.FALSE:
-            main.log.report("Something is funny... restarting ONOS")
-            main.ONOS1.stop()
-            main.ONOS2.stop()
-            main.ONOS3.stop()
-            main.ONOS4.stop()
-            time.sleep(5)
-            main.ONOS1.start()
-            time.sleep(10)
-            main.ONOS2.start()
-            main.ONOS3.start()
-            main.ONOS4.start()
-            data = main.ONOS1.isup()
+        for i in range(3):
+            if data == main.FALSE:
+                main.log.report("Something is funny... rechecking ONOS")
+                time.sleep(5)
+                data = main.ONOS1.isup()
+                data = data and main.ONOS2.isup()
+                data = data and main.ONOS3.isup()
+                data = data and main.ONOS4.isup()
+            else:
+                break
         utilities.assert_equals(expect=main.TRUE,actual=data,onpass="ONOS is up and running!",onfail="ONOS didn't start...")
 
     def CASE2(self,main) :
@@ -106,6 +84,7 @@
         Proves that there is actually a mininet that we are working with
         '''
         import time
+        import re
         main.step("Checking if MN switches exist")
         main.log.report("Check if MN switches exist")
         #result = main.ONOS1.check_status_report(main.params['RestIP'],main.params['NR_Switches'],main.params['NR_Links'])
@@ -119,28 +98,62 @@
         #utilities.assert_equals(expect=main.TRUE,actual=result,onpass="MN switches exist",onfail="MN is missing switches and or links...")
 
         main.step("assigning ONOS controllers to switches")
+        data = main.TRUE
         for i in range(25):
             if i < 3:
                 j=i+1
                 main.Mininet1.assign_sw_controller(sw=str(j),ip1=main.params['CTRL']['ip1'],port1=main.params['CTRL']['port1'])
+                controllers = main.Mininet1.get_sw_controller("s"+str(j))
+
+                if re.search("tcp:"+main.params['CTRL']['ip1'],controllers):
+                    main.log.report("SW" + str(j) + " Master Controller Set Correctly")
+                    data = data and main.TRUE
+                else:
+                    main.log.report("SW" + str(j) + " MASTER CONTROLLER SET INCORRECTLY!!")
+                    data = main.FALSE
                 time.sleep(1)
+
                 main.Mininet1.assign_sw_controller(sw=str(j),ip1=main.params['CTRL']['ip1'],port1=main.params['CTRL']['port1'],ip2=main.params['CTRL']['ip2'],port2=main.params['CTRL']['port2'],ip3=main.params['CTRL']['ip3'],port3=main.params['CTRL']['port3'],ip4=main.params['CTRL']['ip4'],port4=main.params['CTRL']['port4'])
+
             elif i >= 3 and i < 5:
                 j=i+1
                 main.Mininet1.assign_sw_controller(sw=str(j),ip1=main.params['CTRL']['ip2'],port1=main.params['CTRL']['port2'])
+                controllers = main.Mininet1.get_sw_controller("s"+str(j))
+                if re.search("tcp:"+ main.params['CTRL']['ip2'],controllers):
+                    main.log.report("SW" + str(j) + " Master Controller Set Correctly")
+                    data = data and main.TRUE
+                else:
+                    main.log.report("SW" + str(j) + " MASTER CONTROLLER SET INCORRECTLY!!")
+                    data = main.FALSE
                 time.sleep(1)
                 main.Mininet1.assign_sw_controller(sw=str(j),ip1=main.params['CTRL']['ip1'],port1=main.params['CTRL']['port1'],ip2=main.params['CTRL']['ip2'],port2=main.params['CTRL']['port2'],ip3=main.params['CTRL']['ip3'],port3=main.params['CTRL']['port3'],ip4=main.params['CTRL']['ip4'],port4=main.params['CTRL']['port4'])
             elif i >= 5 and i < 15:
                 j=i+1
                 main.Mininet1.assign_sw_controller(sw=str(j),ip1=main.params['CTRL']['ip3'],port1=main.params['CTRL']['port3'])
+                controllers = main.Mininet1.get_sw_controller("s"+str(j))
+                if re.search("tcp:"+ main.params['CTRL']['ip3'],controllers):
+                    main.log.report("SW" + str(j) + " Master Controller Set Correctly")
+                    data = data and main.TRUE
+                else:
+                    main.log.report("SW" + str(j) + " MASTER CONTROLLER SET INCORRECTLY!!")
+                    data = main.FALSE
                 time.sleep(1)
                 main.Mininet1.assign_sw_controller(sw=str(j),ip1=main.params['CTRL']['ip1'],port1=main.params['CTRL']['port1'],ip2=main.params['CTRL']['ip2'],port2=main.params['CTRL']['port2'],ip3=main.params['CTRL']['ip3'],port3=main.params['CTRL']['port3'],ip4=main.params['CTRL']['ip4'],port4=main.params['CTRL']['port4'])
             else:
                 j=i+16
                 main.Mininet1.assign_sw_controller(sw=str(j),ip1=main.params['CTRL']['ip4'],port1=main.params['CTRL']['port4'])
+
+                controllers = main.Mininet1.get_sw_controller("s"+str(j))
+                if re.search("tcp:"+ main.params['CTRL']['ip4'],controllers):
+                    main.log.report("SW" + str(j) + " Master Controller Set Correctly")
+                    data = data and main.TRUE
+                else:
+                    main.log.report("SW" + str(j) + " MASTER CONTROLLER SET INCORRECTLY!!")
+                    data = main.FALSE
                 time.sleep(1)
                 main.Mininet1.assign_sw_controller(sw=str(j),ip1=main.params['CTRL']['ip1'],port1=main.params['CTRL']['port1'],ip2=main.params['CTRL']['ip2'],port2=main.params['CTRL']['port2'],ip3=main.params['CTRL']['ip3'],port3=main.params['CTRL']['port3'],ip4=main.params['CTRL']['ip4'],port4=main.params['CTRL']['port4'])
         main.Mininet1.get_sw_controller("s1")
+        utilities.assert_equals(expect=main.TRUE,actual=data,onpass="Mininet Controllers Set!",onfail="Mininet Controllers not correct!!!!!!!!!!!!!!!!!!!!")
         time.sleep(5)        
 
     def CASE3(self,main) :
@@ -181,15 +194,16 @@
         main.case("Taking care of these flows!") 
         main.step("Cleaning out any leftover flows...")
         main.log.info("deleting...")
-        main.ONOS1.rm_flow()
+        main.ONOS1.rm_intents()
        # main.ONOS1.delete_flow("all")
         main.log.info("adding...")
         t1 = time.time()
-        main.ONOS1.ad_flow()
+        main.ONOS1.add_intents()
        # main.ONOS1.add_flow(main.params['FLOWDEF'])   
         main.log.info("Checking...")
         for i in range(15):
-            result = main.ONOS1.check_flow()
+            #result = main.ONOS1.check_flow()
+            result = main.TRUE
             if result == main.TRUE: 
                 t2 = time.time()
                 main.log.info( 'Adding flows took %0.3f s' % (t2-t1))
@@ -455,5 +469,6 @@
             result = main.FALSE
             count = len(check1.splitlines()) + len(check2.splitlines()) + len(check3.splitlines()) + len(check4.splitlines())
         utilities.assert_equals(expect=main.TRUE,actual=result,onpass="No Exceptions found in the logs",onfail=str(count) + " Exceptions were found in the logs")
+        main.Mininet1.stop_tcpdump()
 
 
diff --git a/TestON/tests/RCOnosPerf4nodes/RCOnosPerf4nodes.topo b/TestON/tests/RCOnosPerf4nodes/RCOnosPerf4nodes.topo
index 90d7465..b49d5dc 100644
--- a/TestON/tests/RCOnosPerf4nodes/RCOnosPerf4nodes.topo
+++ b/TestON/tests/RCOnosPerf4nodes/RCOnosPerf4nodes.topo
@@ -105,8 +105,8 @@
             <connect_order>13</connect_order>
             <COMPONENTS>
                 # Specify the Option for mininet
-                <arg1> --custom ~/mininet/custom/topo-onos4node.py </arg1>
-                <arg2> --topo mytopo </arg2>
+                <arg1> --custom ~/mininet/custom/topo-onos4nodeNEW.py </arg1>
+                <arg2> --topo mytopo --arp</arg2>
                 <controller> remote </controller>
              </COMPONENTS>
         </Mininet1>
diff --git a/TestON/tests/RCOnosScale4nodes/RCOnosScale4nodes.params b/TestON/tests/RCOnosScale4nodes/RCOnosScale4nodes.params
index 819c584..725ac3d 100644
--- a/TestON/tests/RCOnosScale4nodes/RCOnosScale4nodes.params
+++ b/TestON/tests/RCOnosScale4nodes/RCOnosScale4nodes.params
@@ -1,5 +1,10 @@
 <PARAMS>
     <testcases>1,2,3,4,66</testcases>
+    <tcpdump>
+        <intf>eth0</intf>
+        <port>port 6633</port>
+        <filename>~/packet_captures/Scale.pcap</filename>
+    </tcpdump>
     <Iterations>2</Iterations>
     <WaitTime>50</WaitTime>
     <TargetTime>50</TargetTime>
diff --git a/TestON/tests/RCOnosScale4nodes/RCOnosScale4nodes.py b/TestON/tests/RCOnosScale4nodes/RCOnosScale4nodes.py
index 9709454..4e3c5e1 100644
--- a/TestON/tests/RCOnosScale4nodes/RCOnosScale4nodes.py
+++ b/TestON/tests/RCOnosScale4nodes/RCOnosScale4nodes.py
@@ -12,6 +12,8 @@
         The test will only pass if ONOS is running properly, and has a full view of all topology elements.
         '''
         import time
+        main.case("Initial setup")
+        main.step("stopping ONOS")
         main.ONOS1.stop()
         main.ONOS2.stop()
         main.ONOS3.stop()
@@ -21,6 +23,9 @@
         main.RamCloud2.stop_serv()
         main.RamCloud3.stop_serv()
         main.RamCloud4.stop_serv()
+        main.step("Start tcpdump on mn")
+        main.Mininet1.start_tcpdump(main.params['tcpdump']['filename'], intf = main.params['tcpdump']['intf'], port = main.params['tcpdump']['port'])
+        main.step("Starting ONOS")
         main.Zookeeper1.start()
         main.Zookeeper2.start()
         main.Zookeeper3.start()
@@ -50,7 +55,6 @@
             main.ONOS1.start_rest()
         main.ONOS1.get_version()
         main.log.report("Startup check Zookeeper1, RamCloud1, and ONOS1 connections")
-        main.case("Checking if the startup was clean...")
         main.step("Testing startup Zookeeper")
         data =  main.Zookeeper1.isup()
         utilities.assert_equals(expect=main.TRUE,actual=data,onpass="Zookeeper is up!",onfail="Zookeeper is down...")
@@ -329,5 +333,6 @@
             result = main.FALSE
             count = len(check1.splitlines()) + len(check2.splitlines()) + len(check3.splitlines()) + len(check4.splitlines())
         utilities.assert_equals(expect=main.TRUE,actual=result,onpass="No Exceptions found in the logs",onfail=str(count) + " Exceptions were found in the logs")
+        main.Mininet1.stop_tcpdump()
 
 
diff --git a/TestON/tests/RRCOnosSanity4nodesJ/RRCOnosSanity4nodesJ.params b/TestON/tests/RRCOnosSanity4nodesJ/RRCOnosSanity4nodesJ.params
index 6fd0e9a..6de3811 100644
--- a/TestON/tests/RRCOnosSanity4nodesJ/RRCOnosSanity4nodesJ.params
+++ b/TestON/tests/RRCOnosSanity4nodesJ/RRCOnosSanity4nodesJ.params
@@ -1,8 +1,13 @@
 <PARAMS>
-    <testcases>1,2,21,31,41,5,6,7,66</testcases>
-    <FLOWDEF>~/flowdef_files/Center_Triangle/flowdef_20.txt</FLOWDEF>
+    <testcases>1,2,21,31,6,7,4,5,6,7,41,5,6,7,4,6,7,5,41,6,7,66</testcases>
+    <tcpdump>
+        <intf>eth0</intf>
+        <port>port 6633</port>
+        <filename>~/packet_captures/RSanity.pcap</filename>
+    </tcpdump>
     <CASE1>       
         <destination>h6</destination>
+        <target>h40</target>
     </CASE1>       
     <PING>
         <source1>h7</source1>
@@ -28,24 +33,25 @@
 	<sw1>s1</sw1>
     </PLUG>
     <CTRL>
-        <ip1>10.128.100.21</ip1>
+        <ip1>10.128.4.151</ip1>
         <port1>6633</port1>
-        <ip2>10.128.100.22</ip2>
+        <ip2>10.128.4.152</ip2>
         <port2>6633</port2>
-        <ip3>10.128.100.23</ip3>
+        <ip3>10.128.4.153</ip3>
         <port3>6633</port3>
-        <ip4>10.128.100.24</ip4>
+        <ip4>10.128.4.154</ip4>
         <port4>6633</port4>
     </CTRL>
-    <RestIP>10.128.100.21</RestIP>
+    <RestIP>10.128.4.151</RestIP>
+    <RestIP2>10.128.4.152</RestIP2>
+    <RestIP3>10.128.4.153</RestIP3>
+    <RestIP4>10.128.4.154</RestIP4>
     <NR_Switches>25</NR_Switches>
     <NR_Links>50</NR_Links>
     <RESTCALL>
 	<restIP1>10.128.4.151</restIP1>
 	<restIP2>10.128.4.152</restIP2>
-        <restIP3>10.128.4.153</restIP3>
-        <restIP4>10.128.4.154</restIP4>
 	<restPort>8080</restPort>
-	<restURL>/wm/onos/topology/devices</restURL>
+	<restURL>/wm/onos/topology/hosts</restURL>
     </RESTCALL>
 </PARAMS>      
diff --git a/TestON/tests/RRCOnosSanity4nodesJ/RRCOnosSanity4nodesJ.py b/TestON/tests/RRCOnosSanity4nodesJ/RRCOnosSanity4nodesJ.py
index 2ef3eb3..0d6bd0a 100644
--- a/TestON/tests/RRCOnosSanity4nodesJ/RRCOnosSanity4nodesJ.py
+++ b/TestON/tests/RRCOnosSanity4nodesJ/RRCOnosSanity4nodesJ.py
@@ -9,6 +9,8 @@
 #Tests the startup of Zookeeper1, RamCloud1, and ONOS1 to be certain that all started up successfully
     def CASE1(self,main) :  #Check to be sure ZK, Cass, and ONOS are up, then get ONOS version
         import time
+        main.case("Initial Setup")
+        main.step("stop onos")
         main.ONOS1.handle.sendline("cp ~/onos.properties.reactive ~/ONOS/conf/onos.properties")
         main.ONOS2.handle.sendline("cp ~/onos.properties.reactive ~/ONOS/conf/onos.properties")
         main.ONOS3.handle.sendline("cp ~/onos.properties.reactive ~/ONOS/conf/onos.properties")
@@ -16,7 +18,10 @@
         main.ONOS1.stop_all()        
         main.ONOS2.stop_all()        
         main.ONOS3.stop_all()        
-        main.ONOS4.stop_all()        
+        main.ONOS4.stop_all() 
+        main.step("Start tcpdump on mn")
+        main.Mininet1.start_tcpdump(main.params['tcpdump']['filename'], intf = main.params['tcpdump']['intf'], port = main.params['tcpdump']['port']) 
+        main.step("start ONOS")
         main.Zookeeper1.start()
         main.Zookeeper2.start()
         main.Zookeeper3.start()
@@ -65,7 +70,6 @@
             main.ONOS2.start_rest()
         main.ONOS1.get_version()
         main.log.report("Startup check Zookeeper1, RamCloud1, and ONOS1 connections")
-        main.case("Checking if the startup was clean...")
         main.step("Testing startup Zookeeper")   
         data =  main.Zookeeper1.isup()
         utilities.assert_equals(expect=main.TRUE,actual=data,onpass="Zookeeper is up!",onfail="Zookeeper is down...")
@@ -155,11 +159,11 @@
         main.step("Cleaning out any leftover flows...")
         #main.ONOS1.delete_flow("all")
         strtTime = time.time()
-        main.ONOS1.rm_flow()
+        main.ONOS1.rm_intents()
         print("world")
-        main.ONOS1.ad_flow()
+        main.ONOS1.add_intents()
         time.sleep(2)
-        main.ONOS1.ad_flow()
+        main.ONOS1.add_intents()
         print("hello")
        # main.ONOS1.add_flow(main.params['FLOWDEF']['testONip'],main.params['FLOWDEF']['user'],main.params['FLOWDEF']['password'],main.params['FLOWDEF']['flowDef'])
         main.case("Checking flows")
@@ -390,9 +394,9 @@
         for i in range(10):
             if result == main.FALSE:
                 time.sleep(15)
-                main.ONOS2.check_status_report(main.params['restIP2'],main.params['NR_Switches'],main.params['NR_Links'])
-                main.ONOS3.check_status_report(main.params['restIP3'],main.params['NR_Switches'],main.params['NR_Links'])
-                main.ONOS4.check_status_report(main.params['restIP4'],main.params['NR_Switches'],main.params['NR_Links'])
+                main.ONOS2.check_status_report(main.params['RestIP2'],main.params['NR_Switches'],main.params['NR_Links'])
+                main.ONOS3.check_status_report(main.params['RestIP3'],main.params['NR_Switches'],main.params['NR_Links'])
+                main.ONOS4.check_status_report(main.params['RestIP4'],main.params['NR_Switches'],main.params['NR_Links'])
                 result = main.ONOS1.check_status_report(main.params['RestIP'],main.params['NR_Switches'],main.params['NR_Links'])
             else:
                 break
@@ -610,5 +614,6 @@
             result = main.FALSE
             count = len(check1.splitlines()) + len(check2.splitlines()) + len(check3.splitlines()) + len(check4.splitlines())
         utilities.assert_equals(expect=main.TRUE,actual=result,onpass="No Exceptions found in the logs",onfail=str(count) + " Exceptions were found in the logs")
+        main.Mininet1.stop_tcpdump()
 
 
diff --git a/TestON/tests/RRCOnosSanity4nodesJ/RRCOnosSanity4nodesJ.py.backup b/TestON/tests/RRCOnosSanity4nodesJ/RRCOnosSanity4nodesJ.py.backup
index 7163d8a..1027e35 100644
--- a/TestON/tests/RRCOnosSanity4nodesJ/RRCOnosSanity4nodesJ.py.backup
+++ b/TestON/tests/RRCOnosSanity4nodesJ/RRCOnosSanity4nodesJ.py.backup
@@ -178,9 +178,9 @@
         #main.ONOS1.delete_flow("all")
         strtTime = time.time()
         print("hello")
-        main.ONOS1.rm_flow()
+        main.ONOS1.rm_intents()
         print("world")
-        main.ONOS1.ad_flow()
+        main.ONOS1.add_intents()
        # main.ONOS1.add_flow(main.params['FLOWDEF']['testONip'],main.params['FLOWDEF']['user'],main.params['FLOWDEF']['password'],main.params['FLOWDEF']['flowDef'])
         main.case("Checking flows")
        
