diff --git a/TestON/tests/TopoConvNext/TopoConvNext.params b/TestON/tests/TopoConvNext/TopoConvNext.params
index 0003412..e6f1d93 100644
--- a/TestON/tests/TopoConvNext/TopoConvNext.params
+++ b/TestON/tests/TopoConvNext/TopoConvNext.params
@@ -1,5 +1,5 @@
 <PARAMS>
-    <testcases>1,2,3,2</testcases>
+    <testcases>1,2,3,2,3,2</testcases>
 
     <ENV>
         <cellName>topo_conv_test</cellName>
@@ -42,10 +42,10 @@
         <onosLogFile>/opt/onos/log/karaf*</onosLogFile>
 
         #Number of times to iterate each case
-        <numIter>1</numIter>
+        <numIter>5</numIter>
         <numSwitch>100</numSwitch>
         #Number of iterations to ignore initially
-        <iterIgnore>2</iterIgnore>
+        <iterIgnore>0</iterIgnore>
 
         <swDisc100Threshold>0,100000</swDisc100Threshold>
     </TEST>
diff --git a/TestON/tests/TopoConvNext/TopoConvNext.py b/TestON/tests/TopoConvNext/TopoConvNext.py
index 9092a08..cdf733f 100644
--- a/TestON/tests/TopoConvNext/TopoConvNext.py
+++ b/TestON/tests/TopoConvNext/TopoConvNext.py
@@ -3,6 +3,10 @@
 #Topology Convergence scale-out test for ONOS-next
 #NOTE: This test supports up to 7 nodes scale-out scenario
 #
+#NOTE: Ensure that you have 'tablet.json' file 
+#      in the onos/tools/package/config directory
+#NOTE: You must start this test initially with 3 nodes
+#
 #andrew@onlab.us
 
 import time
@@ -23,7 +27,7 @@
         #******
         #Global cluster count for scale-out purposes
         global cluster_count 
-        cluster_count = 1 
+        cluster_count = 3 
         #******
         cell_name = main.params['ENV']['cellName']
 
@@ -41,12 +45,25 @@
         BENCH_ip = main.params['BENCH']['ip']
 
         main.case("Setting up test environment")
+        main.log.info("Uninstalling previous instances")
+        main.ONOSbench.onos_uninstall(node_ip = ONOS1_ip)
+        main.ONOSbench.onos_uninstall(node_ip = ONOS2_ip)
+        main.ONOSbench.onos_uninstall(node_ip = ONOS3_ip)
+        main.ONOSbench.onos_uninstall(node_ip = ONOS4_ip)
+        main.ONOSbench.onos_uninstall(node_ip = ONOS5_ip)
+        main.ONOSbench.onos_uninstall(node_ip = ONOS6_ip)
+        main.ONOSbench.onos_uninstall(node_ip = ONOS7_ip)
+      
+        main.case("Removing raft logs")
+        main.ONOSbench.onos_remove_raft_logs()
+
         main.log.report("Setting up test environment")
 
         main.step("Creating cell file")
         cell_file_result = main.ONOSbench.create_cell_file(
                 BENCH_ip, cell_name, MN1_ip, 
-                "onos-core,onos-app-metrics", ONOS1_ip)
+                "onos-core,onos-app-metrics", 
+                ONOS1_ip, ONOS2_ip, ONOS3_ip)
 
         main.step("Applying cell file to environment")
         cell_apply_result = main.ONOSbench.set_cell(cell_name)
@@ -70,10 +87,6 @@
         main.ONOS1cli.set_cell(cell_name)
         main.ONOS2cli.set_cell(cell_name)
         main.ONOS3cli.set_cell(cell_name)
-        main.ONOS4cli.set_cell(cell_name)
-        main.ONOS5cli.set_cell(cell_name)
-        main.ONOS6cli.set_cell(cell_name)
-        main.ONOS7cli.set_cell(cell_name)
     
         main.step("Creating ONOS package")
         package_result = main.ONOSbench.onos_package()
@@ -81,11 +94,15 @@
         #Start test with single node only
         main.step("Installing ONOS package")
         install1_result = main.ONOSbench.onos_install(node=ONOS1_ip)
