diff --git a/TestON/drivers/common/cli/onosclidriver.py b/TestON/drivers/common/cli/onosclidriver.py
index 4eb1660..412fb23 100644
--- a/TestON/drivers/common/cli/onosclidriver.py
+++ b/TestON/drivers/common/cli/onosclidriver.py
@@ -212,6 +212,7 @@
            # if utilities.assert_matches(expect=pattern,actual=response,onpass="ONOS process is running...",onfail="ONOS process not running..."):
             
             if re.search(pattern, response):
+                time.sleep(10)
                 if re.search(patternUp,tail2):
                     main.log.info(self.name + ": ONOS process is running...")
                     if tail1 == tail2:
@@ -920,7 +921,6 @@
                     return main.FALSE
                 elif i == 2:
                     main.log.info(self.name + ": Build success!")
-                    return main.TRUE
                 elif i == 3:
                     main.log.info(self.name + ": Build complete")
                     return main.TRUE
diff --git a/TestON/drivers/common/clidriver.py b/TestON/drivers/common/clidriver.py
index 6c537e6..9ae90fb 100644
--- a/TestON/drivers/common/clidriver.py
+++ b/TestON/drivers/common/clidriver.py
@@ -99,7 +99,7 @@
         '''
 
         result = super(CLI, self).execute(self)
-        defaultPrompt = '.*[\$|>|#]'
+        defaultPrompt = '.*[$>\#]'
         args = utilities.parse_args(["CMD", "TIMEOUT", "PROMPT", "MORE"], **execparams)
         expectPrompt = args["PROMPT"] if args["PROMPT"] else defaultPrompt
         self.LASTRSP = ""
@@ -163,7 +163,7 @@
         i = handle.expect([".ssword:*",default, pexpect.EOF])
         if i==0:
             handle.sendline(pwd)
-            handle.sendline("\n")
+            handle.sendline("\r")
 
         if i==1:
             handle.expect(default)
@@ -212,7 +212,7 @@
             main.log.error("ssh: connect to host "+ip_address+" port 22: Connection refused")
             return main.FALSE
 
-        self.handle.sendline("\n")
+        self.handle.sendline("\r")
         
         return self.handle
     
diff --git a/TestON/tests/ONOSSanity4/ONOSSanity4.py b/TestON/tests/ONOSSanity4/ONOSSanity4.py
index da5c167..df460c3 100644
--- a/TestON/tests/ONOSSanity4/ONOSSanity4.py
+++ b/TestON/tests/ONOSSanity4/ONOSSanity4.py
@@ -110,7 +110,16 @@
             main.cleanup()
             main.exit()
 
-            
+        main.step("Test startup of Mininet")
+        main.log.report("Host IP Checking using checkIP")
+        result1 = main.Mininet1.checkIP(main.params['CASE1']['destination'])
+        result2 = main.Mininet1.checkIP(main.params['CASE1']['target'])
+        result = result1 and result2
+        utilities.assert_equals(expect=main.TRUE,actual=result, onpass="Host IP addresses configured",onfail="Host IP addresses not configured")
+        if result==main.FALSE:
+            main.cleanup()
+            main.exit()
+
 
 
 
@@ -126,6 +135,13 @@
         3. Assign all controllers to all switches
         4. Verify all controllers
         '''
+        main.case("Assign Controllers")
+        main.step("Assign a master controller to each switch")
+        for i in range(25):
+            if i<3:
+                main.Mininet1.assign_sw_controller(sw=str(i+1),ip1=main.params['CTRL']['ip1'],port1=main.params['CTRL']['port1'])
+
+        main.step("Verify Master controllers of each switch")
 #************************************************************************************************************************************
 
 
diff --git a/TestON/tests/RCOnosPerf4nodes/RCOnosPerf4nodes.py b/TestON/tests/RCOnosPerf4nodes/RCOnosPerf4nodes.py
index 11ea4f6..f8fc498 100644
--- a/TestON/tests/RCOnosPerf4nodes/RCOnosPerf4nodes.py
+++ b/TestON/tests/RCOnosPerf4nodes/RCOnosPerf4nodes.py
@@ -16,6 +16,16 @@
         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.ONOS1.handle.sendline("~/ONOS/onos.sh rc deldb")
+        main.ONOS2.handle.sendline("~/ONOS/onos.sh rc deldb")
+        main.ONOS3.handle.sendline("~/ONOS/onos.sh rc deldb")
+        main.ONOS4.handle.sendline("~/ONOS/onos.sh rc deldb")
+        time.sleep(10)
         main.RamCloud1.start_coor()
         main.RamCloud1.start_serv()
         main.RamCloud2.start_serv()
