diff --git a/TestON/tests/IntentRerouteLat/IntentRerouteLat.params b/TestON/tests/IntentRerouteLat/IntentRerouteLat.params
index 27af1f2..99a03c0 100644
--- a/TestON/tests/IntentRerouteLat/IntentRerouteLat.params
+++ b/TestON/tests/IntentRerouteLat/IntentRerouteLat.params
@@ -1,27 +1,28 @@
 <PARAMS>
 
-    <testcases>1,2</testcases>
+    <testcases>1,2,1,2,1,2,1,2</testcases>
 
-    <SCALE>1</SCALE>
+    <SCALE>1,3,5,7</SCALE>
     <availableNodes>7</availableNodes>
  
     <ENV>
         <cellName>intentRerouteCell</cellName>
-        <cellApps>null,intentperf,metrics</cellApps>
-        <scale1switches>8</scale1switches>
-        <scale3switches>2,2,3</scale3switches>
-        <scale5switches>2,2,1,1,1</scale5switches>
-        <scale7switches>1,1,1,1,1,1,1</scale7switches>
-    
+        <cellApps>drivers,null,intentperf,metrics</cellApps>
     </ENV>
 
     <TEST>
         <skipCleanInstall>yes</skipCleanInstall>
-        <warmUp>1</warmUp>
+        <warmUp>2</warmUp>
         <sampleSize>2</sampleSize>                     
         <wait></wait>
-        <intents>1,10</intents>                       #list format, will be split on ','
-        <debug>True</debug>                          
+        <intents>1000</intents>                       #list format, will be split on ','
+        <debug>True</debug>     
+       
+        <s1>1,1,1,1,1,1,1,1</s1>
+        <s3>2,2,1,1,3,3,3,1</s3>
+        <s5>2,2,1,1,3,4,5,3</s5>
+        <s7>2,3,1,1,5,6,7,4</s7>
+
     </TEST>
 
     <METRICS>
diff --git a/TestON/tests/IntentRerouteLat/IntentRerouteLat.py b/TestON/tests/IntentRerouteLat/IntentRerouteLat.py
index 84d5c03..f824a5c 100644
--- a/TestON/tests/IntentRerouteLat/IntentRerouteLat.py
+++ b/TestON/tests/IntentRerouteLat/IntentRerouteLat.py
@@ -79,9 +79,6 @@
         clusterCount = int(scale[0])
         scale.remove(scale[0])       
        
-        switchParams = ("scale" + str(clusterCount) + "switches")
-        switchCount = (main.params[ 'ENV' ][ switchParams ]).split(",")
-
         #kill off all onos processes 
         main.log.step("Safety check, killing all ONOS processes")
         main.log.step("before initiating enviornment setup")
@@ -105,15 +102,6 @@
         main.step( "Set Cell" )
         main.ONOSbench.setCell(cellName)
         
-        if clusterCount == 1:
-            temp = "one"
-        if clusterCount == 3:
-            temp = "three"
-        if clusterCount == 5:
-            temp = "five"
-        if clusterCount == 7:
-            temp = "seven"
-
         main.step( "Creating ONOS package" )
         packageResult = main.ONOSbench.onosPackage()  
 
@@ -134,7 +122,10 @@
             if not isup:
                 main.log.report( "ONOS " + str(node) + " didn't start!" )
         main.log.info("Startup sequence complete")
-     
+    
+        deviceMastership = (main.params[ 'TEST' ][ "s" + str(clusterCount) ]).split(",")
+        print("Device mastership list: " + str(deviceMastership))
+
         main.ONOSbench.handle.sendline("""onos $OC1 "cfg set org.onosproject.provider.nil.NullProviders deviceCount 8 " """)
         main.ONOSbench.handle.expect(":~")
         print repr(main.ONOSbench.handle.before)
@@ -143,53 +134,49 @@
         main.ONOSbench.handle.expect(":~")
         print repr(main.ONOSbench.handle.before)
         time.sleep(3)
