diff --git a/TestON/tests/IntentsLoad/.IntentsLoad.py.swo b/TestON/tests/IntentsLoad/.IntentsLoad.py.swo
deleted file mode 100644
index fe9088a..0000000
--- a/TestON/tests/IntentsLoad/.IntentsLoad.py.swo
+++ /dev/null
Binary files differ
diff --git a/TestON/tests/IntentsLoad/IntentsLoad.params b/TestON/tests/IntentsLoad/IntentsLoad.params
deleted file mode 100644
index cac20df..0000000
--- a/TestON/tests/IntentsLoad/IntentsLoad.params
+++ /dev/null
@@ -1,49 +0,0 @@
-<PARAMS>
-
-    <testcases>1,3,2,4,2,5</testcases>
-
-    <ENV>
-    <cellName>cam_cells</cellName>
-    </ENV>
-
-    <SCALE>1</SCALE>
-
-    <GIT>
-        <autopull>off</autopull>
-        <checkout>master</checkout>
-    </GIT>
-
-    <CTRL>
-        <USER>admin</USER>
-        <ip1>10.128.5.51</ip1>
-        <port1>6633</port1>
-        <ip2>10.128.5.52</ip2>
-        <port2>6633</port2>
-        <ip3>10.128.5.53</ip3>
-        <port3>6633</port3>
-    </CTRL>
-
-    <MN>
-        <ip1>10.128.5.59</ip1>
-        <ip2>10.128.5.59</ip2>
-    </MN>
-
-    <BENCH>
-        <user>admin</user>
-        <ip1>10.128.5.55</ip1>
-    </BENCH>
-
-    <TEST>
-    <loadstart>curl --fail http://localhost:8181/onos/demo/intents/setup -H "Content-Type:application/json" -d '{"type" : "random"}'</loadstart>
-    <loadstop>curl --fail http://localhost:8181/onos/demo/intents/teardown</loadstop>
-    <arping>py [h.cmd("arping -c 1 -w 1 10.0.0.225") for h in net.hosts]</arping>
-    <metric1>intents-events-metrics|grep "Intent Installed Events"</metric1>
-    <duration>30</duration>
-    <log_interval>5</log_interval>
-    </TEST>
-
-    <JSON>
-        <intents_rate>intentInstalledRate</intents_rate>
-    </JSON>
-
-</PARAMS>
diff --git a/TestON/tests/IntentsLoad/IntentsLoad.py b/TestON/tests/IntentsLoad/IntentsLoad.py
deleted file mode 100644
index 9342596..0000000
--- a/TestON/tests/IntentsLoad/IntentsLoad.py
+++ /dev/null
@@ -1,379 +0,0 @@
-# ScaleOutTemplate --> IntentsLoad
-#
-# CASE1 starts number of nodes specified in param file
-#
-# cameron@onlab.us
-
-import sys
-import os
-
-
-class IntentsLoad:
-
-    def __init__( self ):
-        self.default = ''
-
-    def CASE1( self, main ):
-
-        global clusterCount
-        clusterCount = 1
-
-        checkoutBranch = main.params[ 'GIT' ][ 'checkout' ]
-        gitPull = main.params[ 'GIT' ][ 'autopull' ]
-        cellName = main.params[ 'ENV' ][ 'cellName' ]
-        BENCHIp = main.params[ 'BENCH' ][ 'ip1' ]
-        BENCHUser = main.params[ 'BENCH' ][ 'user' ]
-        ONOS1Ip = main.params[ 'CTRL' ][ 'ip1' ]
-        ONOS2Ip = main.params[ 'CTRL' ][ 'ip2' ]
-        ONOS3Ip = main.params[ 'CTRL' ][ 'ip3' ]
-        MN1Ip = main.params[ 'MN' ][ 'ip1' ]
-
-        main.log.step( "Cleaning Enviornment..." )
-        main.ONOSbench.onosUninstall( ONOS1Ip )
-        main.ONOSbench.onosUninstall( ONOS2Ip )
-        main.ONOSbench.onosUninstall( ONOS3Ip )
-
-        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" )
-
-        #mvnResult = main.ONOSbench.cleanInstall()
-
-        main.step( "Set cell for ONOS cli env" )
-        main.ONOS1cli.setCell( cellName )
-        main.ONOS2cli.setCell( cellName )
-        main.ONOS3cli.setCell( cellName )
-
-        main.step( "Creating ONOS package" )
-        packageResult = main.ONOSbench.onosPackage()  # no file or directory
-
-        main.step( "Installing ONOS package" )
-        install1Result = main.ONOSbench.onosInstall( node=ONOS1Ip )
-
-        cellName = main.params[ 'ENV' ][ 'cellName' ]
-        main.step( "Applying cell file to environment" )
-        cellApplyResult = main.ONOSbench.setCell( cellName )
-        main.step( "verify cells" )
-        verifyCellResult = main.ONOSbench.verifyCell()
-
-        main.step( "Set cell for ONOS cli env" )
-        main.ONOS1cli.setCell( cellName )
-
-        cli1 = main.ONOS1cli.startOnosCli( ONOS1Ip )
-
-    def CASE2( self, main ):
-        """
-        Increase number of nodes and initiate CLI
-        """
-        import time
-
-        global clusterCount
-
-        ONOS1Ip = main.params[ 'CTRL' ][ 'ip1' ]
-        ONOS2Ip = main.params[ 'CTRL' ][ 'ip2' ]
-        ONOS3Ip = main.params[ 'CTRL' ][ 'ip3' ]
-        #ONOS4Ip = main.params[ 'CTRL' ][ 'ip4' ]
-        #ONOS5Ip = main.params[ 'CTRL' ][ 'ip5' ]
-        #ONOS6Ip = main.params[ 'CTRL' ][ 'ip6' ]
-        #ONOS7Ip = main.params[ 'CTRL' ][ 'ip7' ]
-        cellName = main.params[ 'ENV' ][ 'cellName' ]
-        scale = int( main.params[ 'SCALE' ] )
-
-        # Cluster size increased everytime the case is defined
-        clusterCount += scale
-
-        main.log.report( "Increasing cluster size to " +
-                         str( clusterCount ) )
-        installResult = main.FALSE
-
-        if scale == 2:
-            if clusterCount == 3:
-                main.log.info( "Installing nodes 2 and 3" )
-                install2Result = main.ONOSbench.onosInstall( node=ONOS2Ip )
-                install3Result = main.ONOSbench.onosInstall( node=ONOS3Ip )
-                cli2 = main.ONOS2cli.startOnosCli( ONOS2Ip )
-                cli3 = main.ONOS3cli.startOnosCli( ONOS3Ip )
-              
-        if scale == 1:
-            if clusterCount == 2:
-                main.log.info( "Installing node 2" )
-                install2Result = main.ONOSbench.onosInstall( node=ONOS2Ip )
-                cli2 = main.ONOS2cli.startOnosCli( ONOS2Ip )
-
-            if clusterCount == 3:
-                main.log.info( "Installing node 3" )
-                install3Result = main.ONOSbench.onosInstall( node=ONOS3Ip )
-                cli3 = main.ONOS3cli.startOnosCli( ONOS3Ip )
-
-    def CASE3( self, main ):
-        import time
-        import json
-        import string
-
-        intentsRate = main.params[ 'JSON' ][ 'intents_rate' ]
-
-        defaultSwPort = main.params[ 'CTRL' ][ 'port1' ]
-
-        main.Mininet1.assignSwController(
-            sw="1",
-            ip1=ONOS1Ip,
-            port1=defaultSwPort )
-        main.Mininet1.assignSwController(
-            sw="2",
-            ip1=ONOS1Ip,
-            port1=defaultSwPort )
-        main.Mininet1.assignSwController(
-            sw="3",
-            ip1=ONOS1Ip,
-            port1=defaultSwPort )
-        main.Mininet1.assignSwController(
-            sw="4",
-            ip1=ONOS1Ip,
-            port1=defaultSwPort )
-        main.Mininet1.assignSwController(
-            sw="5",
-            ip1=ONOS1Ip,
-            port1=defaultSwPort )
-        main.Mininet1.assignSwController(
-            sw="6",
-            ip1=ONOS1Ip,
-            port1=defaultSwPort )
-        main.Mininet1.assignSwController(
-            sw="7",
-            ip1=ONOS1Ip,
-            port1=defaultSwPort )
-
-        mnArp = main.params[ 'TEST' ][ 'arping' ]
-        main.Mininet1.handle.sendline( mnArp )
-
-        generateLoad = main.params[ 'TEST' ][ 'loadstart' ]
-
-        main.ONOS1.handle.sendline( generateLoad )
-        main.ONOS1.handle.expect( "sdn" )
-        print( "before: ", main.ONOS1.handle.before )
-        print( "after: ", main.ONOS1.handle.after )
-
-        loadConfirm = main.ONOS1.handle.after
-        if loadConfirm == "{}":
-            main.log.info( "Load started" )
-
-        else:
-            main.log.error( "Load start failure" )
-            main.log.error( "expected '{}', got: " + str( loadConfirm ) )
-
-        devicesJsonStr = main.ONOS1cli.devices()
-        devicesJsonObj = json.loads( devicesJsonStr )
-
-        getMetric = main.params[ 'TEST' ][ 'metric1' ]
-        testDuration = main.params[ 'TEST' ][ 'duration' ]
-        stop = time.time() + float( testDuration )
-
-        main.log.info( "Starting test loop..." )
-        logInterval = main.params[ 'TEST' ][ 'log_interval' ]
-
-        while time.time() < stop:
-            time.sleep( float( logInterval ) )
-
-            intentsJsonStr1 = main.ONOS1cli.intentsEventsMetrics()
-            intentsJsonObj1 = json.loads( intentsJsonStr1 )
-            main.log.info( "Node 1 rate: " +
-                           str( intentsJsonObj1[ intentsRate ][ 'm1_rate' ] ) )
-            lastRate1 = intentsJsonObj1[ intentsRate ][ 'm1_rate' ]
-
-        stopLoad = main.params[ 'TEST' ][ 'loadstop' ]
-        main.ONOS1.handle.sendline( stopLoad )
-
-        msg = ( "Final rate on node 1: " + str( lastRate1 ) )
-        main.log.report( msg )
-
-        ############## Insert jenkins csv file setup #############
-
-    def CASE4( self, main ):  # 2 node scale
-        import time
-        import json
-        import string
-
-        intentsRate = main.params[ 'JSON' ][ 'intents_rate' ]
-
-        defaultSwPort = main.params[ 'CTRL' ][ 'port1' ]
-
-        main.Mininet1.assignSwController(
-            sw="1",
-            ip1=ONOS1Ip,
-            port1=defaultSwPort )
-        main.Mininet1.assignSwController(
-            sw="2",
-            ip1=ONOS2Ip,
-            port1=defaultSwPort )
-        main.Mininet1.assignSwController(
-            sw="3",
-            ip1=ONOS1Ip,
-            port1=defaultSwPort )
-        main.Mininet1.assignSwController(
-            sw="4",
-            ip1=ONOS2Ip,
-            port1=defaultSwPort )
-        main.Mininet1.assignSwController(
-            sw="5",
-            ip1=ONOS1Ip,
-            port1=defaultSwPort )
-        main.Mininet1.assignSwController(
-            sw="6",
-            ip1=ONOS2Ip,
-            port1=defaultSwPort )
-        main.Mininet1.assignSwController(
-            sw="7",
-            ip1=ONOS1Ip,
-            port1=defaultSwPort )
-
-        mnArp = main.params[ 'TEST' ][ 'arping' ]
-        main.Mininet1.handle.sendline( mnArp )
-
-        generateLoad = main.params[ 'TEST' ][ 'loadstart' ]
-
-        main.ONOS1.handle.sendline( generateLoad )
-        main.ONOS2.handle.sendline( generateLoad )
-
-        devicesJsonStr1 = main.ONOS1cli.devices()
-        devicesJsonObj1 = json.loads( devicesJsonStr1 )
-        devicesJsonStr2 = main.ONOS2cli.devices()
-        devicesJsonObj2 = json.loads( devicesJsonStr2 )
-
-        getMetric = main.params[ 'TEST' ][ 'metric1' ]
-        testDuration = main.params[ 'TEST' ][ 'duration' ]
-        stop = time.time() + float( testDuration )
-
-        main.log.info( "Starting test loop..." )
-        logInterval = main.params[ 'TEST' ][ 'log_interval' ]
-
-        while time.time() < stop:
-            time.sleep( float( logInterval ) )
-
-            intentsJsonStr1 = main.ONOS1cli.intentsEventsMetrics()
-            intentsJsonObj1 = json.loads( intentsJsonStr1 )
-            main.log.info( "Node 1 rate: " +
-                           str( intentsJsonObj1[ intentsRate ][ 'm1_rate' ] ) )
-            lastRate1 = intentsJsonObj1[ intentsRate ][ 'm1_rate' ]
-
-            intentsJsonStr2 = main.ONOS2cli.intentsEventsMetrics()
-            intentsJsonObj2 = json.loads( intentsJsonStr2 )
-            main.log.info( "Node 2 rate: " +
-                           str( intentsJsonObj2[ intentsRate ][ 'm1_rate' ] ) )
-            lastRate2 = intentsJsonObj2[ intentsRate ][ 'm1_rate' ]
-
-        stopLoad = main.params[ 'TEST' ][ 'loadstop' ]
-        main.ONOS1.handle.sendline( stopLoad )
-        main.ONOS2.handle.sendline( stopLoad )
-
-        msg = ( "Final rate on node 1: " + str( lastRate1 ) )
-        main.log.report( msg )
-
-        msg = ( "Final rate on node 2: " + str( lastRate2 ) )
-        main.log.report( msg )
-
-
-    
-    def CASE5( self, main ):  # 2 node scale
-        import time
-        import json
-        import string
-
-        intentsRate = main.params[ 'JSON' ][ 'intents_rate' ]
-
-        defaultSwPort = main.params[ 'CTRL' ][ 'port1' ]
-
-        main.Mininet1.assignSwController(
-            sw="1",
-            ip1=ONOS1Ip,
-            port1=defaultSwPort )
-        main.Mininet1.assignSwController(
-            sw="2",
-            ip1=ONOS2Ip,
-            port1=defaultSwPort )
-        main.Mininet1.assignSwController(
-            sw="3",
-            ip1=ONOS3Ip,
-            port1=defaultSwPort )
-        main.Mininet1.assignSwController(
-            sw="4",
-            ip1=ONOS1Ip,
-            port1=defaultSwPort )
-        main.Mininet1.assignSwController(
-            sw="5",
-            ip1=ONOS2Ip,
-            port1=defaultSwPort )
-        main.Mininet1.assignSwController(
-            sw="6",
-            ip1=ONOS3Ip,
-            port1=defaultSwPort )
-        main.Mininet1.assignSwController(
-            sw="7",
-            ip1=ONOS1Ip,
-            port1=defaultSwPort )
-
-        mnArp = main.params[ 'TEST' ][ 'arping' ]
-        main.Mininet1.handle.sendline( mnArp )
-
-        generateLoad = main.params[ 'TEST' ][ 'loadstart' ]
-
-        main.ONOS1.handle.sendline( generateLoad )
-        main.ONOS2.handle.sendline( generateLoad )
-        main.ONOS3.handle.sendline( generateLoad )        
-
-        devicesJsonStr1 = main.ONOS1cli.devices()
-        devicesJsonObj1 = json.loads( devicesJsonStr1 )
-        devicesJsonStr2 = main.ONOS2cli.devices()
-        devicesJsonObj2 = json.loads( devicesJsonStr2 )
-        devicesJsonStr3 = main.ONOS3cli.devices()
-        devicesJsonObj3 = json.loads( devicesJsonStr3 )
-
-        getMetric = main.params[ 'TEST' ][ 'metric1' ]
-        testDuration = main.params[ 'TEST' ][ 'duration' ]
-        stop = time.time() + float( testDuration )
-
-        main.log.info( "Starting test loop..." )
-        logInterval = main.params[ 'TEST' ][ 'log_interval' ]
-
-        while time.time() < stop:
-            time.sleep( float( logInterval ) )
-
-            intentsJsonStr1 = main.ONOS1cli.intentsEventsMetrics()
-            intentsJsonObj1 = json.loads( intentsJsonStr1 )
-            main.log.info( "Node 1 rate: " +
-                           str( intentsJsonObj1[ intentsRate ][ 'm1_rate' ] ) )
-            lastRate1 = intentsJsonObj1[ intentsRate ][ 'm1_rate' ]
-
-            intentsJsonStr2 = main.ONOS2cli.intentsEventsMetrics()
-            intentsJsonObj2 = json.loads( intentsJsonStr2 )
-            main.log.info( "Node 2 rate: " +
-                           str( intentsJsonObj2[ intentsRate ][ 'm1_rate' ] ) )
-            lastRate2 = intentsJsonObj2[ intentsRate ][ 'm1_rate' ]
-
-            intentsJsonStr3 = main.ONOS3cli.intentsEventsMetrics()
-            intentsJsonObj3 = json.loads( intentsJsonStr3 )
-            main.log.info( "Node 3 rate: " +
-                           str( intentsJsonObj3[ intentsRate ][ 'm1_rate' ] ) )
-            lastRate3 = intentsJsonObj3[ intentsRate ][ 'm1_rate' ]
-
-        stopLoad = main.params[ 'TEST' ][ 'loadstop' ]
-        main.ONOS1.handle.sendline( stopLoad )
-        main.ONOS2.handle.sendline( stopLoad )
-        main.ONOS3.handle.sendline( stopLoad )
-
-        msg = ( "Final rate on node 1: " + str( lastRate1 ) )
-        main.log.report( msg )
-
-        msg = ( "Final rate on node 2: " + str( lastRate2 ) )
-        main.log.report( msg )
-
-        msg = ( "Final rate on node 3: " + str( lastRate3 ) )
-        main.log.report( msg )
-
-
-    
diff --git a/TestON/tests/IntentsLoad/IntentsLoad.py.fixed b/TestON/tests/IntentsLoad/IntentsLoad.py.fixed
deleted file mode 100644
index faaec26..0000000
--- a/TestON/tests/IntentsLoad/IntentsLoad.py.fixed
+++ /dev/null
@@ -1,293 +0,0 @@
-# ScaleOutTemplate --> IntentsLoad
-#
-# CASE1 starts number of nodes specified in param file
-#
-# cameron@onlab.us
-
-import sys
-import os
-
-
-class IntentsLoad:
-
-    def __init__( self ):
-        self.default = ''
-
-    def CASE1( self, main ):
-
-        global clusterCount
-        clusterCount = 1
-
-        checkoutBranch = main.params[ 'GIT' ][ 'checkout' ]
-        gitPull = main.params[ 'GIT' ][ 'autopull' ]
-        cellName = main.params[ 'ENV' ][ 'cellName' ]
-        BENCHIp = main.params[ 'BENCH' ][ 'ip1' ]
-        BENCHUser = main.params[ 'BENCH' ][ 'user' ]
-        ONOS1Ip = main.params[ 'CTRL' ][ 'ip1' ]
-        ONOS2Ip = main.params[ 'CTRL' ][ 'ip2' ]
-        ONOS3Ip = main.params[ 'CTRL' ][ 'ip3' ]
-        MN1Ip = main.params[ 'MN' ][ 'ip1' ]
-
-        main.log.step( "Cleaning Enviornment..." )
-        main.ONOSbench.onosUninstall( ONOS1Ip )
-        main.ONOSbench.onosUninstall( ONOS2Ip )
-        main.ONOSbench.onosUninstall( ONOS3Ip )
-
-        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" )
-
-        #mvnResult = main.ONOSbench.cleanInstall()
-
-        main.step( "Set cell for ONOS cli env" )
-        main.ONOS1cli.setCell( cellName )
-        main.ONOS2cli.setCell( cellName )
-        main.ONOS3cli.setCell( cellName )
-
-        main.step( "Creating ONOS package" )
-        packageResult = main.ONOSbench.onosPackage()  # no file or directory
-
-        main.step( "Installing ONOS package" )
-        install1Result = main.ONOSbench.onosInstall( node=ONOS1Ip )
-
-        cellName = main.params[ 'ENV' ][ 'cellName' ]
-        main.step( "Applying cell file to environment" )
-        cellApplyResult = main.ONOSbench.setCell( cellName )
-        main.step( "verify cells" )
-        verifyCellResult = main.ONOSbench.verifyCell()
-
-        main.step( "Set cell for ONOS cli env" )
-        main.ONOS1cli.setCell( cellName )
-
-        cli1 = main.ONOS1cli.startOnosCli( ONOS1Ip )
-
-    def CASE2( self, main ):
-        """
-        Increase number of nodes and initiate CLI
-        """
-        import time
-
-        global clusterCount
-
-        ONOS1Ip = main.params[ 'CTRL' ][ 'ip1' ]
-        ONOS2Ip = main.params[ 'CTRL' ][ 'ip2' ]
-        ONOS3Ip = main.params[ 'CTRL' ][ 'ip3' ]
-        #ONOS4Ip = main.params[ 'CTRL' ][ 'ip4' ]
-        #ONOS5Ip = main.params[ 'CTRL' ][ 'ip5' ]
-        #ONOS6Ip = main.params[ 'CTRL' ][ 'ip6' ]
-        #ONOS7Ip = main.params[ 'CTRL' ][ 'ip7' ]
-        cellName = main.params[ 'ENV' ][ 'cellName' ]
-        scale = int( main.params[ 'SCALE' ] )
-
-        # Cluster size increased everytime the case is defined
-        clusterCount += scale
-
-        main.log.report( "Increasing cluster size to " +
-                         str( clusterCount ) )
-        installResult = main.FALSE
-
-        if scale == 2:
-            if clusterCount == 3:
-                main.log.info( "Installing nodes 2 and 3" )
-                install2Result = main.ONOSbench.onosInstall( node=ONOS2Ip )
-                install3Result = main.ONOSbench.onosInstall( node=ONOS3Ip )
-                cli2 = main.ONOS2cli.startOnosCli( ONOS2Ip )
-                cli3 = main.ONOS3cli.startOnosCli( ONOS3Ip )
-            """
-            elif clusterCount == 5:
-                main.log.info( "Installing nodes 4 and 5" )
-                node4Result = main.ONOSbench.onosInstall( node=ONOS4Ip )
-                node5Result = main.ONOSbench.onosInstall( node=ONOS5Ip )
-                installResult = node4Result and node5Result
-                time.sleep( 5 )
-                main.ONOS4cli.startOnosCli( ONOS4Ip )
-                main.ONOS5cli.startOnosCli( ONOS5Ip )
-            elif clusterCount == 7:
-                main.log.info( "Installing nodes 4 and 5" )
-                node6Result = main.ONOSbench.onosInstall( node=ONOS6Ip )
-                node7Result = main.ONOSbench.onosInstall( node=ONOS7Ip )
-                installResult = node6Result and node7Result
-                time.sleep( 5 )
-                main.ONOS6cli.startOnosCli( ONOS6Ip )
-                main.ONOS7cli.startOnosCli( ONOS7Ip )
-            """
-        if scale == 1:
-            if clusterCount == 2:
-                main.log.info( "Installing node 2" )
-                install2Result = main.ONOSbench.onosInstall( node=ONOS2Ip )
-                cli2 = main.ONOS2cli.startOnosCli( ONOS2Ip )
-
-            if clusterCount == 3:
-                main.log.info( "Installing node 3" )
-                install3Result = main.ONOSbench.onosInstall( node=ONOS3Ip )
-                cli3 = main.ONOS3cli.startOnosCli( ONOS3Ip )
-
-    def CASE3( self, main ):
-        import time
-        import json
-        import string
-
-        intentsRate = main.params[ 'JSON' ][ 'intents_rate' ]
-
-        defaultSwPort = main.params[ 'CTRL' ][ 'port1' ]
-
-        main.Mininet1.assignSwController(
-            sw="1",
-            ip1=ONOS1Ip,
-            port1=defaultSwPort )
-        main.Mininet1.assignSwController(
-            sw="2",
-            ip1=ONOS1Ip,
-            port1=defaultSwPort )
-        main.Mininet1.assignSwController(
-            sw="3",
-            ip1=ONOS1Ip,
-            port1=defaultSwPort )
-        main.Mininet1.assignSwController(
-            sw="4",
-            ip1=ONOS1Ip,
-            port1=defaultSwPort )
-        main.Mininet1.assignSwController(
-            sw="5",
-            ip1=ONOS1Ip,
-            port1=defaultSwPort )
-        main.Mininet1.assignSwController(
-            sw="6",
-            ip1=ONOS1Ip,
-            port1=defaultSwPort )
-        main.Mininet1.assignSwController(
-            sw="7",
-            ip1=ONOS1Ip,
-            port1=defaultSwPort )
-
-        mnArp = main.params[ 'TEST' ][ 'arping' ]
-        main.Mininet1.handle.sendline( mnArp )
-
-        generateLoad = main.params[ 'TEST' ][ 'loadstart' ]
-
-        main.ONOS1.handle.sendline( generateLoad )
-        main.ONOS1.handle.expect( "sdn" )
-        print( "before: ", main.ONOS1.handle.before )
-        print( "after: ", main.ONOS1.handle.after )
-
-        loadConfirm = main.ONOS1.handle.after
-        if loadConfirm == "{}":
-            main.log.info( "Load started" )
-
-        else:
-            main.log.error( "Load start failure" )
-            main.log.error( "expected '{}', got: " + str( loadConfirm ) )
-
-        devicesJsonStr = main.ONOS1cli.devices()
-        devicesJsonObj = json.loads( devicesJsonStr )
-
-        getMetric = main.params[ 'TEST' ][ 'metric1' ]
-        testDuration = main.params[ 'TEST' ][ 'duration' ]
-        stop = time.time() + float( testDuration )
-
-        main.log.info( "Starting test loop..." )
-        logInterval = main.params[ 'TEST' ][ 'log_interval' ]
-
-        while time.time() < stop:
-            time.sleep( float( logInterval ) )
-
-            intentsJsonStr1 = main.ONOS1cli.intentsEventsMetrics()
-            intentsJsonObj1 = json.loads( intentsJsonStr1 )
-            main.log.info( "Node 1 rate: " +
-                           str( intentsJsonObj1[ intentsRate ][ 'm1_rate' ] ) )
-            lastRate1 = intentsJsonObj1[ intentsRate ][ 'm1_rate' ]
-
-        stopLoad = main.params[ 'TEST' ][ 'loadstop' ]
-        main.ONOS1.handle.sendline( stopLoad )
-
-        msg = ( "Final rate on node 1: " + str( lastRate1 ) )
-        main.log.report( msg )
-
-    def CASE4( self, main ):  # 2 node scale
-        import time
-        import json
-        import string
-
-        intentsRate = main.params[ 'JSON' ][ 'intents_rate' ]
-
-        defaultSwPort = main.params[ 'CTRL' ][ 'port1' ]
-
-        main.Mininet1.assignSwController(
-            sw="1",
-            ip1=ONOS1Ip,
-            port1=defaultSwPort )
-        main.Mininet1.assignSwController(
-            sw="2",
-            ip1=ONOS2Ip,
-            port1=defaultSwPort )
-        main.Mininet1.assignSwController(
-            sw="3",
-            ip1=ONOS1Ip,
-            port1=defaultSwPort )
-        main.Mininet1.assignSwController(
-            sw="4",
-            ip1=ONOS2Ip,
-            port1=defaultSwPort )
-        main.Mininet1.assignSwController(
-            sw="5",
-            ip1=ONOS1Ip,
-            port1=defaultSwPort )
-        main.Mininet1.assignSwController(
-            sw="6",
-            ip1=ONOS2Ip,
-            port1=defaultSwPort )
-        main.Mininet1.assignSwController(
-            sw="7",
-            ip1=ONOS1Ip,
-            port1=defaultSwPort )
-
-        mnArp = main.params[ 'TEST' ][ 'arping' ]
-        main.Mininet1.handle.sendline( mnArp )
-
-        generateLoad = main.params[ 'TEST' ][ 'loadstart' ]
-
-        main.ONOS1.handle.sendline( generateLoad )
-        main.ONOS2.handle.sendline( generateLoad )
-
-        devicesJsonStr1 = main.ONOS1cli.devices()
-        devicesJsonObj1 = json.loads( devicesJsonStr1 )
-        devicesJsonStr2 = main.ONOS2cli.devices()
-        devicesJsonObj2 = json.loads( devicesJsonStr2 )
-
-        getMetric = main.params[ 'TEST' ][ 'metric1' ]
-        testDuration = main.params[ 'TEST' ][ 'duration' ]
-        stop = time.time() + float( testDuration )
-
-        main.log.info( "Starting test loop..." )
-        logInterval = main.params[ 'TEST' ][ 'log_interval' ]
-
-        while time.time() < stop:
-            time.sleep( float( logInterval ) )
-
-            intentsJsonStr1 = main.ONOS1cli.intentsEventsMetrics()
-            intentsJsonObj1 = json.loads( intentsJsonStr1 )
-            main.log.info( "Node 1 rate: " +
-                           str( intentsJsonObj1[ intentsRate ][ 'm1_rate' ] ) )
-            lastRate1 = intentsJsonObj1[ intentsRate ][ 'm1_rate' ]
-
-            intentsJsonStr2 = main.ONOS2cli.intentsEventsMetrics()
-            intentsJsonObj2 = json.loads( intentsJsonStr2 )
-            main.log.info( "Node 2 rate: " +
-                           str( intentsJsonObj2[ intentsRate ][ 'm1_rate' ] ) )
-            lastRate2 = intentsJsonObj2[ intentsRate ][ 'm1_rate' ]
-
-        stopLoad = main.params[ 'TEST' ][ 'loadstop' ]
-        main.ONOS1.handle.sendline( stopLoad )
-        main.ONOS2.handle.sendline( stopLoad )
-
-        msg = ( "Final rate on node 1: " + str( lastRate1 ) )
-        main.log.report( msg )
-
-        msg = ( "Final rate on node 2: " + str( lastRate2 ) )
-        main.log.report( msg )
diff --git a/TestON/tests/IntentsLoad/IntentsLoad.topo b/TestON/tests/IntentsLoad/IntentsLoad.topo
deleted file mode 100644
index 985baf9..0000000
--- a/TestON/tests/IntentsLoad/IntentsLoad.topo
+++ /dev/null
@@ -1,94 +0,0 @@
-<TOPOLOGY>
-
-    <COMPONENT>
-
-        <ONOSbench>
-            <host>10.128.5.55</host>
-            <user>admin</user>
-            <password>onos_test</password>
-            <type>OnosDriver</type>
-            <connect_order>1</connect_order>
-            <COMPONENTS> </COMPONENTS>
-        </ONOSbench>
-
-        <ONOS1cli>
-            <host>10.128.5.55</host>
-            <user>admin</user>
-            <password>onos_test</password>
-            <type>OnosCliDriver</type>
-            <connect_order>2</connect_order>
-            <COMPONENTS> </COMPONENTS>
-        </ONOS1cli>
-        
-        <ONOS2cli>
-            <host>10.128.5.55</host>
-            <user>admin</user>
-            <password>onos_test</password>
-            <type>OnosCliDriver</type>
-            <connect_order>3</connect_order>
-            <COMPONENTS> </COMPONENTS>
-        </ONOS2cli>
-
-        <ONOS3cli>
-            <host>10.128.5.55</host>
-            <user>admin</user>
-            <password>onos_test</password>
-            <type>OnosCliDriver</type>
-            <connect_order>4</connect_order>
-            <COMPONENTS> </COMPONENTS>
-        </ONOS3cli>
-
-        <ONOS1>
-            <host>10.128.5.51</host>
-            <user>sdn</user>
-            <password>rocks</password>
-            <type>OnosDriver</type>
-            <connect_order>5</connect_order>
-            <COMPONENTS> </COMPONENTS>
-        </ONOS1>
-
-        <ONOS2>
-            <host>10.128.5.52</host>
-            <user>sdn</user>
-            <password>rocks</password>
-            <type>OnosDriver</type>
-            <connect_order>6</connect_order>
-            <COMPONENTS> </COMPONENTS>
-        </ONOS2>
-
-        <ONOS3>
-            <host>10.128.5.53</host>
-            <user>sdn</user>
-            <password>rocks</password>
-            <type>OnosDriver</type>
-            <connect_order>7</connect_order>
-            <COMPONENTS> </COMPONENTS>
-        </ONOS3>
-
-        <Mininet1>
-            <host>10.128.5.59</host>
-            <user>admin</user>
-            <password>onos_test</password>
-            <type>MininetCliDriver</type>
-            <connect_order>8</connect_order>
-            <COMPONENTS>
-                <arg1> --custom ~/topo-intentTPtest.py </arg1>
-                <arg2> --mac --topo mytopo </arg2>
-                <arg3> </arg3>
-                <controller> remote </controller>
-            </COMPONENTS>
-        </Mininet1>
-        
-        <Mininet2>
-            <host>10.128.5.59</host>
-            <user>admin</user>
-            <password>onos_test</password>
-            <type>RemoteMininetDriver</type>
-            <connect_order>9</connect_order>
-            <COMPONENTS> </COMPONENTS>
-        </Mininet2>
-
-    </COMPONENT>
-
-</TOPOLOGY>
-
diff --git a/TestON/tests/IntentsLoad/__init__.py b/TestON/tests/IntentsLoad/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/TestON/tests/IntentsLoad/__init__.py
+++ /dev/null