diff --git a/TestON/tests/RCOnosSanity4nodesJ/RCOnosSanity4nodesJ.params b/TestON/tests/RCOnosSanity4nodesJ/RCOnosSanity4nodesJ.params
index 29ffc61..b448729 100644
--- a/TestON/tests/RCOnosSanity4nodesJ/RCOnosSanity4nodesJ.params
+++ b/TestON/tests/RCOnosSanity4nodesJ/RCOnosSanity4nodesJ.params
@@ -3,6 +3,7 @@
     <FLOWDEF>~/flowdef_files/Center_Triangle/flowdef_20.txt</FLOWDEF>
     <CASE1>       
         <destination>h6</destination>
+        <target>h40</target>
     </CASE1>       
     <PING>
         <source1>h7</source1>
diff --git a/TestON/tests/RCOnosSanity4nodesJ/RCOnosSanity4nodesJ.py b/TestON/tests/RCOnosSanity4nodesJ/RCOnosSanity4nodesJ.py
index 1480e76..c1057d1 100644
--- a/TestON/tests/RCOnosSanity4nodesJ/RCOnosSanity4nodesJ.py
+++ b/TestON/tests/RCOnosSanity4nodesJ/RCOnosSanity4nodesJ.py
@@ -23,12 +23,12 @@
         main.RamCloud2.stop_serv()
         main.RamCloud3.stop_serv()
         main.RamCloud4.stop_serv()
-
-        
-        main.Zookeeper1.start()
-        main.Zookeeper2.start()
-        main.Zookeeper3.start()
-        main.Zookeeper4.start()
+        time.sleep(10)
+        main.ONOS1.handle.sendline("~/ONOS/onos.sh rc deldb") 
+        main.ONOS2.handle.sendline("~/ONOS/onos.sh rc deldb") 
+        main.ONOS3.handle.sendline("~/ONOS/onos.sh rc deldb") 
+        main.ONOS4.handle.sendline("~/ONOS/onos.sh rc deldb") 
+        time.sleep(10)
         main.log.report("Pulling latest code from github to all nodes")
         for i in range(2):
             uptodate = main.ONOS1.git_pull()
@@ -98,14 +98,18 @@
         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()
-        if data == main.FALSE: 
-            main.log.report("Something is funny... restarting ONOS")
-            main.ONOS1.stop()
-            time.sleep(3)
-            main.ONOS1.start()
-            time.sleep(5) 
-            data = main.ONOS1.isup()
+        for i in range(3):
+            if data == main.FALSE: 
+                #main.log.report("Something is funny... restarting ONOS")
+                #main.ONOS1.stop()
+                time.sleep(3)
+                #main.ONOS1.start()
+                #time.sleep(5) 
+                data = main.ONOS1.isup()
+            else:
+                break
         utilities.assert_equals(expect=main.TRUE,actual=data,onpass="ONOS is up and running!",onfail="ONOS didn't start...")
+        time.sleep(20)
            
 #**********************************************************************************************************************************************************************************************
 #Assign Controllers
@@ -304,7 +308,7 @@
       
         strtTime = time.time() 
         result = main.ONOS1.check_status_report(main.params['RestIP'],main.params['NR_Switches'],main.params['NR_Links'])
-        for i in range(2):
+        for i in range(10):
             if result == main.FALSE:
                 time.sleep(5)
                 result = main.ONOS1.check_status_report(main.params['RestIP'],main.params['NR_Switches'],main.params['NR_Links'])
@@ -347,7 +351,7 @@
        
         strtTime = time.time() 
         result = main.ONOS1.check_status_report(main.params['RestIP'],main.params['NR_Switches'],str(int(main.params['NR_Links'])-2))
-        for i in range(2):
+        for i in range(10):
             if result == main.FALSE:
                 time.sleep(5)
                 result = main.ONOS1.check_status_report(main.params['RestIP'],main.params['NR_Switches'],str(int(main.params['NR_Links'])-2))
diff --git a/TestON/tests/RCOnosScale4nodes/RCOnosScale4nodes.py b/TestON/tests/RCOnosScale4nodes/RCOnosScale4nodes.py
index fb06de3..531a165 100644
--- a/TestON/tests/RCOnosScale4nodes/RCOnosScale4nodes.py
+++ b/TestON/tests/RCOnosScale4nodes/RCOnosScale4nodes.py
@@ -16,6 +16,16 @@
         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.ONOS1.handle.sendline("~/ONOS/onos.sh rc deldb") 
+        main.ONOS2.handle.sendline("~/ONOS/onos.sh rc deldb") 
+        main.ONOS3.handle.sendline("~/ONOS/onos.sh rc deldb") 
+        main.ONOS4.handle.sendline("~/ONOS/onos.sh rc deldb") 
+        time.sleep(10)
         main.RamCloud1.start_coor()
         time.sleep(10)
         main.RamCloud1.start_serv()
