diff --git a/TestON/tests/HA/HAclusterRestart/HAclusterRestart.py b/TestON/tests/HA/HAclusterRestart/HAclusterRestart.py
index eb7cf8a..da20e97 100644
--- a/TestON/tests/HA/HAclusterRestart/HAclusterRestart.py
+++ b/TestON/tests/HA/HAclusterRestart/HAclusterRestart.py
@@ -158,7 +158,7 @@
         for ctrl in main.Cluster.active():
             main.log.debug( "Checking logs for errors on " + ctrl.name + ":" )
             main.log.warn( main.ONOSbench.checkLogs( ctrl.ipAddress ) )
-
+        killTime = time.time()
         main.testSetUp.killingAllOnos( main.Cluster, True, False )
 
         main.testSetUp.checkOnosService( main.Cluster )
diff --git a/TestON/tests/SCPF/SCPFintentEventTp/SCPFintentEventTp.py b/TestON/tests/SCPF/SCPFintentEventTp/SCPFintentEventTp.py
index 3599806..70fcfb0 100644
--- a/TestON/tests/SCPF/SCPFintentEventTp/SCPFintentEventTp.py
+++ b/TestON/tests/SCPF/SCPFintentEventTp/SCPFintentEventTp.py
@@ -113,9 +113,9 @@
         main.Cluster.active( 0 ).CLI.setCfg( main.nullProviderCfg, "topoShape linear" )
         main.Cluster.active( 0 ).CLI.setCfg( main.nullProviderCfg, "enabled true" )
         if main.flowObj:
-            main.Cluster.active( 0 ).CLI.setCfg( main.intentConfigRegiCfg(),
+            main.Cluster.active( 0 ).CLI.setCfg( main.intentConfigRegiCfg,
                                                  "useFlowObjectives", value="true" )
-            main.Cluster.active( 0 ).CLI.setCfg( main.intentConfigRegiCfg(),
+            main.Cluster.active( 0 ).CLI.setCfg( main.intentConfigRegiCfg,
                                                  "defaultFlowObjectiveCompiler",
                                                  value=main.linkCollectionIntentCfg )
         time.sleep( main.startUpSleep )
diff --git a/TestON/tests/USECASE/SegmentRouting/dependencies/Testcaselib.py b/TestON/tests/USECASE/SegmentRouting/dependencies/Testcaselib.py
index 38dbaf6..9c73c0c 100755
--- a/TestON/tests/USECASE/SegmentRouting/dependencies/Testcaselib.py
+++ b/TestON/tests/USECASE/SegmentRouting/dependencies/Testcaselib.py
@@ -101,7 +101,7 @@
         main.dynamicHosts = [ 'in1', 'out1' ]
         main.testSetUp.createApplyCell( main.Cluster, newCell=True, cellName=main.cellName,
                                         Mininet=main.Mininet1, useSSH=Testcaselib.useSSH,
-                                        ip=main.Cluster.getIps() )
+                                        ips=main.Cluster.getIps() )
         # kill off all onos processes
         main.log.info( "Safety check, killing all ONOS processes" +
                        " before initiating environment setup" )
diff --git a/TestON/tests/USECASE/VPLS/dependencies/vpls.py b/TestON/tests/USECASE/VPLS/dependencies/vpls.py
index 34fffbb..47ffe78 100644
--- a/TestON/tests/USECASE/VPLS/dependencies/vpls.py
+++ b/TestON/tests/USECASE/VPLS/dependencies/vpls.py
@@ -69,14 +69,14 @@
 
     # Variables
     app = main.params[ 'vpls' ][ 'name' ]
-    pprint = main.ONOSrest1.pprint
+    pprint = main.Cluster.active( 0 ).REST.pprint
     SLEEP = int( main.params[ 'SLEEP' ][ 'netcfg' ] )
 
     main.step( "Check network configurations for vpls application" )
     clusterResult = True
-    for node in main.RESTs:
+    for ctrl in main.Cluster.active():
         result = False
-        getVPLS = utilities.retry( f=node.getNetCfg,
+        getVPLS = utilities.retry( f=ctrl.REST.getNetCfg,
                                    retValue=False,
                                    kwargs={"subjectClass":"apps", "subjectKey":app},
                                    sleep=SLEEP )
@@ -98,10 +98,10 @@
 
     main.step( "Check vpls app configurations" )
     clusterResult = True
-    for node in main.CLIs:
+    for ctrl in main.Cluster.active():
         result = False
         #TODO Read from vpls show and match to pushed json
-        vpls = node.parseVplsShow()
+        vpls = ctrl.CLI.parseVplsShow()
         parsedVpls = pprint( sanitizeConfig( vpls ) )
         sentVpls = pprint( sanitizeConfig( main.vplsConfig ) )
         result = parsedVpls == sentVpls
@@ -155,7 +155,7 @@
 
 def checkIntentState( main , bl=[] ):
     # Print the intent states
-    intents = main.CLIs[ 0 ].intents()
+    intents = main.Cluster.active( 0 ).CLI.intents()
     count = 0
     while count <= 5:
         installedCheck = True
@@ -227,8 +227,8 @@
 def compareApps( main ):
     result = True
     first = None
-    for cli in main.CLIs:
-        currentApps = cli.apps( summary=True, active=True )
+    for ctrl in main.Cluster.active():
+        currentApps = ctrl.CLI.apps( summary=True, active=True )
         if not result:
             first = currentApps
         else:
