diff --git a/TestON/tests/SCPF/SCPFflowTp1g/SCPFflowTp1g.params b/TestON/tests/SCPF/SCPFflowTp1g/SCPFflowTp1g.params
index a263ca6..99d17ba 100644
--- a/TestON/tests/SCPF/SCPFflowTp1g/SCPFflowTp1g.params
+++ b/TestON/tests/SCPF/SCPFflowTp1g/SCPFflowTp1g.params
@@ -24,7 +24,10 @@
         <testCMD1> -n </testCMD1>                       #neighbors
 
     </TEST>
-
+    <CFG>
+        <flowRule>org.onosproject.store.flow.impl.DistributedFlowRuleStore</flowRule>
+        <nullProvider>org.onosproject.provider.nil.NullProviders</nullProvider>
+    </CFG>
     <GIT>
         <pull>False</pull>
         <branch>master</branch>
diff --git a/TestON/tests/SCPF/SCPFflowTp1g/SCPFflowTp1g.py b/TestON/tests/SCPF/SCPFflowTp1g/SCPFflowTp1g.py
index 1de518f..f6325ad 100644
--- a/TestON/tests/SCPF/SCPFflowTp1g/SCPFflowTp1g.py
+++ b/TestON/tests/SCPF/SCPFflowTp1g/SCPFflowTp1g.py
@@ -63,19 +63,21 @@
                 BENCHUser = main.params[ 'BENCH' ][ 'user' ]
                 BENCHIp = main.params[ 'BENCH' ][ 'ip1' ]
                 main.scale = ( main.params[ 'SCALE' ]  ).split( "," )
+                main.flowRuleCfg = main.params[ 'CFG' ][ 'flowRule' ]
+                main.nullProviderCfg = main.params[ 'CFG' ][ 'nullProvider' ]
                 stepResult = main.testSetUp.envSetup()
                 resultsDB = open( "/tmp/flowTP1gDB", "w+" )
                 resultsDB.close()
             except Exception as e:
                 main.testSetUp.envSetupException( e )
             main.testSetUp.evnSetupConclusion( stepResult )
-            main.commit = (main.commit.split(" "))[1]
+            main.commit = ( main.commit.split( " " ) )[ 1 ]
         # -- END OF INIT SECTION --#
 
-        main.testSetUp.ONOSSetUp( "localhost", True, cellName=cellName )
+        main.testSetUp.ONOSSetUp( "localhost", main.Cluster, True, cellName=cellName )
 
-        main.log.info("Startup sequence complete")
-        main.ONOSbench.logReport(main.ONOSip[0], ["ERROR", "WARNING", "EXCEPT"], outputMode="d")
+        main.log.info( "Startup sequence complete" )
+        main.ONOSbench.logReport( main.Cluster.active( 0 ).ipAddress, [ "ERROR", "WARNING", "EXCEPT" ], outputMode="d" )
 
     def CASE2( self, main ):
         #
@@ -92,230 +94,238 @@
         try:
             currentNeighbors
         except:
-            currentNeighbors = (main.params[ 'TEST' ][ 'neighbors' ]).split(",")[0]
+            currentNeighbors = ( main.params[ 'TEST' ][ 'neighbors' ] ).split( "," )[ 0 ]
         else:
             if currentNeighbors == "r":      #reset
                 currentNeighbors = "0"
             else:
                 currentNeighbors = "a"
 