diff --git a/TestON/tests/RCOnosScale4nodes/RCOnosScale4nodes.topo b/TestON/tests/RCOnosScale4nodes/RCOnosScale4nodes.topo
index ae85268..bedf671 100644
--- a/TestON/tests/RCOnosScale4nodes/RCOnosScale4nodes.topo
+++ b/TestON/tests/RCOnosScale4nodes/RCOnosScale4nodes.topo
@@ -6,28 +6,28 @@
             <user>admin</user>
             <password></password>
             <type>OnosCliDriver</type>
-            <connect_order>7</connect_order>
+            <connect_order>6</connect_order>
         </ONOS1>
         <ONOS2>
             <host>10.128.4.152</host>
             <user>admin</user>
             <password></password>
             <type>OnosCliDriver</type>
-            <connect_order>8</connect_order>
+            <connect_order>7</connect_order>
         </ONOS2>
         <ONOS3>
             <host>10.128.4.153</host>
             <user>admin</user>
             <password></password>
             <type>OnosCliDriver</type>
-            <connect_order>9</connect_order>
+            <connect_order>8</connect_order>
         </ONOS3>
         <ONOS4>
             <host>10.128.4.154</host>
             <user>admin</user>
             <password></password>
             <type>OnosCliDriver</type>
-            <connect_order>10</connect_order>
+            <connect_order>9</connect_order>
         </ONOS4>
 
         <Zookeeper1>
@@ -35,7 +35,7 @@
             <user>admin</user>
             <password></password>
             <type>ZookeeperCliDriver</type>
-            <connect_order>2</connect_order>
+            <connect_order>1</connect_order>
             <COMPONENTS>
              </COMPONENTS>
         </Zookeeper1>
@@ -45,28 +45,28 @@
             <user>admin</user>
             <password></password>
             <type>RamCloudCliDriver</type>
-            <connect_order>3</connect_order>
+            <connect_order>2</connect_order>
         </RamCloud1>
         <RamCloud2>
             <host>10.128.4.152</host>
             <user>admin</user>
             <password></password>
             <type>RamCloudCliDriver</type>
-            <connect_order>4</connect_order>
+            <connect_order>3</connect_order>
         </RamCloud2>
         <RamCloud3>
             <host>10.128.4.153</host>
             <user>admin</user>
             <password></password>
             <type>RamCloudCliDriver</type>
-            <connect_order>5</connect_order>
+            <connect_order>4</connect_order>
         </RamCloud3>
         <RamCloud4>
             <host>10.128.4.154</host>
             <user>admin</user>
             <password></password>
             <type>RamCloudCliDriver</type>
-            <connect_order>6</connect_order>
+            <connect_order>5</connect_order>
         </RamCloud4>
 
         <Mininet1>
@@ -74,7 +74,7 @@
             <user>admin</user>
             <password></password>
             <type>MininetCliDriver</type>
-            <connect_order>25</connect_order>
+            <connect_order>10</connect_order>
             <COMPONENTS>
                 # Specify the Option for mininet
                 <arg1> </arg1>
diff --git a/TestON/tests/RRCOnosSanity4nodesJ/RRCOnosSanity4nodesJ.py b/TestON/tests/RRCOnosSanity4nodesJ/RRCOnosSanity4nodesJ.py
index 372286f..76020ba 100644
--- a/TestON/tests/RRCOnosSanity4nodesJ/RRCOnosSanity4nodesJ.py
+++ b/TestON/tests/RRCOnosSanity4nodesJ/RRCOnosSanity4nodesJ.py
@@ -9,16 +9,16 @@
 #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.Zookeeper1.start()
-        main.Zookeeper2.start()
-        main.Zookeeper3.start()
-        main.Zookeeper4.start()
+        main.Zookeeper1.stop()
+        main.Zookeeper2.stop()
+        main.Zookeeper3.stop()
+        main.Zookeeper4.stop()
         main.RamCloud1.stop_coor()
         main.RamCloud1.stop_serv()
         main.RamCloud2.stop_serv()
         main.RamCloud3.stop_serv()
         main.RamCloud4.stop_serv()
-        
+                
         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")
@@ -28,6 +28,10 @@
         main.Zookeeper2.start()
         main.Zookeeper3.start()
         main.Zookeeper4.start()
+        main.ONOS1.handle.sendline("~/ONOS/onos.sh rc deldb")
+        main.ONOS2.handle.sendline("~/ONOS/onos.sh rc deldb")
+        main.ONOS3.handle.sendline("~/ONOS/onos.sh rc deldb")
+        main.ONOS4.handle.sendline("~/ONOS/onos.sh rc deldb")
         main.log.report("Pulling latest code from github to all nodes")
         for i in range(2):
             uptodate = main.ONOS1.git_pull()
