diff --git a/TestON/tests/IntentInstallWithdrawLat/IntentInstallWithdrawLat.params b/TestON/tests/IntentInstallWithdrawLat/IntentInstallWithdrawLat.params
index 067ff8e..3185cc2 100644
--- a/TestON/tests/IntentInstallWithdrawLat/IntentInstallWithdrawLat.params
+++ b/TestON/tests/IntentInstallWithdrawLat/IntentInstallWithdrawLat.params
@@ -1,13 +1,13 @@
 <PARAMS>
 
-    <testcases>1,3,2,3,2,3,2,3</testcases>
+    <testcases>1,2</testcases>
 
-    <SCALE>2</SCALE>
+    <SCALE>3,5,7</SCALE>
     <availableNodes>7</availableNodes>
  
     <ENV>
-        <cellName>defaultCell</cellName>
-        <cellFeatures>webconsole,onos-core,onos-api,onos-cli,onos-null,onos-gui,onos-rest,onos-app-metrics,onos-app-metrics-intent,onos-app-metrics-topology </cellFeatures>
+        <cellName>IntentInstallWithdrawCell</cellName>
+        <cellApps>null</cellApps>
     </ENV>
 
     <TEST>
@@ -17,7 +17,7 @@
         <sampleSize>10</sampleSize>                     
         <wait></wait>
         <intents>1000</intents>                       #list format, will be split on ','
-        <debug>False</debug>                                        #"True" for true
+        <debug>True</debug>                                        #"True" for true
     </TEST>
 
     <GIT>
@@ -28,36 +28,36 @@
     <CTRL>
         <USER>admin</USER>
         
-        <ip1>10.254.1.201</ip1>
+        <ip1>10.128.5.51</ip1>
         <port1>6633</port1>
         
-        <ip2>10.254.1.202</ip2>
+        <ip2>10.128.5.52</ip2>
         <port2>6633</port2>
         
-        <ip3>10.254.1.203</ip3>
+        <ip3>10.128.5.53</ip3>
         <port3>6633</port3>
         
-        <ip4>10.254.1.204</ip4>
+        <ip4>10.128.5.54</ip4>
         <port4>6633</port4>
         
-        <ip5>10.254.1.205</ip5>
+        <ip5>10.128.5.65</ip5>
         <port5>6633</port5>
         
-        <ip6>10.254.1.206</ip6>
+        <ip6>10.128.5.66</ip6>
         <port6>6633</port6> 
        
-        <ip7>10.254.1.207</ip7>
+        <ip7>10.128.5.67</ip7>
         <port7>6633</port7>
 
     </CTRL>
 
     <MN>
-        <ip1>10.254.1.200</ip1>
+        <ip1>10.128.5.55</ip1>
     </MN>
 
     <BENCH>
         <user>admin</user>
-        <ip1>10.254.1.200</ip1>
+        <ip1>10.128.5.55</ip1>
     </BENCH>
 
     <JSON>
diff --git a/TestON/tests/IntentInstallWithdrawLat/IntentInstallWithdrawLat.py b/TestON/tests/IntentInstallWithdrawLat/IntentInstallWithdrawLat.py
index 29ecd06..6d0e2b3 100644
--- a/TestON/tests/IntentInstallWithdrawLat/IntentInstallWithdrawLat.py
+++ b/TestON/tests/IntentInstallWithdrawLat/IntentInstallWithdrawLat.py
@@ -13,65 +13,50 @@
     def __init__( self ):
         self.default = ''
 
-    def CASE1( self, main ):            #This is the initialization case
-                                        #this case will clean up all nodes 
-        import time                     #but only node 1 is started in this case
-        
-        global clusterCount             #number of nodes running
-        global ONOSIp                   #list of ONOS IP addresses 
-        clusterCount = 1
-        ONOSIp = [ 0 ]
-
-
+    def CASE1( self, main ):           
+                                        
+        import time                     
+        global init       
+        try: 
+            if type(init) is not bool: 
+                init = False  
+        except NameError: 
+            init = False 
+       
         #Load values from params file
         checkoutBranch = main.params[ 'GIT' ][ 'checkout' ]
         gitPull = main.params[ 'GIT' ][ 'autopull' ]
         cellName = main.params[ 'ENV' ][ 'cellName' ]