+        install2_result = main.ONOSbench.onos_install(node=ONOS2_ip)
+        install3_result = main.ONOSbench.onos_install(node=ONOS3_ip)
 
         time.sleep(10)
 
         main.step("Start onos cli")
         cli1 = main.ONOS1cli.start_onos_cli(ONOS1_ip)
+        cli2 = main.ONOS2cli.start_onos_cli(ONOS2_ip)
+        cli3 = main.ONOS3cli.start_onos_cli(ONOS3_ip)
 
         main.step("Enable metrics feature")
         #main.ONOS1cli.feature_install("onos-app-metrics")
@@ -94,7 +111,8 @@
                 actual= cell_file_result and cell_apply_result and\
                         verify_cell_result and checkout_result and\
                         pull_result and mvn_result and\
-                        install1_result,
+                        install1_result and install2_result and\
+                        install3_result,
                 onpass="Test Environment setup successful",
                 onfail="Failed to setup test environment")
     
@@ -151,6 +169,7 @@
 
         assertion = main.TRUE
         sw_discovery_lat_list = []
+        syn_ack_timestamp_list = []
 
         main.case(str(num_sw)+" switch per "+str(cluster_count)+
                 " nodes convergence latency")
@@ -228,6 +247,32 @@
 
             main.log.info("Please wait for switch connection to timeout")
             time.sleep(60)
+            if cluster_count >= 3:
+                time.sleep(60)
+            if cluster_count >= 5:
+                time.sleep(30)
+            if cluster_count >= 6:
+                time.sleep(30)
+
+            if cluster_count >= 3:
+                main.ONOS1.tshark_grep("SYN, ACK",
+                        "/tmp/syn_ack_onos1_iter"+str(i)+".txt")
+                main.ONOS2.tshark_grep("SYN, ACK",
+                        "/tmp/syn_ack_onos2_iter"+str(i)+".txt")
+                main.ONOS3.tshark_grep("SYN, ACK",
+                        "/tmp/syn_ack_onos3_iter"+str(i)+".txt")
+            if cluster_count >= 4:
+                main.ONOS4.tshark_grep("SYN, ACK",
+                        "/tmp/syn_ack_onos4_iter"+str(i)+".txt")
+            if cluster_count >= 5:
+                main.ONOS5.tshark_grep("SYN, ACK",
+                        "/tmp/syn_ack_onos5_iter"+str(i)+".txt")
+            if cluster_count >= 6:
+                main.ONOS6.tshark_grep("SYN, ACK",
+                        "/tmp/syn_ack_onos6_iter"+str(i)+".txt")
+            if cluster_count == 7:
+                main.ONOS7.tshark_grep("SYN, ACK",
+                        "/tmp/syn_ack_onos7_iter"+str(i)+".txt")
 
             main.step("Flushing iptables and obtaining t0")
             t0_system = time.time()*1000
@@ -393,7 +438,8 @@
                 if cluster_count == 2:
                     if onos1_dev and onos2_dev:
                         main.log.info("All devices have been discovered"+
-                            " on all ONOS instances")
+                            " on all "+str(cluster_count)+
+                            " ONOS instances")
                         json_str_metrics_1 =\
                             main.ONOS1cli.topology_events_metrics()
                         json_str_metrics_2 =\
@@ -429,7 +475,14 @@
                 if cluster_count == 3:
                     if onos1_dev and onos2_dev and onos3_dev:
                         main.log.info("All devices have been discovered"+
-                            " on all ONOS instances")
+                            " on all "+str(cluster_count)+
+                            " ONOS instances")
+                        
+                        #TODO: Investigate this sleep
+                        #      added to 'pad' the results with 
+                        #      plenty of time to 'catch up'
+                        time.sleep(20)
+
                         json_str_metrics_1 =\
                             main.ONOS1cli.topology_events_metrics()
                         json_str_metrics_2 =\
@@ -530,6 +583,12 @@
                        onos4_dev and onos5_dev:
                         main.log.info("All devices have been discovered"+
                             " on all ONOS instances")
+                        
+                        #TODO: Investigate this sleep
+                        #      added to 'pad' the results with 
+                        #      plenty of time to 'catch up'
+                        time.sleep(20)
+                        
                         json_str_metrics_1 =\
                             main.ONOS1cli.topology_events_metrics()
                         json_str_metrics_2 =\
