diff --git a/TestON/drivers/common/cli/onosdriver.py b/TestON/drivers/common/cli/onosdriver.py
index f96a60e..f69aaba 100644
--- a/TestON/drivers/common/cli/onosdriver.py
+++ b/TestON/drivers/common/cli/onosdriver.py
@@ -1802,7 +1802,7 @@
                 else:
                     time.sleep(1)
 
-            assert ("value=" + str(numPorts)) in verification and (" value=" + fileName) in verification
+            assert ("value=" + str(numPorts)) in verification and (" value=" + devicesString) in verification
         
         except AssertionError:
             main.log.error("Incorrect Config settings: " + verification)
diff --git a/TestON/tests/IntentEventTP/IntentEventTP.params b/TestON/tests/IntentEventTP/IntentEventTP.params
index ec869bf..6ea5285 100644
--- a/TestON/tests/IntentEventTP/IntentEventTP.params
+++ b/TestON/tests/IntentEventTP/IntentEventTP.params
@@ -1,15 +1,15 @@
 <PARAMS>
 
-    <testcases>1,2,3</testcases>
+    <testcases>1,2</testcases>
     
     <debugMode></debugMode>  #nothing means false 
 
     <ENV>
     <cellName>intentTP</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>
+    <cellApps>null,intentperf</cellApps>
     </ENV>
 
-    <SCALE>6</SCALE>
+    <SCALE>1,3,5,7</SCALE>
     <availableNodes>7</availableNodes>
 
     <GIT>
@@ -20,41 +20,44 @@
     <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></MN>
+    <MN><ip1>10.128.5.55</ip1></MN>
 
     <BENCH>
         <user>admin</user>
-        <ip1>10.254.1.200</ip1>
+        <ip1>10.128.5.55</ip1>
     </BENCH>
 
     <TEST> 
         <loadFrom>1,1,1,1,1,1,1</loadFrom>                                     #generate load on server, 1 = generator on 
         <numSwitches>10,10,10,10,10,10,10</numSwitches>
         <skipCleanInstall>yes</skipCleanInstall>
-        <duration>600</duration>
-        <log_interval>20</log_interval>                            
+        <duration>15</duration>
+        <log_interval>20</log_interval>
+        <numKeys>5000</numKeys>
+        <cyclePeriod>1000</cyclePeriod>
+        <neighbors>0,a</neighbors>           #a == all nodes (-1)
     </TEST>
 
     <METRICS>
diff --git a/TestON/tests/IntentEventTP/IntentEventTP.py b/TestON/tests/IntentEventTP/IntentEventTP.py
index 30c44f6..9a6f938 100644
--- a/TestON/tests/IntentEventTP/IntentEventTP.py
+++ b/TestON/tests/IntentEventTP/IntentEventTP.py
@@ -1,12 +1,11 @@
-# ScaleOutTemplate --> IntentEventTP
+# ScaleOutTemplate
 #
 # CASE1 starts number of nodes specified in param file
 #
 # cameron@onlab.us
 
 import sys
-import os
-import time
+import os.path
 
 
 class IntentEventTP:
@@ -14,210 +13,112 @@
     def __init__( self ):
         self.default = ''
 
-    def CASE1( self, main ):            #This is the initialization case
-        import os.path                  #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' ])
-        MNip = main.params[ 'MN' ][ 'ip1' ]
         skipMvn = main.params[ 'TEST' ][ 'skipCleanInstall' ]
+        cellName = main.params[ 'ENV' ][ 'cellName' ]        
         numSwitches = (main.params[ 'TEST' ][ 'numSwitches' ]).split(",")
 
-        homeDir = os.path.expanduser('~')
-        
-        main.ONOSbench.handle.sendline("export TERM=vt100")
-        dump = main.ONOSbench.handle.expect(":~")
 
-        #Populate ONOSIp with ips from params 
-        for i in range(1, maxNodes + 1): 
-            ipString = 'ip' + str(i) 
-            ONOSIp.append(main.params[ 'CTRL' ][ ipString ])   
+        # ?? homeDir = os.path.expanduser('~')
+        # ?? main.ONOSbench.handle.sendline("export TERM=vt100")
+        # ?^ dump = main.ONOSbench.handle.expect(":~")        
+
+
+        # -- 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])
+
+            #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()
+
+            #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" )
         