-        main.ONOSbench.handle.sendline("""onos $OC1 "cfg set org.onosproject.provider.nil.NullProviders enabled true" """)
-        main.ONOSbench.handle.expect(":~")
-        print repr(main.ONOSbench.handle.before) 
 
-        while True: 
+        time.sleep(10)
+
+        once = True
+        for attempt in range(0,10): 
             main.ONOSbench.handle.sendline("onos $OC1 summary")
             main.ONOSbench.handle.expect(":~")
             x = main.ONOSbench.handle.before
-            if "devices=8" in x:
+            main.log.info("Initial setup. ONOS summary response: \n" + x + "\n")
+
+            if "devices=8" in x and "links=16," in x: 
                 break
-            else:   
+            else:                
+                if once == False:
+                    main.log.error("Null provider start failed, retrying..")
+                once = False
                 main.ONOSbench.handle.sendline("""onos $OC1 "cfg set org.onosproject.provider.nil.NullProviders enabled false" """)
                 main.ONOSbench.handle.expect(":~")
                 time.sleep(3)
                 main.ONOSbench.handle.sendline("""onos $OC1 "cfg set org.onosproject.provider.nil.NullProviders enabled true" """)
                 main.ONOSbench.handle.expect(":~")
-                main.log.error("Null provider start failed, retrying..") 
-                time.sleep(8)
+                time.sleep(8) 
 
-        main.ONOSbench.handle.sendline("""onos $OC1 "null-simulation start" """)
-        main.ONOSbench.handle.expect(":~")
-        print main.ONOSbench.handle.before
-        time.sleep(10)
-        main.ONOSbench.handle.sendline("""onos $OC1 "balance-masters" """)
-        main.ONOSbench.handle.expect(":~")
-        
-        temp = 1 
-        for node in range(1, clusterCount + 1): 
-            for switch in range (0, int(switchCount[node-1])): 
-                cmd = ("""onos $OC1 "device-role null:000000000000000""" + str(temp) + " " + ONOSIp[node] + """ master" """)
+        index = 1
+        for node in deviceMastership:
+            for attempt in range(0,10):
+                cmd = ( "onos $OC" + node + """ "device-role null:000000000000000""" + str(index) + " " + ONOSIp[int(node)]  + """ master" """)
+                main.log.info("assigning mastership of device " + str(index) + " to node " + node + ": \n " + cmd + "\n")
                 main.ONOSbench.handle.sendline(cmd)
-                main.log.info( cmd ) 
                 main.ONOSbench.handle.expect(":~")
-                temp += 1
+                time.sleep(4)
+                
+                cmd = ( "onos $OC" + node + " roles|grep 00000" + str(index)) 
+                main.log.info(cmd) 
+                main.ONOSbench.handle.sendline(cmd)
+                main.ONOSbench.handle.expect(":~")
+                check = main.ONOSbench.handle.before
+                main.log.info("CHECK:\n" + check)
+                if ("master=" + ONOSIp[int(node)]) in check:
+                    break
+            index += 1
 
 
-        #    cmd = ( """onos $OC1 "device-role null:0000000000000008 10.128.5.52 master" """)
-        #if clusterCount == 7: 
-        #    cmd = ( """onos $OC1 "device-role null:0000000000000008 10.128.5.53 master" """)
-            
-        #main.ONOSbench.handle.sendline(cmd)
-        #main.log.info( cmd )
-        #main.ONOSbench.handle.expect(":~")
-
-        #print "sleeping"
-        #time.sleep(120)
-
     def CASE2( self, main ):
          
         import time
@@ -226,7 +213,7 @@
             debug = False
 
         ingress = "null:0000000000000001"
-        egress = "null:0000000000000008"
+        egress = "null:0000000000000007"
 
         for intents in intentsList:
             main.log.report("Intent Batch size: " + str(intents) + "\n      ")