@@ -663,6 +722,12 @@
                        onos7_dev:
                         main.log.info("All devices have been discovered"+
                             " on all ONOS instances")
+                        
+                        #TODO: Investigate this sleep
+                        #      added to 'pad' the results with 
+                        #      plenty of time to 'catch up'
+                        time.sleep(20)
+                        
                         json_str_metrics_1 =\
                             main.ONOS1cli.topology_events_metrics()
                         json_str_metrics_2 =\
@@ -740,6 +805,76 @@
                 counter_loop += 1
                 time.sleep(3)
                 #END WHILE LOOP            
+            
+            main.ONOS1.tshark_stop()
+
+            if cluster_count >= 3:
+                main.ONOS2.tshark_stop() 
+                main.ONOS3.tshark_stop()
+                os.system("scp "+ONOS_user+"@"+ONOS1_ip+":"+
+                    "/tmp/syn_ack_onos1_iter"+str(i)+".txt")
+                os.system("scp "+ONOS_user+"@"+ONOS2_ip+":"+
+                    "/tmp/syn_ack_onos2_iter"+str(i)+".txt")
+                os.system("scp "+ONOS_user+"@"+ONOS3_ip+":"+
+                    "/tmp/syn_ack_onos3_iter"+str(i)+".txt")
+           
+                #Read each of the files and append all
+                #SYN / ACK timestamps to the list
+                with open("/tmp/syn_ack_onos1_iter"+str(i)) as\
+                     f_onos1:
+                    for line in f_onos1:
+                        line = line.split(" ")
+                        syn_ack_timestamp_list.append(line[1])
+                with open("/tmp/syn_ack_onos2_iter"+str(i)) as\
+                     f_onos2:
+                    for line in f_onos2:
+                        line = line.split(" ")
+                        syn_ack_timestamp_list.append(line[1])
+                with open("/tmp/syn_ack_onos3_iter"+str(i)) as\
+                     f_onos3:
+                    for line in f_onos3:
+                        line = line.split(" ")
+                        syn_ack_timestamp_list.append(line[1])
+            if cluster_count >= 4:
+                main.ONOS4.tshark_stop() 
+                os.system("scp "+ONOS_user+"@"+ONOS4_ip+":"+
+                    "/tmp/syn_ack_onos4_iter"+str(i)+".txt")
+                with open("/tmp/syn_ack_onos4_iter"+str(i)) as\
+                     f_onos4:
+                    for line in f_onos4:
+                        line = line.split(" ")
+                        syn_ack_timestamp_list.append(line[1])
+            if cluster_count >= 5:
+                main.ONOS5.tshark_stop()
+                os.system("scp "+ONOS_user+"@"+ONOS5_ip+":"+
+                    "/tmp/syn_ack_onos5_iter"+str(i)+".txt")
+                with open("/tmp/syn_ack_onos5_iter"+str(i)) as\
+                     f_onos5:
+                    for line in f_onos5:
+                        line = line.split(" ")
+                        syn_ack_timestamp_list.append(line[1])
+            if cluster_count >= 6:
+                main.ONOS6.tshark_stop()
+                os.system("scp "+ONOS_user+"@"+ONOS6_ip+":"+
+                    "/tmp/syn_ack_onos6_iter"+str(i)+".txt")
+                with open("/tmp/syn_ack_onos6_iter"+str(i)) as\
+                     f_onos6:
+                    for line in f_onos6:
+                        line = line.split(" ")
+                        syn_ack_timestamp_list.append(line[1])
+            if cluster_count == 7:
+                main.ONOS7.tshark_stop()
+                os.system("scp "+ONOS_user+"@"+ONOS7_ip+":"+
+                    "/tmp/syn_ack_onos7_iter"+str(i)+".txt")
+                with open("/tmp/syn_ack_onos7_iter"+str(i)) as\
+                     f_onos7:
+                    for line in f_onos7:
+                        line = line.split(" ")
+                        syn_ack_timestamp_list.append(line[1])
+          
+            #Sort the list by timestamp
+            syn_ack_timestamp_list = sorted(syn_ack_timestamp_list)
+
             #END ITERATION LOOP
         #REPORT HERE 
 
@@ -772,16 +907,6 @@
         import requests
         import json
        