-        Features= main.params[ 'ENV' ][ 'cellFeatures' ]
+        Apps = main.params[ 'ENV' ][ 'cellApps' ]
         BENCHIp = main.params[ 'BENCH' ][ 'ip1' ]
         BENCHUser = main.params[ 'BENCH' ][ 'user' ]
         MN1Ip = main.params[ 'MN' ][ 'ip1' ]
         maxNodes = int(main.params[ 'availableNodes' ])
-        Features = main.params[ 'ENV' ][ 'cellFeatures' ]
         skipMvn = main.params[ 'TEST' ][ 'skipCleanInstall' ]
+        cellName = main.params[ 'ENV' ][ 'cellName' ]        
         switchCount = main.params[ 'TEST' ][ 'switchCount' ]
 
-        #Populate ONOSIp with ips from params 
-        for i in range(1, maxNodes + 1): 
-            ipString = 'ip' + str(i) 
-            ONOSIp.append(main.params[ 'CTRL' ][ ipString ])   
-    
-        tempIp = []
-        for node in range( 1, clusterCount + 1):
-            tempIp.append(ONOSIp[node])
+        # -- INIT SECTION, ONLY RUNS ONCE -- # 
+        if init == False: 
+            init = True
+            global clusterCount             #number of nodes running
+            global ONOSIp                   #list of ONOS IP addresses
+            global scale 
+            
+            clusterCount = 0
+            ONOSIp = [ 0 ]
+            scale = (main.params[ 'SCALE' ]).split(",")            
+            clusterCount = int(scale[0])
 
-        #kill off all onos processes 
-        main.log.step("Safety check, killing all ONOS processes")
-        main.log.step("before initiating enviornment setup")
-        for node in range(1, maxNodes + 1):
-            main.ONOSbench.onosDie(ONOSIp[node])
+            #Populate ONOSIp with ips from params 
+            for i in range(1, maxNodes + 1): 
+                ipString = 'ip' + str(i) 
+                ONOSIp.append(main.params[ 'CTRL' ][ ipString ])   
+            
+            #mvn clean install, for debugging set param 'skipCleanInstall' to yes to speed up test
+            if skipMvn != "yes":
+                mvnResult = main.ONOSbench.cleanInstall()
 
-        #construct the cell file
-        main.log.info("Creating cell file")
-        exec "a = main.ONOSbench.createCellFile"
-        cellIp = []
-        for node in range (1, clusterCount + 1):
-            cellIp.append(ONOSIp[node])
-        a(BENCHIp,cellName,MN1Ip,str(Features), *cellIp)
-
-        main.step( "Applying cell file to environment" )
-        cellApplyResult = main.ONOSbench.setCell( cellName )
-
-        #Uninstall everywhere
-        main.log.step( "Cleaning Enviornment..." )
-        for i in range(1, maxNodes + 1):
-            main.log.info(" Uninstalling ONOS " + str(i) )
-            main.ONOSbench.onosUninstall( ONOSIp[i] )
-        
-        #mvn clean install, for debugging set param 'skipCleanInstall' to yes to speed up test
-        if skipMvn != "yes":
-            mvnResult = main.ONOSbench.cleanInstall()
-                        
             #git
             main.step( "Git checkout and pull " + checkoutBranch )
             if gitPull == 'on':
@@ -82,142 +67,117 @@
                 checkoutResult = main.TRUE
                 pullResult = main.TRUE
                 main.log.info( "Skipped git checkout and pull" )
-
-        main.ONOSbench.createLinkGraphFile(BENCHIp, tempIp, switchCount)
-        main.ONOSbench.createNullDevProviderFile(BENCHIp, tempIp, switchCount)
-        main.ONOSbench.createNullLinkProviderFile(BENCHIp)
- 
-        main.step( "Creating ONOS package" )
-        packageResult = main.ONOSbench.onosPackage()  
-
-        main.step( "Installing ONOS package" )
-        install1Result = main.ONOSbench.onosInstall( node=ONOSIp[1] )
-
-        main.step( "verify cells" )
-        verifyCellResult = main.ONOSbench.verifyCell()
-
-        main.step( "Set cell for ONOS cli env" )
-        cli1 = main.ONOS1cli.startOnosCli( ONOSIp[1] )
-
         
-    def CASE2( self, main ):
-        # This case increases the cluster size by whatever scale is
-        # Note: 'scale' is the size of the step
-        # if scaling is not a part of your test, simply run this case
-        # once after CASE1 to set up your enviornment for your desired 
-        # cluster size. If scaling is a part of you test call this case each time 
-        # you want to increase cluster size
-
-        ''                                                         
-        'Increase number of nodes and initiate CLI'
-        ''
-        import time
-        global clusterCount
+        # -- END OF INIT SECTION --#
+         
+        clusterCount = int(scale[0])
+        scale.remove(scale[0])       
         