-        testCMD = [ 0,0,0,0 ]
-        warmUp = int(main.params[ 'TEST' ][ 'warmUp' ])
-        sampleSize = int(main.params[ 'TEST' ][ 'sampleSize' ])
-        switches = int(main.params[ 'TEST' ][ 'switches' ])
-        neighborList = (main.params[ 'TEST' ][ 'neighbors' ]).split(",")
-        testCMD[0] = main.params[ 'TEST' ][ 'testCMD0' ]
-        testCMD[1] = main.params[ 'TEST' ][ 'testCMD1' ]
+        testCMD = [ 0, 0, 0, 0 ]
+        warmUp = int( main.params[ 'TEST' ][ 'warmUp' ] )
+        sampleSize = int( main.params[ 'TEST' ][ 'sampleSize' ] )
+        switches = int( main.params[ 'TEST' ][ 'switches' ] )
+        neighborList = ( main.params[ 'TEST' ][ 'neighbors' ] ).split( "," )
+        testCMD[ 0 ] = main.params[ 'TEST' ][ 'testCMD0' ]
+        testCMD[ 1 ] = main.params[ 'TEST' ][ 'testCMD1' ]
         cooldown = main.params[ 'TEST' ][ 'cooldown' ]
         cellName = main.params[ 'ENV' ][ 'cellName' ]
         BENCHIp = main.params[ 'BENCH' ][ 'ip1' ]
         BENCHUser = main.params[ 'BENCH' ][ 'user' ]
         MN1Ip = main.params[ 'MN' ][ 'ip1' ]
-        homeDir = os.path.expanduser('~')
-        flowRuleBackup = str(main.params[ 'TEST' ][ 'enableFlowRuleStoreBackup' ])
-        main.log.info("Flow Rule Backup is set to:" + flowRuleBackup)
+        homeDir = os.path.expanduser( '~' )
+        flowRuleBackup = str( main.params[ 'TEST' ][ 'enableFlowRuleStoreBackup' ] )
+        main.log.info( "Flow Rule Backup is set to:" + flowRuleBackup )
 
-        servers = str( main.numCtrls )
+        servers = str( main.Cluster.numCtrls )
 
-        if main.numCtrls == 1:
-            neighborList = ['0']
+        if main.Cluster.numCtrls == 1:
+            neighborList = [ '0' ]
             currentNeighbors = "r"
         else:
             if currentNeighbors == "a":
-                neighborList = [ str( main.numCtrls - 1 ) ]
+                neighborList = [ str( main.Cluster.numCtrls - 1 ) ]
                 currentNeighbors = "r"
             else:
-                neighborList = ['0']
+                neighborList = [ '0' ]
 
-        main.log.info("neightborlist: " + str(neighborList))
+        main.log.info( "neightborlist: " + str( neighborList ) )
 
         ts = time.time()
-        st = datetime.datetime.fromtimestamp(ts).strftime('%Y-%m-%d %H:%M:%S')
+        st = datetime.datetime.fromtimestamp( ts ).strftime( '%Y-%m-%d %H:%M:%S' )
 
         for n in neighborList:
-            main.step("\tSTARTING TEST")
-            main.step("\tLOADING FROM SERVERS:  \t" + str( main.numCtrls ) )
-            main.step("\tNEIGHBORS:\t" + n )
-            main.log.info("=============================================================")
-            main.log.info("=============================================================")
+            main.step( "\tSTARTING TEST" )
+            main.step( "\tLOADING FROM SERVERS:  \t" + str( main.Cluster.numCtrls ) )
+            main.step( "\tNEIGHBORS:\t" + n )
+            main.log.info( "=============================================================" )
+            main.log.info( "=============================================================" )
             #write file to configure nil link
             ipCSV = ""
-            for i in range ( main.maxNodes ):
+            for i in range ( main.Cluster.maxCtrls ):
                 tempstr = "ip" + str( i + 1 )
                 ipCSV += main.params[ 'CTRL' ][ tempstr ]
-                if i + 1 < main.maxNodes:
+                if i + 1 < main.Cluster.maxCtrls:
                     ipCSV +=","
 