-        ONOS_ip_list = []
-        ONOS_ip_list.append('0') #Append 0 for index 0
-        ONOS_ip_list.append(main.params['CTRL']['ip1'])
-        ONOS_ip_list.append(main.params['CTRL']['ip2'])
-        ONOS_ip_list.append(main.params['CTRL']['ip3'])
-        ONOS_ip_list.append(main.params['CTRL']['ip4'])
-        ONOS_ip_list.append(main.params['CTRL']['ip5'])
-        ONOS_ip_list.append(main.params['CTRL']['ip6'])
-        ONOS_ip_list.append(main.params['CTRL']['ip7'])
-        
         ONOS1_ip = main.params['CTRL']['ip1']
         ONOS2_ip = main.params['CTRL']['ip2']
         ONOS3_ip = main.params['CTRL']['ip3']
@@ -795,240 +920,79 @@
         MN1_ip = main.params['MN']['ip1']
         BENCH_ip = main.params['BENCH']['ip']
 
-        main.step("Creating cell file")
-        cell_file_result = main.ONOSbench.create_cell_file(
-                BENCH_ip, cell_name, MN1_ip, "onos-core",
-                ONOS1_ip, ONOS2_ip, ONOS3_ip, ONOS4_ip,
-                ONOS5_ip, ONOS6_ip, ONOS7_ip)
-
-        main.step("Applying cell file to environment")
-        cell_apply_result = main.ONOSbench.set_cell(cell_name)
-        verify_cell_result = main.ONOSbench.verify_cell()
-
-
-        #NOTE:We start with cluster_count at 1. The first 
+        #NOTE:We start with cluster_count at 3. The first 
         #case already initialized ONOS1. Increase the
-        #cluster count and start from 2.
+        #cluster count and start from 3.
         #You can optionally change the increment to
-        #test steps of node sizes, such as 1,3,5,7
+        #test steps of node sizes, such as 3,5,7
         
         global cluster_count
         cluster_count += 2 
-       
+      
+        install_result = main.FALSE
         #Supports up to 7 node configuration
         #TODO: Cleanup this ridiculous repetitive code 
-        if cluster_count == 2:
-            main.log.info("Closing previous ONOS connections")
-            main.ONOS1cli.logout()
-            main.log.info("Creating new cell file with "+
-                     str(node)+" nodes")
-            main.ONOSbench.create_cell_file(BENCH_ip, cell_name,
-                MN1_ip, "onos-core", ONOS1_ip, ONOS2_ip)
-            main.log.info("Applying cell file to environment")
-            main.ONOSbench.set_cell(cell_name)
-            main.ONOS1cli.set_cell(cell_name)
-            main.ONOS2cli.set_cell(cell_name)
-            main.log.info("Packaging new ONOS")
-            main.ONOSbench.onos_package()
-            main.log.info("Installing ONOS")
-            main.ONOSbench.onos_install(node=ONOS1_ip)
-            main.ONOSbench.onos_install(node=ONOS2_ip)
+        if cluster_count == 4:
+            main.log.info("Installing ONOS on node 4")
+            install_result = \
+                main.ONOSbench.onos_install(node=ONOS4_ip)
             main.log.info("Starting CLI")
