diff --git a/TestON/tests/IntentPerfNextBM/IntentPerfNextBM.params b/TestON/tests/IntentPerfNextBM/IntentPerfNextBM.params
index 194a783..f01f017 100644
--- a/TestON/tests/IntentPerfNextBM/IntentPerfNextBM.params
+++ b/TestON/tests/IntentPerfNextBM/IntentPerfNextBM.params
@@ -1,5 +1,5 @@
 <PARAMS>
-    <testcases>1,2,3,4,2,3,4,2,3,4,2,3</testcases>
+    <testcases>1,2,4,2,4,2,4,2</testcases>
 
     <ENV>
         <cellName>intent_perf_test</cellName>
@@ -49,6 +49,7 @@
         <numMult>1</numMult>
         #Interface to bring down for intent reroute case
         <intfs>s3-eth2</intfs>
+        <cellStr>webconsole,onos-core,onos-api,onos-app-metrics,onos-app-gui,onos-cli,onos-openflow</cellStr>
     </TEST>
 
     <DB>
diff --git a/TestON/tests/IntentPerfNextBM/IntentPerfNextBM.py b/TestON/tests/IntentPerfNextBM/IntentPerfNextBM.py
index 8f23b29..32477a6 100644
--- a/TestON/tests/IntentPerfNextBM/IntentPerfNextBM.py
+++ b/TestON/tests/IntentPerfNextBM/IntentPerfNextBM.py
@@ -23,6 +23,7 @@
         gitPull = main.params['GIT']['autoPull']
         checkoutBranch = main.params['GIT']['checkout']
         intentFilePath = main.params['DB']['intentFilePath']
+        cellStr = main.params[ 'TEST' ][ 'cellStr' ]
         ONOSIp = []
         
         for i in range(1, 8):
@@ -39,7 +40,8 @@
         main.step('Starting mininet topology')
         main.Mininet1.startNet()
         main.step('Creating cell file')
-        cellFileResult = main.TRUE
+        cellFileResult = main.ONOSbench.createCellFile(
+                BENCHIp, cellName, MN1Ip, cellStr, ONOSIp[0])
         main.step('Applying cell file to environment')
         cellApplyResult = main.ONOSbench.setCell(cellName)
         verifyCellResult = main.ONOSbench.verifyCell()
@@ -151,7 +153,6 @@
 
         time.sleep(20)
         
-        batchResultList = []
         deviceIdList = []
         batchInstallLat = []
         batchWithdrawLat = []
@@ -165,6 +166,9 @@
         for device in jsonObj:
             deviceIdList.append(device['id'])
 
+        if not jsonObj:
+            main.log.warn( "Devices not found, check topology" )
+            
         sleepTime = 10
         baseDir = '/tmp/'
         for batch in range(0, 5):
@@ -283,6 +287,7 @@
                 stdWithdrawLat = 'NA'
                 main.log.report('Batch withdraw failed')
                 assertion = main.FALSE
+            
             main.log.report('Avg of batch installation latency ' +
                     'of size ' + str(batchIntentSize) + ': ' +
                     str(avgInstallLat) + ' ms')
@@ -293,6 +298,7 @@
                     str(avgWithdrawLat) + ' ms')
             main.log.report('Std Deviation of batch withdraw latency ' +
                     ': ' + str(round(numpy.std(maxWithdrawLat), 2)) + ' ms')
+            
             main.log.report('Avg of batch withdraw latency ' + 'of size ' +
                     str(batchIntentSize) + ': ' + str(avgWithdrawLat) + ' ms')
             main.log.report('Std Deviation of batch withdraw latency ' +
@@ -302,6 +308,7 @@
                     str(avgSingleWithdrawLat) + ' ms')
             main.log.report('Std Deviation of single withdraw latency ' +
                     ': ' + str(stdSingleWithdrawLat) + ' ms')
+            
             dbCmd = "INSERT INTO intents_latency_tests VALUES('" +\
                     timeToPost + "','intents_latency_results'," +\
                     runNum + ',' + str(clusterCount) + ',' +\
@@ -680,27 +687,28 @@
         import time
         import json
         
-        cellName = main.params[ 'ENV' ][ 'cellName' ]
-        features = main.params[ 'ENV' ][ 'cellFeatures' ]
-        benchIp = main.params[ 'BENCH' ][ 'ip' ]
-        mininetIp = main.params[ 'TEST' ][ 'MN' ]
-        
         clusterCount += 2
+        
+        cellName = main.params[ 'ENV' ][ 'cellName' ]
+        features = main.params[ 'TEST' ][ 'cellStr' ]
+        benchIp = main.params[ 'BENCH' ][ 'ip' ]
+        mininetIp = main.params[ 'MN' ][ 'ip1' ]
+        
         main.log.report('Increasing cluster size to ' + str(clusterCount))
         
         ONOSIp = []
         for i in range( 1, 8 ):
-            ONOSIp.append( main.params[ 'CTRL' ][ 'ip'+str(i) ]
+            ONOSIp.append( main.params[ 'CTRL' ][ 'ip'+str(i) ] )
 
         main.step( "Cleaning environment" )
-        for i in range( 1, 8 ):
+        for i in range( 0, 7 ):
             main.ONOSbench.onosDie( ONOSIp[i] )
-            main.log.info( "Uninstalling ONOS "+str(i) )
+            main.log.info( "Uninstalling ONOS "+str(i+1) )
             main.ONOSbench.onosUninstall( ONOSIp[i] )
 
         main.step( "Creating new cell file" )
         cellIp = []
-        for node in range( 1, clusterCount + 1 )
+        for node in range( 1, clusterCount + 1 ):
             cellIp.append( ONOSIp[node] )
         main.ONOSbench.createCellFile( benchIp, cellName,
                                        mininetIp, str(features), *cellIp )
@@ -712,12 +720,9 @@
         main.ONOSbench.onosPackage()
 
         for node in range( 1, clusterCount + 1 ):
-            time.sleep(10)
-            main.log.info( "Starting ONOS "+str(node) +
-                            " at IP: "+ONOSIp[node] )
-            main.ONOSbench.onosInstall( ONOSIp[node] )
-            exec "a = main.ONOS%scli.startOnosCli" %str(node)
-            a( ONOSIp[node] )
+            main.ONOSbench.onosInstall( node = ONOSIp[node] )
+            
+        time.sleep( 20 )
 
         for node in range( 1, clusterCount + 1 ):
             for i in range( 2 ):
@@ -729,6 +734,12 @@
                 if not isup:
                     main.log.info( "ONOS" + str(node) + " did not start")
         
+        for node in range( 1, clusterCount + 1 ):
+            exec "a = main.ONOS%scli.startOnosCli" %str(node)
+            a( ONOSIp[node] )
+
+        time.sleep(30)
+
         utilities.assert_equals(expect=main.TRUE, actual=assertion,
             onpass='Scale out to ' + str(clusterCount) + ' nodes successful',
             onfail='Scale out to ' + str(clusterCount) + ' nodes failed')