-            main.ONOSbench.onosCfgSet(main.ONOSip[0], "org.onosproject.store.flow.impl.DistributedFlowRuleStore", "backupCount 1")
-            for i in range(3):
-                main.ONOSbench.onosCfgSet(main.ONOSip[0], "org.onosproject.provider.nil.NullProviders", "deviceCount 35")
-                main.ONOSbench.onosCfgSet(main.ONOSip[0], "org.onosproject.provider.nil.NullProviders", "topoShape linear")
-                main.ONOSbench.onosCfgSet(main.ONOSip[0], "org.onosproject.provider.nil.NullProviders", "enabled true")
+            main.ONOSbench.onosCfgSet( main.Cluster.active( 0 ).ipAddress,
+                                       main.flowRuleCfg,
+                                       "backupCount 1" )
+            for i in range( 3 ):
+                main.ONOSbench.onosCfgSet( main.Cluster.active( 0 ).ipAddress,
+                                           main.nullProviderCfg,
+                                           "deviceCount 35" )
+                main.ONOSbench.onosCfgSet( main.Cluster.active( 0 ).ipAddress,
+                                           main.nullProviderCfg,
+                                           "topoShape linear" )
+                main.ONOSbench.onosCfgSet( main.Cluster.active( 0 ).ipAddress,
+                                           main.nullProviderCfg,
+                                           "enabled true" )
 
-                time.sleep(5)
-                main.ONOSbench.handle.sendline("onos $OC1 summary")
-                main.ONOSbench.handle.expect(":~")
+                time.sleep( 5 )
+                main.ONOSbench.handle.sendline( "onos $OC1 summary" )
+                main.ONOSbench.handle.expect( ":~" )
                 check = main.ONOSbench.handle.before
-                main.log.info("\nStart up check: \n" + check + "\n")
+                main.log.info( "\nStart up check: \n" + check + "\n" )
                 if "SCC(s)=1," in check:
                     main.ONOSbench.handle.sendline( "onos $OC1 balance-masters" )
                     main.ONOSbench.handle.expect( ":~" )
-                    time.sleep(5)
-                    main.ONOSbench.handle.sendline( "onos $OC1 roles ")
+                    time.sleep( 5 )
+                    main.ONOSbench.handle.sendline( "onos $OC1 roles " )
                     main.ONOSbench.handle.expect ( ":~" )
                     main.log.info( "switch masterships:" + str( main.ONOSbench.handle.before ) )
                     break
-                time.sleep(5)
+                time.sleep( 5 )
 
             #devide flows
-            flows = int(main.params[ 'TEST' ][ 'flows' ])
-            main.log.info("Flow Target  = " + str(flows))
+            flows = int( main.params[ 'TEST' ][ 'flows' ] )
+            main.log.info( "Flow Target  = " + str( flows ) )
 
-            flows = (flows *max(int(n)+1,int(servers)))/((int(n) + 1)*int(servers)*(switches))
+            flows = ( flows *max( int( n )+1, int( servers ) ) )/( ( int( n ) + 1 ) * int( servers )*( switches ) )
 
-            main.log.info("Flows per switch = " + str(flows))
+            main.log.info( "Flows per switch = " + str( flows ) )
 
             #build list of servers in "$OC1, $OC2...." format
             serverEnvVars = ""
             for i in range( int( servers ) ):
-                serverEnvVars += ( "-s " + main.ONOSip[ i ] + " " )
+                serverEnvVars += ( "-s " + main.Cluster.active( i ).ipAddress + " " )
 
-            data = [[""]*int(servers)]*int(sampleSize)
-            maxes = [""]*int(sampleSize)
+            data = [ [ "" ]*int( servers ) ]*int( sampleSize )
+            maxes = [ "" ]*int( sampleSize )
 
             flowCMD = "python3 " + homeDir + "/onos/tools/test/bin/"
-            flowCMD += testCMD[0] + " " + str(flows) + " " + testCMD[1]
-            flowCMD += " " + str(n) + " " + str(serverEnvVars) + "-j"
+            flowCMD += testCMD[ 0 ] + " " + str( flows ) + " " + testCMD[ 1 ]
+            flowCMD += " " + str( n ) + " " + str( serverEnvVars ) + "-j"
 
-            main.log.info(flowCMD)
-            #time.sleep(60)
+            main.log.info( flowCMD )
+            #time.sleep( 60 )
 
-            for test in range(0, warmUp + sampleSize):
+            for test in range( 0, warmUp + sampleSize ):
                 if test < warmUp:
-                    main.log.info("Warm up " + str(test + 1) + " of " + str(warmUp))
+                    main.log.info( "Warm up " + str( test + 1 ) + " of " + str( warmUp ) )
                 else:
-                     main.log.info("====== Test run: " + str(test-warmUp+1) + " ======")
+                     main.log.info( "====== Test run: " + str( test-warmUp+1 ) + " ======" )
 
-                main.ONOSbench.handle.sendline(flowCMD)
-                main.ONOSbench.handle.expect(":~")
+                main.ONOSbench.handle.sendline( flowCMD )
+                main.ONOSbench.handle.expect( ":~" )
                 rawResult = main.ONOSbench.handle.before
-                main.log.info("Raw results: \n" + rawResult + "\n")
+                main.log.info( "Raw results: \n" + rawResult + "\n" )
 
                 if "failed" in rawResult:
-                    main.log.report("FLOW_TESTER.PY FAILURE")
-                    main.log.report( " \n" + rawResult + " \n")
-                    for i in range( main.numCtrls ):
-                        main.log.report("=======================================================")
-                        main.log.report(" ONOS " + str( i + 1 ) + "LOG REPORT")
-                        main.ONOSbench.logReport( main.ONOSip[ i ], ["ERROR", "WARNING", "EXCEPT"], outputMode="d" )
-                    main.ONOSbench.handle.sendline("onos $OC1 flows")
-                    main.ONOSbench.handle.expect(":~")
-                    main.log.info(main.ONOSbench.handle.before)
+                    main.log.report( "FLOW_TESTER.PY FAILURE" )
+                    main.log.report( " \n" + rawResult + " \n" )
+                    for ctrl in main.Cluster.active():
+                        main.log.report( "=======================================================" )
+                        main.log.report( ctrl.name + "LOG REPORT" )
+                        main.ONOSbench.logReport( ctrl.ipAddress, [ "ERROR", "WARNING", "EXCEPT" ], outputMode="d" )
+                    main.ONOSbench.handle.sendline( "onos $OC1 flows" )
+                    main.ONOSbench.handle.expect( ":~" )
+                    main.log.info( main.ONOSbench.handle.before )
 
                     break
 
             ########################################################################################
-                result = [""]*( main.numCtrls )
+                result = [ "" ]*( main.Cluster.numCtrls )
 
-                #print("rawResult: " + rawResult)
+                #print( "rawResult: " + rawResult )
 
                 rawResult = rawResult.splitlines()
 
-                for node in range( main.numCtrls ):
+                for node in range( main.Cluster.numCtrls ):
                     for line in rawResult:
-                        #print("line: " + line)
-                        if main.ONOSip[ node ] in line and "server" in line:
+                        #print( "line: " + line )
+                        if main.Cluster.active( node ).ipAddress in line and "server" in line:
                             temp = line.split( " " )
                             for word in temp:
-                                #print ("word: " + word)
-                                if "elapsed" in repr(word):
-                                    index = temp.index(word) + 1
-                                    myParsed = (temp[index]).replace(",","")
-                                    myParsed = myParsed.replace("}","")
-                                    myParsed = int(myParsed)
+                                #print ( "word: " + word )
+                                if "elapsed" in repr( word ):
+                                    index = temp.index( word ) + 1
+                                    myParsed = ( temp[ index ] ).replace( ",", "" )
+                                    myParsed = myParsed.replace( "}", "" )
+                                    myParsed = int( myParsed )
                                     result[ node ] = myParsed
-                                    main.log.info( main.ONOSip[ node ] + " : " + str( myParsed ) )
+                                    main.log.info( main.Cluster.active( node ).ipAddress + " : " + str( myParsed ) )
                                     break
 
                 if test >= warmUp:
                     for i in result:
                         if i == "":
-                            main.log.error("Missing data point, critical failure incoming")
+                            main.log.error( "Missing data point, critical failure incoming" )
 
                     print result