-            main.ONOS1cli.start_onos_cli(ONOS1_ip)
-            main.ONOS2cli.start_onos_cli(ONOS2_ip)
-            main.log.info("Installing metrics feature")
-            main.ONOS1cli.feature_install("onos-app-metrics")
-            main.ONOS2cli.feature_install("onos-app-metrics")
-        elif cluster_count == 3:
-            main.log.info("Closing previous ONOS connections")
-            main.ONOS1cli.logout()
-            main.ONOS2cli.logout()
-            main.log.info("Creating new cell file with "+
-                    str(node)+" nodes")
-            main.ONOSbench.create_cell_file(BENCH_ip, cell_name,
-                MN1_ip, "onos-core", ONOS1_ip, ONOS2_ip, ONOS3_ip)
-            main.log.info("Applying cell file to environment")
-            main.ONOSbench.set_cell(cell_name)
-            main.ONOS1cli.set_cell(cell_name)
-            main.ONOS2cli.set_cell(cell_name)
-            main.ONOS3cli.set_cell(cell_name)
-            main.log.info("Packaging new ONOS")
-            main.ONOSbench.onos_package()
-            main.log.info("Installing ONOS")
-            main.ONOSbench.onos_install(node=ONOS1_ip)
-            main.ONOSbench.onos_install(node=ONOS2_ip)
-            main.ONOSbench.onos_install(node=ONOS3_ip)
-            main.log.info("Starting CLI")
-            main.ONOS1cli.start_onos_cli(ONOS1_ip)
-            main.ONOS2cli.start_onos_cli(ONOS2_ip)
-            main.ONOS3cli.start_onos_cli(ONOS3_ip)
-            main.log.info("Installing metrics feature")
-            main.ONOS1cli.feature_install("onos-app-metrics")
-            main.ONOS2cli.feature_install("onos-app-metrics")
-            main.ONOS3cli.feature_install("onos-app-metrics")
-        elif cluster_count == 4:
-            main.log.info("Closing previous ONOS connections")
-            main.ONOS1cli.logout()
-            main.ONOS2cli.logout()
-            main.ONOS3cli.logout()
-            main.log.info("Creating new cell file with "+
-                    str(node)+" nodes")
-            main.ONOSbench.create_cell_file(BENCH_ip, cell_name,
-                MN1_ip, "onos-core", ONOS1_ip, ONOS2_ip, ONOS3_ip,
-                ONOS4_ip)
-            main.log.info("Applying cell file to environment")
-            main.ONOSbench.set_cell(cell_name)
-            main.ONOS1cli.set_cell(cell_name)
-            main.ONOS2cli.set_cell(cell_name)
-            main.ONOS3cli.set_cell(cell_name)
-            main.ONOS4cli.set_cell(cell_name)
-            main.log.info("Packaging new ONOS")
-            main.ONOSbench.onos_package()
-            main.log.info("Installing ONOS")
-            main.ONOSbench.onos_install(node=ONOS1_ip)
-            main.ONOSbench.onos_install(node=ONOS2_ip)
-            main.ONOSbench.onos_install(node=ONOS3_ip)
-            main.ONOSbench.onos_install(node=ONOS4_ip)
-            main.log.info("Starting CLI")
-            main.ONOS1cli.start_onos_cli(ONOS1_ip)
-            main.ONOS2cli.start_onos_cli(ONOS2_ip)
-            main.ONOS3cli.start_onos_cli(ONOS3_ip)
             main.ONOS4cli.start_onos_cli(ONOS4_ip)
-            main.log.info("Installing metrics feature")
-            main.ONOS1cli.feature_install("onos-app-metrics")
-            main.ONOS2cli.feature_install("onos-app-metrics")
-            main.ONOS3cli.feature_install("onos-app-metrics")
-            main.ONOS4cli.feature_install("onos-app-metrics")
+            main.ONOS1cli.add_node(ONOS4_ip, ONOS4_ip)
+        
         elif cluster_count == 5:
-            main.log.info("Closing previous ONOS connections")
-            main.ONOS1cli.logout()
-            main.ONOS2cli.logout()
-            main.ONOS3cli.logout()
-            main.ONOS4cli.logout()
-            main.log.info("Creating new cell file with "+
-                    str(node)+" nodes")
-            main.ONOSbench.create_cell_file(BENCH_ip, cell_name,
-                MN1_ip, "onos-core", ONOS1_ip, ONOS2_ip, ONOS3_ip,
-                ONOS4_ip, ONOS5_ip)
-            main.log.info("Applying cell file to environment")
-            main.ONOSbench.set_cell(cell_name)
-            main.ONOS1cli.set_cell(cell_name)
-            main.ONOS2cli.set_cell(cell_name)
-            main.ONOS3cli.set_cell(cell_name)
-            main.ONOS4cli.set_cell(cell_name)
-            main.ONOS5cli.set_cell(cell_name)
-            main.log.info("Packaging new ONOS")
-            main.ONOSbench.onos_package()
-            main.log.info("Installing ONOS")
-            main.ONOSbench.onos_install(node=ONOS1_ip)
-            main.ONOSbench.onos_install(node=ONOS2_ip)
-            main.ONOSbench.onos_install(node=ONOS3_ip)
-            main.ONOSbench.onos_install(node=ONOS4_ip)
-            main.ONOSbench.onos_install(node=ONOS5_ip)
+            main.log.info("Installing ONOS on node 5")
+            install_result1 = \
+                main.ONOSbench.onos_install(options="",node=ONOS4_ip)
+            install_result2 = \
+                main.ONOSbench.onos_install(node=ONOS5_ip)
             main.log.info("Starting CLI")