-        #kill off all onos processes
+        # -- END OF INIT SECTION --#
+         
+        clusterCount = int(scale[0])
+        scale.remove(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.log.info("killing node " + str(node))
             main.ONOSbench.onosDie(ONOSIp[node])
-
-        #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,MNip,str(Features), *cellIp)   
-
-        main.step( "Set Cell" )
-        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] )
+       
+        #construct the cell file
+        main.log.info("Creating cell file")
+        cellIp = []
+        for node in range (1, clusterCount + 1):
+            cellIp.append(ONOSIp[node])
 
-        #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()
- 
-        #null link
-        #null provider 
-        #linkgraph 
-        #intentPerf
+        main.ONOSbench.createCellFile(BENCHIp,cellName,MN1Ip,str(Apps), *cellIp)
+
+        main.step( "Set Cell" )
+        main.ONOSbench.setCell(cellName)
 
         myDistribution = []
         for node in range (1, clusterCount + 1):
             myDistribution.append(numSwitches[node-1])
 
         main.ONOSbench.createLinkGraphFile( BENCHIp,cellIp,myDistribution)
-        main.ONOSbench.createNullDevProviderFile( BENCHIp, cellIp, myDistribution)
-        main.ONOSbench.createNullLinkProviderFile(BENCHIp)
-
-        main.log.step("Writing IntentPerf config file") 
-        intentPerfConfig = open( homeDir + "/onos/tools/package/etc/org.onosproject.intentperf.IntentPerfInstaller.cfg", "w+")
-        intentPerfConfig.write("numKeys = 40000\n")        
-        intentPerfConfig.write("cyclePeriod = 1000\n")
-        intentPerfConfig.write("numNeighors = 0\n")
-        intentPerfConfig.close()
-        
+       
         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( "Checking if ONOS is up yet" )
-        for i in range( 2 ):
-            isup = main.ONOSbench.isup( ONOSIp[1] )
-            if isup:
-                break
-        if not isup:
-            main.log.report( "ONOS1 didn't start!" )
-
-        lastOutput = "--" 
-        origin = time.time()
-        clockStarted = False 
-        while True:
-            main.ONOSbench.handle.sendline("onos $OC1 summary")
-            main.ONOSbench.handle.expect(":~")
-            clusterCheck = ((main.ONOSbench.handle.before).splitlines())[3]
-            print("\nBefore: " + str(clusterCheck))
-            if "SCC(s)=1," in clusterCheck:     
-                break 
-            if clusterCheck != lastOutput:
-                sameOutput = False 
-            elif clusterCheck == lastOutput:
-                if clockStarted == False: 
-                    start = time.time()
-                    clockStarted = True
-                if time.time() > (start + 30):
-                    main.log.error("TIMEOUT EXCEEDED: Clusters have not converged, continuing anyway...") 
-                    break 
-            lastOutput = clusterCheck
-            time.sleep(5)
-
-
-
-    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
-        import os.path
-        global clusterCount
-        
-        Features= main.params[ 'ENV' ][ 'cellFeatures' ] 
-        cellName = main.params[ 'ENV' ][ 'cellName' ]
-        MNip = main.params[ 'MN' ][ 'ip1' ]
-        BENCHIp = main.params[ 'BENCH' ][ 'ip1' ]
-        numSwitches = (main.params[ 'TEST' ][ 'numSwitches' ]).split(",")
-        scale = int( main.params[ 'SCALE' ] )
-        maxNodes = int(main.params[ 'availableNodes' ])
-        clusterCount += scale
-        homeDir = os.path.expanduser('~')        
-
-        #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,MNip,str(Features), *cellIp)
-
-        main.step( "Set Cell" )
-        main.ONOSbench.setCell(cellName)
-
-        myDistribution = []
-        for node in range (1, clusterCount + 1):
-            myDistribution.append(numSwitches[node-1])
-
-        main.ONOSbench.createLinkGraphFile( BENCHIp, cellIp, myDistribution)
-        main.ONOSbench.createNullDevProviderFile( BENCHIp, cellIp, myDistribution)
-        main.ONOSbench.createNullLinkProviderFile( BENCHIp )
-
-        #neighbors = max(1, clusterCount-1) 
-        neighbors = 0
-
-        main.log.step("Writing IntentPerf config file")
-        intentPerfConfig = open( homeDir + "/onos/tools/package/etc/org.onosproject.intentperf.IntentPerfInstaller.cfg", "w+")
-        intentPerfConfig.write("numKeys = 40000\n")
-        intentPerfConfig.write("cyclePeriod = 1000\n")
-        intentPerfConfig.write("numNeighors = " + str(neighbors) + "\n")
-        intentPerfConfig.close()
-
-        main.step( "Creating ONOS package, preparing to reinstall" )
-        packageResult = main.ONOSbench.onosPackage()   
-       
-        main.log.report( "Reinstalling on all nodes and increasing cluster size to " + str( clusterCount ) )
+      
+        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.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] )
@@ -226,7 +127,8 @@
                     break
             if not isup:
                 main.log.report( "ONOS " + str(node) + " didn't start!" )