-        BENCHIp = main.params[ 'BENCH' ][ 'ip1' ]
-        scale = int( main.params[ 'SCALE' ] )
-        clusterCount += scale
-        switchCount = main.params[ 'TEST' ][ 'switchCount' ]        
-
+        #kill off all onos processes 
+        main.log.step("Safety check, killing all ONOS processes")
+        main.log.step("before initiating enviornment setup")
+        for node in range(1, maxNodes + 1):
+            main.ONOSbench.onosDie(ONOSIp[node])
+        
+        #Uninstall everywhere
+        main.log.step( "Cleaning Enviornment..." )
+        for i in range(1, maxNodes + 1):
+            main.log.info(" Uninstalling ONOS " + str(i) )
+            main.ONOSbench.onosUninstall( ONOSIp[i] )
+       
+        #construct the cell file
         main.log.info("Creating cell file")
-        exec "a = main.ONOSbench.createCellFile"
         cellIp = []
         for node in range (1, clusterCount + 1):
             cellIp.append(ONOSIp[node])
-        a(BENCHIp,cellName,MN1Ip,str(Features), *cellIp) 
-    
-        main.step( "Applying cell file to environment" )
-        cellApplyResult = main.ONOSbench.setCell( cellName )
 
-        #Uninstall everywhere
-        main.log.step( "Cleaning Enviornment..." )
-        for node in range(1, maxNodes + 1):
-            main.ONOSbench.onosDie(ONOSIp[node])
-            main.log.info(" Uninstalling ONOS " + str(node) )
-            main.ONOSbench.onosUninstall( ONOSIp[node] )
+        main.ONOSbench.createCellFile(BENCHIp,cellName,MN1Ip,str(Apps), *cellIp)
 
-        tempIp = []
-        for node in range( 1, clusterCount + 1): 
-            tempIp.append(ONOSIp[node]) 
+        main.step( "Set Cell" )
+        main.ONOSbench.setCell(cellName)
+        
+        main.ONOSbench.createLinkGraphFile(BENCHIp, cellIp, switchCount)        
 
-        main.ONOSbench.createLinkGraphFile(BENCHIp, tempIp, switchCount) 
-        main.ONOSbench.createNullDevProviderFile(BENCHIp, tempIp, switchCount)
-        main.ONOSbench.createNullLinkProviderFile(BENCHIp)
+        main.step( "Creating ONOS package" )
+        packageResult = main.ONOSbench.onosPackage()  
 
-        main.ONOSbench.onosPackage()
-
-        main.log.report( "Increasing cluster size to " + str( clusterCount ) )
+        main.step( "verify cells" )
+        verifyCellResult = main.ONOSbench.verifyCell()
+      
+        main.log.report( "Initializeing " + str( clusterCount ) + " node cluster." )
         for node in range(1, clusterCount + 1):
-            main.log.info("Starting ONOS " + str(node) + " at IP: " + ONOSIp[node])    
-            main.ONOSbench.onosInstall( node=ONOSIp[node])
-            if node == 1: 
-                main.ONOS1cli.startOnosCli( ONOSIp[1] )
-            
-        for node in range(1, clusterCount + 1):       
+            main.log.info("Starting ONOS " + str(node) + " at IP: " + ONOSIp[node])
+            main.ONOSbench.onosInstall( ONOSIp[node])
+
+        for node in range(1, clusterCount + 1):
             for i in range( 2 ):
                 isup = main.ONOSbench.isup( ONOSIp[node] )
                 if isup:
                     main.log.info("ONOS " + str(node) + " is up\n")
                     break
             if not isup:
-                main.log.report( "ONOS " + str(node) + " didn't start!" ) 
-    
-    def CASE3( self, main ): 
+                main.log.report( "ONOS " + str(node) + " didn't start!" )
 
-        import time 
-        import numpy 
-        
+        main.ONOS1cli.startOnosCli( ONOSIp[1] )
+        main.log.info("Startup sequence complete")
 