-            main.ONOS1cli.start_onos_cli(ONOS1_ip)
-            main.ONOS2cli.start_onos_cli(ONOS2_ip)
-            main.ONOS3cli.start_onos_cli(ONOS3_ip)
             main.ONOS4cli.start_onos_cli(ONOS4_ip)
             main.ONOS5cli.start_onos_cli(ONOS5_ip)
-            main.log.info("Installing metrics feature")
-            main.ONOS1cli.feature_install("onos-app-metrics")
-            main.ONOS2cli.feature_install("onos-app-metrics")
-            main.ONOS3cli.feature_install("onos-app-metrics")
-            main.ONOS4cli.feature_install("onos-app-metrics")
-            main.ONOS5cli.feature_install("onos-app-metrics")
+            main.ONOS1cli.add_node(ONOS4_ip, ONOS4_ip)
+            main.ONOS1cli.add_node(ONOS5_ip, ONOS5_ip)
+            install_result = install_result1 and install_result2
+
         elif cluster_count == 6:
-            main.log.info("Closing previous ONOS connections")
-            main.ONOS1cli.logout()
-            main.ONOS2cli.logout()
-            main.ONOS3cli.logout()
-            main.ONOS4cli.logout()
-            main.ONOS5cli.logout()
-            main.log.info("Creating new cell file with "+
-                    str(node)+" nodes")
-            main.ONOSbench.create_cell_file(BENCH_ip, cell_name,
-                MN1_ip, "onos-core", ONOS1_ip, ONOS2_ip, ONOS3_ip,
-                ONOS4_ip, ONOS5_ip, ONOS6_ip)
-            main.log.info("Applying cell file to environment")
-            main.ONOSbench.set_cell(cell_name)
-            main.ONOS1cli.set_cell(cell_name)
-            main.ONOS2cli.set_cell(cell_name)
-            main.ONOS3cli.set_cell(cell_name)
-            main.ONOS4cli.set_cell(cell_name)
-            main.ONOS5cli.set_cell(cell_name)
-            main.ONOS6cli.set_cell(cell_name)
-            main.log.info("Packaging new ONOS")
-            main.ONOSbench.onos_package()
-            main.log.info("Installing ONOS")
-            main.ONOSbench.onos_install(node=ONOS1_ip)
-            main.ONOSbench.onos_install(node=ONOS2_ip)
-            main.ONOSbench.onos_install(node=ONOS3_ip)
-            main.ONOSbench.onos_install(node=ONOS4_ip)
-            main.ONOSbench.onos_install(node=ONOS5_ip)
-            main.ONOSbench.onos_install(node=ONOS6_ip)
+            main.log.info("Installing ONOS on node 6")
+            install_result1 = \
+                main.ONOSbench.onos_install(options="",node=ONOS4_ip)
+            install_result2 = \
+                main.ONOSbench.onos_install(options="",node=ONOS5_ip)
+            install_result3 = \
+                main.ONOSbench.onos_install(node=ONOS6_ip)
             main.log.info("Starting CLI")
-            main.ONOS1cli.start_onos_cli(ONOS1_ip)
-            main.ONOS2cli.start_onos_cli(ONOS2_ip)
-            main.ONOS3cli.start_onos_cli(ONOS3_ip)
             main.ONOS4cli.start_onos_cli(ONOS4_ip)
             main.ONOS5cli.start_onos_cli(ONOS5_ip)
             main.ONOS6cli.start_onos_cli(ONOS6_ip)