-        
+        main.log.info("Startup sequence complete")
+
         lastOutput = "--"
         origin = time.time()
         clockStarted = False
@@ -235,7 +137,7 @@
             main.ONOSbench.handle.expect(":~")
             clusterCheck = ((main.ONOSbench.handle.before).splitlines())[3]
             print("\nBefore: " + str(clusterCheck))
-            if ("SCC(s)=1,") in clusterCheck:   
+            if ("SCC(s)=1,") in clusterCheck:
                 break
             if clusterCheck != lastOutput:
                 sameOutput = False
@@ -243,17 +145,18 @@
                 if clockStarted == False:
                     start = time.time()
                     clockStarted = True
-                if time.time() > (start + 60):
+                if time.time() > (start + 10):
                     main.log.error("TIMEOUT EXCEEDED: Clusters have not converged, continuing anyway...")
                     break
             lastOutput = clusterCheck
             time.sleep(5)
-        
-            
-    def CASE3( self, main ):   
+
+        main.ONOSbench.configNullDev(cellIp, myDistribution)
+
+    def CASE2( self, main ): 
         import time
         import json
-        import string 
+        import string
         import csv
         import numpy
 
@@ -265,75 +168,81 @@
         testDuration = main.params[ 'TEST' ][ 'duration' ]
         logInterval = main.params[ 'TEST' ][ 'log_interval' ]
         debug = main.params[ 'debugMode' ]
-
+        numKeys = main.params[ 'TEST' ][ 'numKeys' ]
+        cyclePeriod = main.params[ 'TEST' ][ 'cyclePeriod' ]
+        neighbors = (main.params[ 'TEST' ][ 'neighbors' ]).split(",") 
         metricList = [intentsRate, intentsWithdrawn, intentsFailed]
-        
-        tempsleep =20
-        main.log.info("sleeping " + str(tempsleep)) 
-        time.sleep(tempsleep)
-        
-        loadFrom = ['0']
-        loadFrom.extend((main.params[ 'TEST' ][ 'loadFrom' ]).split(","))
-        
-        for node in range(1, clusterCount+1):
-            if loadFrom[node] == "1": 
-                cmd = "onos $OC" + str(node) + " feature:install onos-app-intent-perf"
-                main.ONOSbench.handle.sendline(cmd)
-                main.ONOSbench.handle.expect(":~")
-                main.log.info( "intent-perf feature installed on: ONOS" + str(node) )
-        
-        time.sleep(5)
-        actcmd = "onos $OC1" + " intent-perf-start"
-        main.ONOSbench.handle.sendline(actcmd)
-        main.ONOSbench.handle.expect(":~")
-        main.log.info("Starting ONOS (all nodes)  intent-perf from $OC1" )
 
-        main.log.info( "Starting test loop for " + str(testDuration) + " seconds...\n" )
-        stop = time.time() + float( testDuration )
-        
-        while time.time() < stop:
-            time.sleep( float( logInterval ) )
-            groupResult = []
-            for node in range (1, clusterCount + 1):
-                if loadFrom[node] == "0": continue
-                groupResult.append(0)               
-                
-                cmd = " onos-ssh $OC" + str(node) +  """ cat /opt/onos/log/karaf.log | grep "SNAPSHOT | Throughput" | tail -1  """ 
-                main.log.info("COMMAND: " + str(cmd))
-  
-                x = 0 
-                while True: 
-                    main.ONOSbench.handle.sendline(cmd)                   
-                    main.ONOSbench.handle.expect(":~")
-                    raw = main.ONOSbench.handle.before 
-                    if "OVERALL=" in raw: 
-                        break 
-                    x += 1
-                    if x > 10: 
-                        main.log.error("Expected output not being recieved... continuing")
-                        break
-                    time.sleep(2)
+        for n in range(0, len(neighbors)): 
+            if neighbors[n] == 'a': 
+                neighbors[n] = str(clusterCount -1)
+        print str(neighbors)
 