-                    maxes[test-warmUp] = max(result)
-                    main.log.info("Data collection iteration: " + str(test-warmUp) + " of " + str(sampleSize))
-                    main.log.info("Throughput time: " + str(maxes[test-warmUp]) + "(ms)")
+                    maxes[ test-warmUp ] = max( result )
+                    main.log.info( "Data collection iteration: " + str( test-warmUp ) + " of " + str( sampleSize ) )
+                    main.log.info( "Throughput time: " + str( maxes[ test-warmUp ] ) + "(ms)" )
 
-                    data[test-warmUp] = result
+                    data[ test-warmUp ] = result
 
                 # wait for flows = 0
-                for checkCount in range(0,5):
-                    time.sleep(10)
-                    main.ONOSbench.handle.sendline("onos $OC1 summary")
-                    main.ONOSbench.handle.expect(":~")
+                for checkCount in range( 0, 5 ):
+                    time.sleep( 10 )
+                    main.ONOSbench.handle.sendline( "onos $OC1 summary" )
+                    main.ONOSbench.handle.expect( ":~" )
                     flowCheck = main.ONOSbench.handle.before
                     if "flows=0," in flowCheck:
-                        main.log.info("Flows removed")
+                        main.log.info( "Flows removed" )
                         break
                     else:
                         for line in flowCheck.splitlines():
                             if "flows=" in line:
-                                main.log.info("Current Summary: " + line)
+                                main.log.info( "Current Summary: " + line )
                     if checkCount == 2:
-                        main.log.info("Flows are stuck, moving on ")
+                        main.log.info( "Flows are stuck, moving on " )
 
 
-                time.sleep(5)
+                time.sleep( 5 )
 
-            main.log.info("raw data: " + str(data))
-            main.log.info("maxes:" + str(maxes))
+            main.log.info( "raw data: " + str( data ) )
+            main.log.info( "maxes:" + str( maxes ) )
 
 
             # report data
-            print("")
-            main.log.info("\t Results (measurments are in milliseconds)")
-            print("")
+            print( "" )
+            main.log.info( "\t Results (measurments are in milliseconds)" )
+            print( "" )
 
             nodeString = ""
-            for i in range(1, int(servers) + 1):
-                nodeString += ("\tNode " + str(i))
+            for i in range( 1, int( servers ) + 1 ):
+                nodeString += ( "\tNode " + str( i ) )
 
-            for test in range(0, sampleSize ):
-                main.log.info("\t Test iteration " + str(test + 1) )
-                main.log.info("\t------------------")
-                main.log.info(nodeString)
+            for test in range( 0, sampleSize ):
+                main.log.info( "\t Test iteration " + str( test + 1 ) )
+                main.log.info( "\t------------------" )
+                main.log.info( nodeString )
                 resultString = ""
 
-                for i in range(0, int(servers) ):
-                    resultString += ("\t" + str(data[test][i]) )
-                main.log.info(resultString)
+                for i in range( 0, int( servers ) ):
+                    resultString += ( "\t" + str( data[ test ][ i ] ) )
+                main.log.info( resultString )
 
-                print("\n")
+                print( "\n" )
 
-            avgOfMaxes = numpy.mean(maxes)
-            main.log.info("Average of max value from each test iteration: " + str(avgOfMaxes))
+            avgOfMaxes = numpy.mean( maxes )
+            main.log.info( "Average of max value from each test iteration: " + str( avgOfMaxes ) )
 
-            stdOfMaxes = numpy.std(maxes)
-            main.log.info("Standard Deviation of max values: " + str(stdOfMaxes))
-            print("\n\n")
+            stdOfMaxes = numpy.std( maxes )
+            main.log.info( "Standard Deviation of max values: " + str( stdOfMaxes ) )
+            print( "\n\n" )
 
-            avgTP = int(main.params[ 'TEST' ][ 'flows' ])  / avgOfMaxes #result in kflows/second
+            avgTP = int( main.params[ 'TEST' ][ 'flows' ] )  / avgOfMaxes #result in kflows/second
 
             tp = []
             for i in maxes:
-                tp.append((int(main.params[ 'TEST' ][ 'flows' ]) / i ))
+                tp.append( ( int( main.params[ 'TEST' ][ 'flows' ] ) / i ) )
 
-            stdTP = numpy.std(tp)
+            stdTP = numpy.std( tp )
 
-            main.log.info("Average thoughput:  " + str(avgTP) + " Kflows/second" )
-            main.log.info("Standard deviation of throughput: " + str(stdTP) + " Kflows/second")
+            main.log.info( "Average thoughput:  " + str( avgTP ) + " Kflows/second" )
+            main.log.info( "Standard deviation of throughput: " + str( stdTP ) + " Kflows/second" )
 
             resultsLog = open( "/tmp/flowTP1gDB", "a" )
             resultString = ( "'" + main.commit + "'," )
             resultString += ( "'1gig'," )
-            resultString += ( (main.params[ 'TEST' ][ 'flows' ] ) + "," )
-            resultString += ( str( main.numCtrls ) + "," )
+            resultString += ( ( main.params[ 'TEST' ][ 'flows' ] ) + "," )
+            resultString += ( str( main.Cluster.numCtrls ) + "," )
             resultString += ( str( n ) + "," )
             resultString += ( str( avgTP ) + "," + str( stdTP ) + "\n" )
             resultsLog.write( resultString )
@@ -323,4 +333,4 @@
 
             main.log.report( "Result line to file: " + resultString )
 
-        main.ONOSbench.logReport( main.ONOSip[ 0 ], [ "ERROR", "WARNING", "EXCEPT" ], outputMode="d" )
+        main.ONOSbench.logReport( main.Cluster.active( 0 ).ipAddress, [ "ERROR", "WARNING", "EXCEPT" ], outputMode="d" )
diff --git a/TestON/tests/SCPF/SCPFflowTp1g/SCPFflowTp1g.topo b/TestON/tests/SCPF/SCPFflowTp1g/SCPFflowTp1g.topo
index 2e274da..93e1e9d 100644
--- a/TestON/tests/SCPF/SCPFflowTp1g/SCPFflowTp1g.topo
+++ b/TestON/tests/SCPF/SCPFflowTp1g/SCPFflowTp1g.topo
@@ -1,177 +1,25 @@
 <TOPOLOGY>
-
     <COMPONENT>
 
-        <ONOSbench>
-            <host>localhost</host>
+        <ONOScell>
+            <host>localhost</host>  # ONOS "bench" machine
             <user>sdn</user>
             <password>rocks</password>
-            <type>OnosDriver</type>
+            <type>OnosClusterDriver</type>
             <connect_order>1</connect_order>
             <COMPONENTS>
-                <home>~/onos</home>
-                <nodes>7</nodes> 
-                <prompt></prompt>
-            </COMPONENTS>
-        </ONOSbench>
-
-        <ONOScli1>
-            <host>localhost</host>
-            <user>sdn</user>
-            <password>rocks</password>
-            <type>OnosCliDriver</type>
-            <connect_order>2</connect_order>
-            <COMPONENTS>
+                <cluster_name></cluster_name>  # Used as a prefix for cluster components. Defaults to 'ONOS'
+                <diff_clihost></diff_clihost>  # if it has different host other than localhost for CLI. True or empty. OC# will be used if True.
                 <karaf_username></karaf_username>
                 <karaf_password></karaf_password>
-                <prompt></prompt>
+                <web_user></web_user>
+                <web_pass></web_pass>
+                <rest_port></rest_port>
+                <prompt></prompt>  # TODO: we technically need a few of these, one per component
+                <onos_home></onos_home>  # defines where onos home is
+                <nodes> 7 </nodes>  # number of nodes in the cluster
             </COMPONENTS>