-            main.log.info("Installing metrics feature")
-            main.ONOS1cli.feature_install("onos-app-metrics")
-            main.ONOS2cli.feature_install("onos-app-metrics")
-            main.ONOS3cli.feature_install("onos-app-metrics")
-            main.ONOS4cli.feature_install("onos-app-metrics")
-            main.ONOS5cli.feature_install("onos-app-metrics")
-            main.ONOS6cli.feature_install("onos-app-metrics")
+            main.ONOS1cli.add_node(ONOS4_ip, ONOS4_ip)
+            main.ONOS1cli.add_node(ONOS5_ip, ONOS5_ip)
+            main.ONOS1cli.add_node(ONOS6_ip, ONOS6_ip)
+            install_result = install_result1 and install_result2 and\
+                    install_result3
+
         elif cluster_count == 7:
-            main.log.info("Closing previous ONOS connections")
-            main.ONOS1cli.logout()
-            main.ONOS2cli.logout()
-            main.ONOS3cli.logout()
-            main.ONOS4cli.logout()
-            main.ONOS5cli.logout()
-            main.log.info("Creating new cell file with "+
-                    str(node)+" nodes")
-            main.ONOSbench.create_cell_file(BENCH_ip, cell_name,
-                MN1_ip, "onos-core", ONOS1_ip, ONOS2_ip, ONOS3_ip,
-                ONOS4_ip, ONOS5_ip, ONOS6_ip, ONOS7_ip)
-            main.log.info("Applying cell file to environment")
-            main.ONOSbench.set_cell(cell_name)
-            main.ONOS1cli.set_cell(cell_name)
-            main.ONOS2cli.set_cell(cell_name)
-            main.ONOS3cli.set_cell(cell_name)
-            main.ONOS4cli.set_cell(cell_name)
-            main.ONOS5cli.set_cell(cell_name)
-            main.ONOS6cli.set_cell(cell_name)
-            main.ONOS7cli.set_cell(cell_name)
-            main.log.info("Packaging new ONOS")
-            main.ONOSbench.onos_package()
-            main.log.info("Installing ONOS")
-            main.ONOSbench.onos_install(node=ONOS1_ip)
-            main.ONOSbench.onos_install(node=ONOS2_ip)
-            main.ONOSbench.onos_install(node=ONOS3_ip)
-            main.ONOSbench.onos_install(node=ONOS4_ip)
-            main.ONOSbench.onos_install(node=ONOS5_ip)
-            main.ONOSbench.onos_install(node=ONOS6_ip)
-            main.ONOSbench.onos_install(node=ONOS7_ip)
+            main.log.info("Installing ONOS on node 7")
+            install_result1 = \
+                main.ONOSbench.onos_install(options="",node=ONOS4_ip)
+            install_result2 = \
+                main.ONOSbench.onos_install(options="",node=ONOS5_ip)
+            install_result3 = \
+                main.ONOSbench.onos_install(options="",node=ONOS6_ip)
+            install_result4 = \
+                main.ONOSbench.onos_install(node=ONOS7_ip)
             main.log.info("Starting CLI")
-            main.ONOS1cli.start_onos_cli(ONOS1_ip)
-            main.ONOS2cli.start_onos_cli(ONOS2_ip)
-            main.ONOS3cli.start_onos_cli(ONOS3_ip)
             main.ONOS4cli.start_onos_cli(ONOS4_ip)
             main.ONOS5cli.start_onos_cli(ONOS5_ip)
             main.ONOS6cli.start_onos_cli(ONOS6_ip)
             main.ONOS7cli.start_onos_cli(ONOS7_ip) 
-            main.log.info("Installing metrics feature")
-            main.ONOS1cli.feature_install("onos-app-metrics")
-            main.ONOS2cli.feature_install("onos-app-metrics")
-            main.ONOS3cli.feature_install("onos-app-metrics")
-            main.ONOS4cli.feature_install("onos-app-metrics")
-            main.ONOS5cli.feature_install("onos-app-metrics")
-            main.ONOS6cli.feature_install("onos-app-metrics")
-            main.ONOS7cli.feature_install("onos-app-metrics")
+            main.ONOS1cli.add_node(ONOS4_ip, ONOS4_ip)
+            main.ONOS1cli.add_node(ONOS5_ip, ONOS5_ip)
+            main.ONOS1cli.add_node(ONOS6_ip, ONOS6_ip)
+            main.ONOS1cli.add_node(ONOS7_ip, ONOS7_ip)
 
-        install_result = main.TRUE
+            install_result = install_result1 and install_result2 and\
+                    install_result3 and install_result4
 
         time.sleep(5)
 