-                raw = raw.splitlines()
-                splitResults = []
-                for line in raw: 
-                    splitResults.extend(line.split(" "))
+        for n in neighbors:
+            main.log.info("Run with " + n + " neighbors") 
+            time.sleep(5)
+            main.ONOSbench.handle.sendline("onos $OC1 cfg set org.onosproject.intentperf.IntentPerfInstaller numKeys " + numKeys )
+            main.ONOSbench.handle.expect(":~")
+            main.ONOSbench.handle.sendline("onos $OC1 cfg set org.onosproject.intentperf.IntentPerfInstaller numNeighbors " + n ) 
+            main.ONOSbench.handle.expect(":~")
+            main.ONOSbench.handle.sendline("onos $OC1 cfg set org.onosproject.intentperf.IntentPerfInstaller cyclePeriod " + cyclePeriod )
+            main.ONOSbench.handle.expect(":~")
 
-                myResult = "--" 
-                for field in splitResults: 
-                    if "OVERALL" in field: 
-                        myResult = field 
-                
-                if myResult == "--": 
-                    main.log.error("Parsing/Pexpect error\n" + str(splitResults)) 
+            cmd = "onos $OC1 intent-perf-start"
+            main.ONOSbench.handle.sendline(cmd)
+            main.ONOSbench.handle.expect(":~")
+            main.log.info("Starting ONOS (all nodes)  intent-perf from $OC1" )
 
-                myResult = myResult.replace(";", "") 
-                myResult = myResult.replace("OVERALL=","")
-                myResult = float(myResult)  
-                groupResult[len(groupResult) -1] = myResult 
+            main.log.info( "Starting test loop for " + str(testDuration) + " seconds...\n" )
+            stop = time.time() + float( testDuration )
 
-                main.log.info("Node " + str(node) + " overall rate: " + str(myResult))
+            while time.time() < stop:
+                time.sleep( float( logInterval ) )
+                groupResult = []
+                for node in range (1, clusterCount + 1):
+                    groupResult.append(0)
 
-            main.log.report("Results from this round of polling: " + str(groupResult)) 
-            main.log.report("Cluster Total: " + str(numpy.sum(groupResult)) + "\n")
-                
+                    cmd = " onos-ssh $OC" + str(node) +  """ cat /opt/onos/log/karaf.log | grep "SNAPSHOT | Throughput" | tail -1  """
+                    main.log.info("COMMAND: " + str(cmd))
+
+                    x = 0
+                    while True:
+                        main.ONOSbench.handle.sendline(cmd)
+                        main.ONOSbench.handle.expect(":~")
+                        raw = main.ONOSbench.handle.before
+                        if "OVERALL=" in raw:
+                            break
+                        x += 1
+                        if x > 10:
+                            main.log.error("Expected output not being recieved... continuing")
+                            break
+                        time.sleep(2)
+
+                    raw = raw.splitlines()
+                    splitResults = []
+                    for line in raw:
+                        splitResults.extend(line.split(" "))
+
+                    myResult = "--"
+                    for field in splitResults:
+                        if "OVERALL" in field:
+                            myResult = field
+
+                    if myResult == "--":
+                        main.log.error("Parsing/Pexpect error\n" + str(splitResults))
+
+                    myResult = myResult.replace(";", "")
+                    myResult = myResult.replace("OVERALL=","")
+                    myResult = float(myResult)
+                    groupResult[len(groupResult) -1] = myResult
+
+                    main.log.info("Node " + str(node) + " overall rate: " + str(myResult))
+
+                main.log.report("Results from this round of polling: " + str(groupResult))
+                main.log.report("Cluster Total: " + str(numpy.sum(groupResult)) + "\n")
+            
+            cmd = "onos $OC1 intent-perf-stop"
+            main.ONOSbench.handle.sendline(cmd)
+            main.ONOSbench.handle.expect(":~")
+            main.log.info("Stopping intentperf" )
+     
diff --git a/TestON/tests/IntentEventTP/IntentEventTP.topo b/TestON/tests/IntentEventTP/IntentEventTP.topo
index 0e45e0f..30a1467 100644
--- a/TestON/tests/IntentEventTP/IntentEventTP.topo
+++ b/TestON/tests/IntentEventTP/IntentEventTP.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>
