diff --git a/TestON/tests/ScaleOutTemplate/NOTES.txt b/TestON/tests/ScaleOutTemplate/NOTES.txt
deleted file mode 100644
index 6942f14..0000000
--- a/TestON/tests/ScaleOutTemplate/NOTES.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-create the params file to go with the topofile and write the python case 
-need an __init__ doc? always empty? ask/look up
-remember to write in startup verification and check manually the first few times
-remember to refer to TopoConvNext for reference
-might need to delete THIS file when done 
diff --git a/TestON/tests/ScaleOutTemplate/ScaleOutTemplate.params b/TestON/tests/ScaleOutTemplate/ScaleOutTemplate.params
index 94ce2be..641d16a 100644
--- a/TestON/tests/ScaleOutTemplate/ScaleOutTemplate.params
+++ b/TestON/tests/ScaleOutTemplate/ScaleOutTemplate.params
@@ -1,15 +1,19 @@
 <PARAMS>
 
-    <testcases>1,2,2</testcases>
+    <testcases>1,2</testcases>
 
-    <SCALE>1</SCALE>
-    <availableNodes>3</availableNodes>
+    <SCALE>2</SCALE>
+    <availableNodes>7</availableNodes>
  
     <ENV>
         <cellName>defaultCell</cellName>
         <cellFeatures></cellFeatures>
     </ENV>
 
+    <TEST>
+        <skipCleanInstall>yes</skipCleanInstall>
+    </TEST>
+
     <GIT>
         <autopull>on</autopull>
         <checkout>master</checkout>
@@ -27,16 +31,16 @@
         <ip3>10.128.5.53</ip3>
         <port3>6633</port3>
         
-        <ip4>10.128.5.51</ip4>
+        <ip4>10.128.5.54</ip4>
         <port4>6633</port4>
         
-        <ip5>10.128.5.52</ip5>
+        <ip5>10.128.5.65</ip5>
         <port5>6633</port5>
         
-        <ip6>10.128.5.53</ip6>
+        <ip6>10.128.5.66</ip6>
         <port6>6633</port6> 
        
-         <ip7>10.128.5.53</ip7>
+         <ip7>10.128.5.67</ip7>
         <port7>6633</port7>
 
     </CTRL>
@@ -50,10 +54,6 @@
         <ip1>10.128.5.55</ip1>
     </BENCH>
 
-    <TEST>
-        <skipCleanInstall>yes</skipCleanInstall>
-    </TEST>
-
     <JSON>
     </JSON>
 
diff --git a/TestON/tests/ScaleOutTemplate/ScaleOutTemplate.py b/TestON/tests/ScaleOutTemplate/ScaleOutTemplate.py
index abdc78c..fdcd680 100644
--- a/TestON/tests/ScaleOutTemplate/ScaleOutTemplate.py
+++ b/TestON/tests/ScaleOutTemplate/ScaleOutTemplate.py
@@ -5,7 +5,7 @@
 # cameron@onlab.us
 
 import sys
-import os
+import os.path
 
 
 class ScaleOutTemplate:
@@ -15,13 +15,14 @@
 
     def CASE1( self, main ):            #This is the initialization case
                                         #this case will clean up all nodes 
-                                        #but only node 1 is started in this case
+        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 ]
 
+
         #Load values from params file
         checkoutBranch = main.params[ 'GIT' ][ 'checkout' ]
         gitPull = main.params[ 'GIT' ][ 'autopull' ]
@@ -38,7 +39,22 @@
         for i in range(1, maxNodes + 1): 
             ipString = 'ip' + str(i) 
             ONOSIp.append(main.params[ 'CTRL' ][ ipString ])   
-        
+
+        #############################
+        tempIp = [ ONOSIp[1],ONOSIp[2],ONOSIp[3],ONOSIp[4],ONOSIp[5]]
+        main.ONOSbench.createLinkGraphFile(BENCHIp, tempIp, str(7)) 
+
+        main.log.info("marker")
+        #############################
+
+
+        #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])
+
+
         #construct the cell file
         main.log.info("Creating cell file")
         exec "a = main.ONOSbench.createCellFile"
@@ -52,24 +68,25 @@
         for i in range(1, maxNodes + 1):
             main.log.info(" Uninstalling ONOS " + str(i) )
             main.ONOSbench.onosUninstall( ONOSIp[i] )
-
-        #git 
-        main.step( "Git checkout and pull " + checkoutBranch )
-        if gitPull == 'on':
-            checkoutResult = main.ONOSbench.gitCheckout( checkoutBranch )
-            pullResult = main.ONOSbench.gitPull()
-
-        else:
-            checkoutResult = main.TRUE
-            pullResult = main.TRUE
-            main.log.info( "Skipped git checkout and pull" )
         
         #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':
+                checkoutResult = main.ONOSbench.gitCheckout( checkoutBranch )
+                pullResult = main.ONOSbench.gitPull()
 
-        main.step( "Set cell for ONOS cli env" )
-        main.ONOS1cli.setCell( cellName )
+            else:
+                checkoutResult = main.TRUE
+                pullResult = main.TRUE
+                main.log.info( "Skipped git checkout and pull" )
+
+
+        #main.step( "Set cell for ONOS cli env" )
+        #main.ONOS1cli.setCell( cellName )
         
         main.step( "Creating ONOS package" )
         packageResult = main.ONOSbench.onosPackage()  
@@ -86,6 +103,7 @@
         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
@@ -99,14 +117,18 @@
         ''
         import time
         global clusterCount
-
+        
+        BENCHIp = main.params[ 'BENCH' ][ 'ip1' ]
         scale = int( main.params[ 'SCALE' ] )
         clusterCount += scale
 
         main.log.report( "Increasing cluster size to " + str( clusterCount ) )
         for node in range((clusterCount - scale) + 1, clusterCount + 1):
+            main.ONOSbench.onosDie(ONOSIp[node])
+            time.sleep(10)
             main.log.info("Starting ONOS " + str(node) + " at IP: " + ONOSIp[node])    
-            main.ONOSbench.onosInstall( ONOSIp[node])
+            main.ONOSbench.onosInstall( node=ONOSIp[node])
             exec "a = main.ONOS%scli.startOnosCli" %str(node)
             a(ONOSIp[node])
-      
+         
+