-        sampleSize = int(main.params[ 'TEST' ][ 'sampleSize' ]) 
+        main.ONOSbench.configNullDev(cellIp, switchCount) 
+
+    def CASE2( self, main ):
+         
+        import time
+        import numpy
+
+        sampleSize = int(main.params[ 'TEST' ][ 'sampleSize' ])
         warmUp = int(main.params[ 'TEST' ][ 'warmUp' ])
         intentsList = (main.params[ 'TEST' ][ 'intents' ]).split(",")
         switchCount = int(main.params[ 'TEST' ][ 'switchCount' ])
         debug = main.params[ 'TEST' ][ 'switchCount' ]
         for i in range(0,len(intentsList)):
-            intentsList[i] = int(intentsList[i]) 
-  
-        if debug == "True": 
+            intentsList[i] = int(intentsList[i])
+
+        if debug == "True":
             debug = True
-        else: 
+        else:
             debug = False
-   
+
         linkCount = 0
         for i in range(0,10):
             main.ONOSbench.handle.sendline("onos $OC1 links|wc -l")
             main.ONOSbench.handle.expect(":~")
-            linkCount = main.ONOSbench.handle.before    
-            if debug: main.log.info("Link Count check: " + linkCount)   
-            if str((switchCount*2)-2) in linkCount: 
-                break 
+            linkCount = main.ONOSbench.handle.before
+            if debug: main.log.info("Link Count check: " + linkCount)
+            if str((switchCount*2)-2) in linkCount:
+                break
             time.sleep(2)
-    
-        links = "--" 
+
+        links = "--"
         while "=null:" not in links:
             if debug: main.log.info("top of loop")
-            main.ONOSbench.handle.sendline("onos $OC1 links") 
+            main.ONOSbench.handle.sendline("onos $OC1 links")
             main.ONOSbench.handle.expect(":~")
             links = main.ONOSbench.handle.before
-            if debug: main.log.info(str(links)) 
-            time.sleep(1) 
+            if debug: main.log.info(str(links))
+            time.sleep(1)
         links = links.splitlines()
-        templinks = links                
-                                   
+        templinks = links
+
         tempDevices = []
-        for line in links: 
-            temp = line.split(" ") 
+        for line in links:
+            temp = line.split(" ")
             temp[0].replace("src=","")
             temp[0] = (temp[0].split("/"))[0]
-            tempDevices.append(temp[0])                    
+            tempDevices.append(temp[0])
 
         tempDevices.sort()
         devices = []
-        for i in tempDevices: 
+        for i in tempDevices:
             if "src=null" in i:
-                devices.append(i.replace("src=", ""))       
+                devices.append(i.replace("src=", ""))
         if debug: main.log.info(str(devices))
 
         ingress = devices[0]
-        egress = devices.pop()               
+        egress = devices.pop()
         if debug: main.log.info(ingress)
         if debug: main.log.info(egress)
 
@@ -230,9 +190,9 @@
             withdrawn = []
 
             for run in range(0, (warmUp + sampleSize)):
-                if run > warmUp: 
+                if run > warmUp:
                     time.sleep(5)
-        
+
                 myRawResult = "--"
                 while "ms" not in myRawResult:
                     main.ONOSbench.handle.sendline(cmd)
@@ -240,23 +200,24 @@
                     myRawResult = main.ONOSbench.handle.before
                     if debug: main.log.info(myRawResult)
 
-                if debug: main.log.info(myRawResult)  
+                if debug: main.log.info(myRawResult)
 
-                if run >= warmUp: 
+                if run >= warmUp:
                     myRawResult = myRawResult.splitlines()
                     for line in myRawResult:
                         if "install" in line:
-                            installed.append(int(line.split(" ")[5]))  
-                    
+                            installed.append(int(line.split(" ")[5]))
+
                     for line in myRawResult:
-                        if "withdraw" in line: 
+                        if "withdraw" in line:
                             withdrawn.append(int(line.split(" ")[5]))
 
                     print("installed: " + str(installed))
                     print("withraw: " + str(withdrawn) + "\n")
-    
+
             main.log.report("----------------------------------------------------")
-            main.log.report("Scale: " + str(clusterCount) + "\tIntent batch size: " + str(intentSize)) 
+            main.log.report("Scale: " + str(clusterCount) + "\tIntent batch size: " + str(intentSize))
+            main.log.report("Data samples: " + str(sampleSize) + "\tWarm up tests: " + str(warmUp))
             main.log.report("Installed average: " + str(numpy.mean(installed)))
             main.log.report("Installed standard deviation: " + str(numpy.std(installed)))
             main.log.report("Withdraw average: " + str(numpy.mean(withdrawn)))