@@ -236,7 +223,7 @@
                 if run > warmUp:
                     main.log.info("Starting test iteration " + str(run-warmUp))
 
-                cmd = """onos $OC1 push-test-intents -i" """
+                cmd = """onos $OC1 "push-test-intents -i """
                 cmd += ingress + "/0 "
                 cmd += egress + "/0 "
                 cmd += str(intents) +""" 1" """
@@ -253,10 +240,10 @@
                     main.ONOSbench.handle.sendline("onos $OC1 summary")
                     main.ONOSbench.handle.expect(":~")
                     linkCheck = main.ONOSbench.handle.before
-                    if ("flows=16,") in linkCheck:
+                    if ("links=16,") in linkCheck and ("flows=" + str(intents*7) + ","):
                         break
                     if i == 39:
-                        main.log.error("Flow count incorrect, data invalid."+ linkCheck)
+                        main.log.error("Flow/link count incorrect, data invalid."+ linkCheck)
 
 
                 #collect timestamp from link cut
@@ -270,7 +257,8 @@
                     time.sleep(2)
                     main.ONOSbench.handle.expect(":~")
                     raw = main.ONOSbench.handle.before
-                    if "NullLinkProvider" in raw and "links=14" in raw:
+                    #if "NullLinkProvider" in raw and "links=14" in raw:
+                    if "links=14" in raw:
                         break
                     if i >= 9:
                         main.log.error("Expected output not being recieved... continuing")
@@ -292,22 +280,27 @@
                     main.ONOSbench.handle.sendline("onos $OC1 summary")
                     main.ONOSbench.handle.expect(":~")
                     linkCheck = main.ONOSbench.handle.before
-                    if "links=" + str(7*intents)+ "," in linkCheck and ("flows=" + str(7*intents) + ",") in linkCheck:
+                    #if "links=" + str(7*intents)+ "," in linkCheck and ("flows=" + str(7*intents) + ",") in linkCheck:
+                    if "links=14," in linkCheck and ("flows=" + str(8*intents) + ",") in linkCheck:
                         break
                     if i == 39:
                         main.log.error("Link or flow count incorrect, data invalid." + linkCheck)
+                
+                time.sleep(5) #trying to avoid negative values 
 
                 #intents events metrics installed timestamp
                 IEMtimestamps = [0]*(clusterCount + 1)
                 installedTemp = [0]*(clusterCount + 1)
                 for node in range(1, clusterCount +1):
-                    cmd = "onos $OC" + str(node) + " intents-events-metrics|grep Timestamp"
+                    cmd = "onos $OC" + str(node) + """ "intents-events-metrics"|grep Timestamp """
                     raw = ""
-                    while "Timestamp" not in raw:
+                    while "epoch)" not in raw:
                         main.ONOSbench.handle.sendline(cmd)
                         main.ONOSbench.handle.expect(":~")
                         raw = main.ONOSbench.handle.before
 
+                    print(raw)
+
                     intentsTimestamps = {}
                     rawTimestamps = raw.splitlines()
                     for line in rawTimestamps:
@@ -398,13 +391,16 @@
             average = numpy.average(latTemp)
             stdDev = numpy.std(latTemp)
 
+            average = numpy.multiply(average, 1000)
+            stdDev = numpy.multiply(stdDev, 1000)
+
             main.log.report("Scale: " + str(clusterCount) + "  \tIntent batch: " + str(intents))
             main.log.report("Latency average:................" + str(average))
             main.log.report("Latency standard deviation:....." + str(stdDev))
             main.log.report("Mode of last node to respond:..." + str(nodeMode))
             main.log.report("________________________________________________________")
 
-            resultsDB = open("IntentRerouteLatDB", "w+")
+            resultsDB = open("IntentRerouteLatDB", "a")
             resultsDB.write("'" + commit + "',") 
             resultsDB.write(str(clusterCount) + ",")
             resultsDB.write(str(intents) + ",")