-        </ONOScli1>
-
-        <ONOScli2>
-            <host>localhost</host>
-            <user>sdn</user>
-            <password>rocks</password>
-            <type>OnosCliDriver</type>
-            <connect_order>3</connect_order>
-            <COMPONENTS>
-                <prompt></prompt>
-            </COMPONENTS>
-        </ONOScli2>
-
-        <ONOScli3>
-            <host>localhost</host>
-            <user>sdn</user>
-            <password>rocks</password>
-            <type>OnosCliDriver</type>
-            <connect_order>4</connect_order>
-            <COMPONENTS>
-                <prompt></prompt>
-            </COMPONENTS>
-        </ONOScli3>
-
-        <ONOScli4>
-            <host>localhost</host>
-            <user>sdn</user>
-            <password>rocks</password>
-            <type>OnosCliDriver</type>
-            <connect_order>5</connect_order>
-            <COMPONENTS>
-                <prompt></prompt>
-            </COMPONENTS>
-        </ONOScli4>
-
-        <ONOScli5>
-            <host>localhost</host>
-            <user>sdn</user>
-            <password>rocks</password>
-            <type>OnosCliDriver</type>
-            <connect_order>6</connect_order>
-            <COMPONENTS>
-                <prompt></prompt>
-            </COMPONENTS>
-        </ONOScli5>
-
-        <ONOScli6>
-            <host>localhost</host>
-            <user>sdn</user>
-            <password>rocks</password>
-            <type>OnosCliDriver</type>
-            <connect_order>7</connect_order>
-            <COMPONENTS>
-                <prompt></prompt>
-            </COMPONENTS>
-        </ONOScli6>
-
-        <ONOScli7>
-            <host>localhost</host>
-            <user>sdn</user>
-            <password>rocks</password>
-            <type>OnosCliDriver</type>
-            <connect_order>8</connect_order>
-            <COMPONENTS>
-                <prompt></prompt>
-            </COMPONENTS>
-        </ONOScli7>
-
-        <ONOS1>
-            <host>OC1</host>
-            <user>sdn</user>
-            <password>rocks</password>
-            <type>OnosDriver</type>
-            <connect_order>9</connect_order>
-            <COMPONENTS>
-                <prompt></prompt>
-            </COMPONENTS>
-        </ONOS1>
-
-        <ONOS2>
-            <host>OC2</host>
-            <user>sdn</user>
-            <password>rocks</password>
-            <type>OnosDriver</type>
-            <connect_order>10</connect_order>
-            <COMPONENTS>
-                <prompt></prompt>
-            </COMPONENTS>
-        </ONOS2>
-
-        <ONOS3>
-            <host>OC3</host>
-            <user>sdn</user>
-            <password>rocks</password>
-            <type>OnosDriver</type>
-            <connect_order>11</connect_order>
-            <COMPONENTS>
-                <prompt></prompt>
-            </COMPONENTS>
-        </ONOS3>
-
-        <ONOS4>
-            <host>OC4</host>
-            <user>sdn</user>
-            <password>rocks</password>
-            <type>OnosDriver</type>
-            <connect_order>12</connect_order>
-            <COMPONENTS>
-                <prompt></prompt>
-            </COMPONENTS>
-        </ONOS4>
-    
-        <ONOS5>
-            <host>OC5</host>
-            <user>sdn</user>
-            <password>rocks</password>
-            <type>OnosDriver</type>
-            <connect_order>13</connect_order>
-            <COMPONENTS>
-                <prompt></prompt>
-            </COMPONENTS>
-        </ONOS5>
-
-        <ONOS6>
-            <host>OC6</host>
-            <user>sdn</user>
-            <password>rocks</password>
-            <type>OnosDriver</type>
-            <connect_order>14</connect_order>
-            <COMPONENTS>
-                <prompt></prompt>
-            </COMPONENTS>
-        </ONOS6>
-
-        <ONOS7>
-            <host>OC7</host>
-            <user>sdn</user>
-            <password>rocks</password>
-            <type>OnosDriver</type>
-            <connect_order>15</connect_order>
-            <COMPONENTS>
-                <prompt></prompt>
-            </COMPONENTS>
-        </ONOS7>
+        </ONOScell>
 
     </COMPONENT>
-
-</TOPOLOGY>
- 
+</TOPOLOGY>
\ No newline at end of file