diff --git a/TestON/tests/IntentInstallWithdrawLat/IntentInstallWithdrawLat.topo b/TestON/tests/IntentInstallWithdrawLat/IntentInstallWithdrawLat.topo
index 0e45e0f..30a1467 100644
--- a/TestON/tests/IntentInstallWithdrawLat/IntentInstallWithdrawLat.topo
+++ b/TestON/tests/IntentInstallWithdrawLat/IntentInstallWithdrawLat.topo
@@ -3,7 +3,7 @@
     <COMPONENT>
 
         <ONOSbench>
-            <host>10.254.1.200</host>
+            <host>10.128.5.55</host>
             <user>admin</user>
             <password>onos_test</password>
             <type>OnosDriver</type>
@@ -12,7 +12,7 @@
         </ONOSbench>
 
         <ONOS1cli>
-            <host>10.254.1.200</host>
+            <host>10.128.5.55</host>
             <user>admin</user>
             <password>onos_test</password>
             <type>OnosCliDriver</type>
@@ -21,7 +21,7 @@
         </ONOS1cli>
 
         <ONOS2cli>
-            <host>10.254.1.200</host>
+            <host>10.128.5.55</host>
             <user>admin</user>
             <password>onos_test</password>
             <type>OnosCliDriver</type>
@@ -30,7 +30,7 @@
         </ONOS2cli>
 
         <ONOS3cli>
-            <host>10.254.1.200</host>
+            <host>10.128.5.55</host>
             <user>admin</user>
             <password>onos_test</password>
             <type>OnosCliDriver</type>
@@ -39,7 +39,7 @@
         </ONOS3cli>
 
         <ONOS4cli>
-            <host>10.254.1.200</host>
+            <host>10.128.5.55</host>
             <user>admin</user>
             <password>onos_test</password>
             <type>OnosCliDriver</type>
@@ -48,7 +48,7 @@
         </ONOS4cli>
 
         <ONOS5cli>
-            <host>10.254.1.200</host>
+            <host>10.128.5.55</host>
             <user>admin</user>
             <password>onos_test</password>
             <type>OnosCliDriver</type>
@@ -57,7 +57,7 @@
         </ONOS5cli>
 
         <ONOS6cli>
-            <host>10.254.1.200</host>
+            <host>10.128.5.55</host>
             <user>admin</user>
             <password>onos_test</password>
             <type>OnosCliDriver</type>
@@ -66,7 +66,7 @@
         </ONOS6cli>
 
         <ONOS7cli>
-            <host>10.254.1.200</host>
+            <host>10.128.5.55</host>
             <user>admin</user>
             <password>onos_test</password>
             <type>OnosCliDriver</type>
@@ -75,7 +75,7 @@
         </ONOS7cli>
 
         <ONOS1>
-            <host>10.254.1.201</host>
+            <host>10.128.5.51</host>
             <user>sdn</user>
             <password>rocks</password>
             <type>OnosDriver</type>
@@ -84,7 +84,7 @@
         </ONOS1>
 
         <ONOS2>
-            <host>10.254.1.202</host>
+            <host>10.128.5.52</host>
             <user>sdn</user>
             <password>rocks</password>
             <type>OnosDriver</type>
@@ -93,7 +93,7 @@
         </ONOS2>
 
         <ONOS3>
-            <host>10.254.1.203</host>
+            <host>10.128.5.53</host>
             <user>sdn</user>
             <password>rocks</password>
             <type>OnosDriver</type>
@@ -102,7 +102,7 @@
         </ONOS3>
 
         <ONOS4>
-            <host>10.254.1.204</host>
+            <host>10.128.5.54</host>
             <user>sdn</user>
             <password>rocks</password>
             <type>OnosDriver</type>
@@ -112,7 +112,7 @@
 
     
         <ONOS5>
-            <host>10.254.1.205</host>
+            <host>10.128.5.65</host>
             <user>sdn</user>
             <password>rocks</password>
             <type>OnosDriver</type>
@@ -121,7 +121,7 @@
         </ONOS5>
 
         <ONOS6>
-            <host>10.254.1.206</host>
+            <host>10.128.5.66</host>
             <user>sdn</user>
             <password>rocks</password>
             <type>OnosDriver</type>
@@ -130,7 +130,7 @@
         </ONOS6>
 
         <ONOS7>
-            <host>10.254.1.207</host>
+            <host>10.128.5.67</host>
             <user>sdn</user>
             <password>rocks</password>
             <type>OnosDriver</type>
