diff --git a/TestON/drivers/common/cli/onosclidriver.py b/TestON/drivers/common/cli/onosclidriver.py
index 3b437cb..c30ac53 100755
--- a/TestON/drivers/common/cli/onosclidriver.py
+++ b/TestON/drivers/common/cli/onosclidriver.py
@@ -2216,21 +2216,27 @@
             intentDictONOS = {}
             for intent in intentsJson:
                 intentDictONOS[ intent[ 'id' ] ] = intent[ 'state' ]
+            returnValue = main.TRUE
             if len( intentDict ) != len( intentDictONOS ):
-                main.log.info( self.name + ": expected intent count does not match that in ONOS, " +
+                main.log.warn( self.name + ": expected intent count does not match that in ONOS, " +
                                str( len( intentDict ) ) + " expected and " +
                                str( len( intentDictONOS ) ) + " actual" )
-                return main.FALSE
-            returnValue = main.TRUE
+                returnValue = main.FALSE
             for intentID in intentDict.keys():
                 if not intentID in intentDictONOS.keys():
                     main.log.debug( self.name + ": intent ID - " + intentID + " is not in ONOS" )
                     returnValue = main.FALSE
-                elif intentDict[ intentID ] != intentDictONOS[ intentID ]:
-                    main.log.debug( self.name + ": intent ID - " + intentID +
-                                    " expected state is " + intentDict[ intentID ] +
-                                    " but actual state is " + intentDictONOS[ intentID ] )
-                    returnValue = main.FALSE
+                else:
+                    if intentDict[ intentID ] != intentDictONOS[ intentID ]:
+                        main.log.debug( self.name + ": intent ID - " + intentID +
+                                        " expected state is " + intentDict[ intentID ] +
+                                        " but actual state is " + intentDictONOS[ intentID ] )
+                        returnValue = main.FALSE
+                    intentDictONOS.pop( intentID )
+            if len( intentDictONOS ) > 0:
+                returnValue = main.FALSE
+                for intentID in intentDictONOS.keys():
+                    main.log.debug( self.name + ": find extra intent in ONOS: intent ID " + intentID )
             if returnValue == main.TRUE:
                 main.log.info( self.name + ": all intent IDs and states match that in ONOS" )
             return returnValue
@@ -2654,14 +2660,20 @@
             main.cleanup()
             main.exit()
 
-    def FlowAddedCount( self, deviceId ):
+    def flowAddedCount( self, deviceId, core=False ):
         """
         Determine the number of flow rules for the given device id that are
         in the added state
+        Params:
+            core: if True, only return the number of core flows added
         """
         try:
-            cmdStr = "flows any " + str( deviceId ) + " | " +\
-                     "grep 'state=ADDED' | wc -l"
+            if core:
+                cmdStr = "flows any " + str( deviceId ) + " | " +\
+                         "grep 'state=ADDED' | grep org.onosproject.core | wc -l"
+            else:
+                cmdStr = "flows any " + str( deviceId ) + " | " +\
+                         "grep 'state=ADDED' | wc -l"
             handle = self.sendline( cmdStr )
             assert "Command not found:" not in handle, handle
             return handle
@@ -3369,7 +3381,7 @@
             main.cleanup()
             main.exit()
 
-    def apps( self, jsonFormat=True ):
+    def apps( self, summary=False, active=False, jsonFormat=True ):
         """
         Returns the output of the apps command for ONOS. This command lists
         information about installed ONOS applications
@@ -3381,6 +3393,10 @@
         # "features":"[onos-openflow]","state":"ACTIVE"}]
         try:
             cmdStr = "onos:apps"
+            if summary:
+                cmdStr += " -s"
+            if active:
+                cmdStr += " -a"
             if jsonFormat:
                 cmdStr += " -j"
             output = self.sendline( cmdStr )
diff --git a/TestON/drivers/common/cli/onosdriver.py b/TestON/drivers/common/cli/onosdriver.py
index dfb85fb..d46e99a 100755
--- a/TestON/drivers/common/cli/onosdriver.py
+++ b/TestON/drivers/common/cli/onosdriver.py
@@ -388,6 +388,8 @@
                     # Prompt returned
                     break
             main.log.debug( output )
+            # FIXME: This is a workaround for a bug in buck see ONOS-5320
+            self.buckPackage( )
             return ret
         except pexpect.TIMEOUT:
             main.log.exception( self.name + ": TIMEOUT exception found" )
@@ -403,6 +405,53 @@
             main.cleanup()
             main.exit()
 
+    def buckPackage( self, timeout=180 ):
+        """
+        Package onos using buck. This will not build the source and this rule
+        should be automatically run when building onos.
+        """
+        try:
+            ret = main.TRUE
+            self.handle.sendline( "buck build package" )
+            self.handle.expect( "buck build package" )
+            output = ""
+            while True:
+                i = self.handle.expect( [ "This does not appear to be the root of a Buck project.",
+                                          "\n",
+                                          "BUILD FAILED",
+                                          "\$" ],
+                                        timeout=timeout )
+                output += str( self.handle.before + self.handle.after )
+                if i == 0:
+                    main.log.error( "Wrong location" )
+                    ret = main.FALSE
+                elif i == 1:
+                    # end of a line, buck is still printing output
+                    pass
+                elif i == 2:
+                    # Build failed
+                    main.log.error( "Build failed" )
+                    ret = main.FALSE
+                elif i == 3:
+                    # Prompt returned
+                    break
+            main.log.debug( output )
+            return ret
+        except pexpect.TIMEOUT:
+            main.log.exception( self.name + ": TIMEOUT exception found" )
+            main.log.error( self.name + ":    " + self.handle.before )
+            return main.FALSE
+        except pexpect.EOF:
+            main.log.error( self.name + ": EOF exception found" )
+            main.log.error( self.name + ":    " + self.handle.before )
+            main.cleanup()
+            main.exit()
+        except Exception:
+            main.log.exception( "Failed to package ONOS" )
+            main.cleanup()
+            main.exit()
+
+
     def gitPull( self, comp1="", fastForward=True ):
         """
         Assumes that "git pull" works without login
@@ -1624,19 +1673,20 @@
             main.cleanup()
             main.exit()
 
-    def dumpFlows(self,ONOSIp, destDir, filename="flows" ):
+    def dumpONOSCmd(self, ONOSIp, CMD, destDir, filename, options=""):
         """
-        Dump Flow Tables to a desired directory.
+        Dump Cmd to a desired directory.
         For debugging purposes, you may want to use
-        this function to capture flows at a given point in time.
+        this function to capture Cmd at a given point in time.
         Localtime will be attached to the filename
 
         Required:
             * ONOSIp: the IP of the target ONOS instance
+            * CMD: the command to dump;
             * destDir: specify directory to copy to.
               ex ) /tmp/
-        Optional:
             * fileName: Name of the file
+            * options: Options for ONOS command
         """
 
         localtime = time.strftime( '%x %X' )
@@ -1645,32 +1695,8 @@
         localtime = localtime.replace( ":", "" )
         if destDir[ -1: ] != "/":
             destDir += "/"
-        cmd="flows > "+ str( destDir ) + str( filename ) + localtime
-        return self.onosCli(ONOSIp,cmd)
-
-    def dumpGroups(self,ONOSIp, destDir, filename="groups" ):
-        """
-        Dump Group Tables to a desired directory.
-        For debugging purposes, you may want to use
-        this function to capture groups at a given point in time.
-        Localtime will be attached to the filename
-
-        Required:
-            * ONOSIp: the IP of the target ONOS instance
-            * destDir: specify directory to copy to.
-              ex ) /tmp/
-        Optional:
-            * fileName: Name of the file
-        """
-
-        localtime = time.strftime( '%H %M' )
-        localtime = localtime.replace( "/", "" )
-        localtime = localtime.replace( " ", "_" )
-        localtime = localtime.replace( ":", "" )
-        if destDir[ -1: ] != "/":
-            destDir += "/"
-        cmd="groups > "+ str( destDir ) + str( filename ) + localtime
-        return self.onosCli(ONOSIp,cmd)
+        cmd=CMD + " " + options + " > " + str( destDir ) + str( filename ) + localtime
+        return self.onosCli(ONOSIp, cmd)
 
     def cpLogsToDir( self, logToCopy,
                      destDir, copyFileName="" ):
diff --git a/TestON/install.sh b/TestON/install.sh
index 0327ca7..fc434bc 100755
--- a/TestON/install.sh
+++ b/TestON/install.sh
@@ -217,6 +217,7 @@
 
 if [ $# -eq 0 ]
 then
+    init
     default
 elif [ $1 == "--help" ]
 then
diff --git a/TestON/tests/CHOTestMonkey/CHOTestMonkey.params b/TestON/tests/CHOTestMonkey/CHOTestMonkey.params
index 6c9ef4b..85b2e0e 100644
--- a/TestON/tests/CHOTestMonkey/CHOTestMonkey.params
+++ b/TestON/tests/CHOTestMonkey/CHOTestMonkey.params
@@ -94,6 +94,8 @@
             <CLIParamNum>0</CLIParamNum>
             <rerunInterval>5</rerunInterval>
             <maxRerunNum>5</maxRerunNum>
+            <coreFlowNum>4</coreFlowNum>
+            <coreFlowNum6>6</coreFlowNum6>
         </FlowCheck>
 
         <TrafficCheck>
diff --git a/TestON/tests/CHOTestMonkey/CHOTestMonkey.py b/TestON/tests/CHOTestMonkey/CHOTestMonkey.py
index 29a40aa..e6606d4 100644
--- a/TestON/tests/CHOTestMonkey/CHOTestMonkey.py
+++ b/TestON/tests/CHOTestMonkey/CHOTestMonkey.py
@@ -178,8 +178,8 @@
         setIPv6CfgSleep = int( main.params[ 'TEST' ][ 'setIPv6CfgSleep' ] )
         if main.enableIPv6:
             time.sleep( setIPv6CfgSleep )
-            cfgResult1 = main.controllers[ 0 ].CLI.setCfg( "org.onosproject.proxyarp.ProxyArp",
-                                                           "ipv6NeighborDiscovery",
+            cfgResult1 = main.controllers[ 0 ].CLI.setCfg( "org.onosproject.incubator.net.neighbour.impl.NeighbourResolutionManager",
+                                                           "ndpEnabled",
                                                            "true" )
             time.sleep( setIPv6CfgSleep )
             cfgResult2 = main.controllers[ 0 ].CLI.setCfg( "org.onosproject.provider.host.impl.HostLocationProvider",
@@ -848,7 +848,7 @@
             with main.eventScheduler.idleCondition:
                 while not main.eventScheduler.isIdle():
                     main.eventScheduler.idleCondition.wait()
-            #time.sleep( sleepSec )
+            time.sleep( sleepSec )
         utilities.assert_equals( expect=main.TRUE,
                                  actual=main.caseResult,
                                  onpass="Randomly generate events test passed",
diff --git a/TestON/tests/CHOTestMonkey/dependencies/events/CheckEvent.py b/TestON/tests/CHOTestMonkey/dependencies/events/CheckEvent.py
index fa42e12..8c85ff8 100755
--- a/TestON/tests/CHOTestMonkey/dependencies/events/CheckEvent.py
+++ b/TestON/tests/CHOTestMonkey/dependencies/events/CheckEvent.py
@@ -46,9 +46,27 @@
     def startCheckEvent( self, args=None ):
         import json
         checkResult = EventStates().PASS
+        if main.enableIPv6:
+            coreFlowNum = int( main.params[ 'EVENT' ][ 'FlowCheck' ][ 'coreFlowNum6' ] )
+        else:
+            coreFlowNum = int( main.params[ 'EVENT' ][ 'FlowCheck' ][ 'coreFlowNum' ] )
         for controller in main.controllers:
             if controller.isUp():
                 with controller.CLILock:
+                    # Check core flow number
+                    for device in main.devices:
+                        if device.isRemoved():
+                            continue
+                        coreFlowNumOnos = controller.CLI.flowAddedCount( device.dpid, core=True )
+                        if coreFlowNumOnos == None:
+                            main.log.warn( "Flow Check - error when trying to get flow number of %s on ONOS%s" % ( device.dpid, controller.index ) )
+                            checkResult = EventStates().FAIL
+                        else:
+                            coreFlowNumOnos = int( coreFlowNumOnos )
+                            if coreFlowNumOnos != coreFlowNum:
+                                main.log.warn( "Flow Check - core flow number of %s on ONOS%s is %s" % ( device.dpid, controller.index, coreFlowNumOnos ) )
+                                checkResult = EventStates().FAIL
+                    # Get flows for comparison
                     flows = controller.CLI.flows()
                     try:
                         flows = json.loads( flows )
@@ -160,7 +178,7 @@
         topics = []
         # TODO: Other topics?
         for i in range( 14 ):
-            topics.append( "intent-partition-" + str( i ) )
+            topics.append( "work-partition-" + str( i ) )
         dpidToAvailability = {}
         dpidToMaster = {}
         for device in main.devices:
diff --git a/TestON/tests/FUNC/FUNCipv6Intent/FUNCipv6Intent.py b/TestON/tests/FUNC/FUNCipv6Intent/FUNCipv6Intent.py
index 72fa1df..2f70420 100755
--- a/TestON/tests/FUNC/FUNCipv6Intent/FUNCipv6Intent.py
+++ b/TestON/tests/FUNC/FUNCipv6Intent/FUNCipv6Intent.py
@@ -6,7 +6,6 @@
         self.default = ''
 
     def CASE1( self, main ):
-        import time
         import imp
         import re
 
@@ -127,7 +126,7 @@
         - Install ONOS cluster
         - Connect to cli
         """
-
+        import time
         # main.scale[ 0 ] determines the current number of ONOS controller
         main.numCtrls = int( main.scale[ 0 ] )
 
@@ -250,7 +249,7 @@
             main.exit()
 
         main.step( "setup the ipv6NeighbourDiscovery" )
-        cfgResult1 = main.CLIs[0].setCfg( "org.onosproject.proxyarp.ProxyArp", "ipv6NeighborDiscovery", "true" )
+        cfgResult1 = main.CLIs[0].setCfg( "org.onosproject.incubator.net.neighbour.impl.NeighbourResolutionManager", "ndpEnabled", "true" )
         cfgResult2 = main.CLIs[0].setCfg( "org.onosproject.provider.host.impl.HostLocationProvider", "ipv6NeighborDiscovery", "true" )
         cfgResult = cfgResult1 and cfgResult2
         utilities.assert_equals( expect=main.TRUE, actual=cfgResult,
@@ -338,7 +337,6 @@
         """
         main.case( "Discover all hosts" )
 
-        stepResult = main.TRUE
         main.step( "Discover all hosts using pingall " )
         stepResult = main.intentFunction.getHostsData( main )
         utilities.assert_equals( expect=main.TRUE,
diff --git a/TestON/tests/FUNC/FUNCipv6Intent/dependencies/FUNCIpv6IntentFunction.py b/TestON/tests/FUNC/FUNCipv6Intent/dependencies/FUNCIpv6IntentFunction.py
index 0d71604..edca254 100755
--- a/TestON/tests/FUNC/FUNCipv6Intent/dependencies/FUNCIpv6IntentFunction.py
+++ b/TestON/tests/FUNC/FUNCipv6Intent/dependencies/FUNCIpv6IntentFunction.py
@@ -1795,7 +1795,7 @@
     main.log.info( "Activating reactive forwarding app " )
     activateResult = main.CLIs[ 0 ].activateApp( "org.onosproject.fwd" )
     main.CLIs[ 0 ].setCfg( "org.onosproject.provider.host.impl.HostLocationProvider", "ipv6NeighborDiscovery", "true")
-    main.CLIs[ 0 ].setCfg( "org.onosproject.proxyarp.ProxyArp", "ipv6NeighborDiscovery", "true")
+    main.CLIs[ 0 ].setCfg( "org.onosproject.incubator.net.neighbour.impl.NeighbourResolutionManager", "ndpEnabled", "true" )
     main.CLIs[ 0 ].setCfg( "org.onosproject.fwd.ReactiveForwarding", "ipv6Forwarding", "true")
     main.CLIs[ 0 ].setCfg( "org.onosproject.fwd.ReactiveForwarding", "matchIpv6Address", "true")
     time.sleep( main.fwdSleep )
diff --git a/TestON/tests/HA/HAclusterRestart/HAclusterRestart.py b/TestON/tests/HA/HAclusterRestart/HAclusterRestart.py
index 8b5add6..914c3ce 100644
--- a/TestON/tests/HA/HAclusterRestart/HAclusterRestart.py
+++ b/TestON/tests/HA/HAclusterRestart/HAclusterRestart.py
@@ -719,7 +719,7 @@
                 # check for all intent partitions
                 topics = []
                 for i in range( 14 ):
-                    topics.append( "intent-partition-" + str( i ) )
+                    topics.append( "work-partition-" + str( i ) )
                 main.log.debug( topics )
                 ONOStopics = [ j['topic'] for j in parsedLeaders ]
                 for topic in topics:
@@ -875,7 +875,7 @@
                     # check for election
                     topics = []
                     for i in range( 14 ):
-                        topics.append( "intent-partition-" + str( i ) )
+                        topics.append( "work-partition-" + str( i ) )
                     # FIXME: this should only be after we start the app
                     topics.append( "org.onosproject.election" )
                     main.log.debug( topics )
@@ -1025,7 +1025,7 @@
                 # TODO: Look at Devices as topics now that it uses this system
                 topics = []
                 for i in range( 14 ):
-                    topics.append( "intent-partition-" + str( i ) )
+                    topics.append( "work-partition-" + str( i ) )
                 # FIXME: this should only be after we start the app
                 # FIXME: topics.append( "org.onosproject.election" )
                 # Print leaders output
@@ -1124,7 +1124,7 @@
                     # check for election
                     topics = []
                     for i in range( 14 ):
-                        topics.append( "intent-partition-" + str( i ) )
+                        topics.append( "work-partition-" + str( i ) )
                     # FIXME: this should only be after we start the app
                     topics.append( "org.onosproject.election" )
                     main.log.debug( topics )
diff --git a/TestON/tests/HA/HAfullNetPartition/HAfullNetPartition.py b/TestON/tests/HA/HAfullNetPartition/HAfullNetPartition.py
index a85d949..7fee993 100644
--- a/TestON/tests/HA/HAfullNetPartition/HAfullNetPartition.py
+++ b/TestON/tests/HA/HAfullNetPartition/HAfullNetPartition.py
@@ -182,7 +182,7 @@
         #       index = The number of the graph under plot name
         job = "HAfullNetPartition"
         plotName = "Plot-HA"
-        index = "1"
+        index = "2"
         graphs = '<ac:structured-macro ac:name="html">\n'
         graphs += '<ac:plain-text-body><![CDATA[\n'
         graphs += '<iframe src="https://onos-jenkins.onlab.us/job/' + job +\
@@ -732,7 +732,7 @@
                 # check for all intent partitions
                 topics = []
                 for i in range( 14 ):
-                    topics.append( "intent-partition-" + str( i ) )
+                    topics.append( "work-partition-" + str( i ) )
                 main.log.debug( topics )
                 ONOStopics = [ j['topic'] for j in parsedLeaders ]
                 for topic in topics:
@@ -877,7 +877,7 @@
                     # check for election
                     topics = []
                     for i in range( 14 ):
-                        topics.append( "intent-partition-" + str( i ) )
+                        topics.append( "work-partition-" + str( i ) )
                     # FIXME: this should only be after we start the app
                     topics.append( "org.onosproject.election" )
                     main.log.debug( topics )
@@ -1027,7 +1027,7 @@
                 # TODO: Look at Devices as topics now that it uses this system
                 topics = []
                 for i in range( 14 ):
-                    topics.append( "intent-partition-" + str( i ) )
+                    topics.append( "work-partition-" + str( i ) )
                 # FIXME: this should only be after we start the app
                 # FIXME: topics.append( "org.onosproject.election" )
                 # Print leaders output
@@ -1126,7 +1126,7 @@
                     # check for election
                     topics = []
                     for i in range( 14 ):
-                        topics.append( "intent-partition-" + str( i ) )
+                        topics.append( "work-partition-" + str( i ) )
                     # FIXME: this should only be after we start the app
                     topics.append( "org.onosproject.election" )
                     main.log.debug( topics )
diff --git a/TestON/tests/HA/HAkillNodes/HAkillNodes.py b/TestON/tests/HA/HAkillNodes/HAkillNodes.py
index 147f183..ead3713 100644
--- a/TestON/tests/HA/HAkillNodes/HAkillNodes.py
+++ b/TestON/tests/HA/HAkillNodes/HAkillNodes.py
@@ -753,7 +753,7 @@
                 # check for all intent partitions
                 topics = []
                 for i in range( 14 ):
-                    topics.append( "intent-partition-" + str( i ) )
+                    topics.append( "work-partition-" + str( i ) )
                 main.log.debug( topics )
                 ONOStopics = [ j['topic'] for j in parsedLeaders ]
                 for topic in topics:
@@ -898,7 +898,7 @@
                     # check for election
                     topics = []
                     for i in range( 14 ):
-                        topics.append( "intent-partition-" + str( i ) )
+                        topics.append( "work-partition-" + str( i ) )
                     # FIXME: this should only be after we start the app
                     topics.append( "org.onosproject.election" )
                     main.log.debug( topics )
@@ -1048,7 +1048,7 @@
                 # TODO: Look at Devices as topics now that it uses this system
                 topics = []
                 for i in range( 14 ):
-                    topics.append( "intent-partition-" + str( i ) )
+                    topics.append( "work-partition-" + str( i ) )
                 # FIXME: this should only be after we start the app
                 # FIXME: topics.append( "org.onosproject.election" )
                 # Print leaders output
@@ -1147,7 +1147,7 @@
                     # check for election
                     topics = []
                     for i in range( 14 ):
-                        topics.append( "intent-partition-" + str( i ) )
+                        topics.append( "work-partition-" + str( i ) )
                     # FIXME: this should only be after we start the app
                     topics.append( "org.onosproject.election" )
                     main.log.debug( topics )
diff --git a/TestON/tests/HA/HAsanity/HAsanity.py b/TestON/tests/HA/HAsanity/HAsanity.py
index fd850fc..f23935f 100644
--- a/TestON/tests/HA/HAsanity/HAsanity.py
+++ b/TestON/tests/HA/HAsanity/HAsanity.py
@@ -721,7 +721,7 @@
                 # check for all intent partitions
                 topics = []
                 for i in range( 14 ):
-                    topics.append( "intent-partition-" + str( i ) )
+                    topics.append( "work-partition-" + str( i ) )
                 main.log.debug( topics )
                 ONOStopics = [ j['topic'] for j in parsedLeaders ]
                 for topic in topics:
@@ -866,7 +866,7 @@
                     # check for election
                     topics = []
                     for i in range( 14 ):
-                        topics.append( "intent-partition-" + str( i ) )
+                        topics.append( "work-partition-" + str( i ) )
                     # FIXME: this should only be after we start the app
                     topics.append( "org.onosproject.election" )
                     main.log.debug( topics )
@@ -1016,7 +1016,7 @@
                 # TODO: Look at Devices as topics now that it uses this system
                 topics = []
                 for i in range( 14 ):
-                    topics.append( "intent-partition-" + str( i ) )
+                    topics.append( "work-partition-" + str( i ) )
                 # FIXME: this should only be after we start the app
                 # FIXME: topics.append( "org.onosproject.election" )
                 # Print leaders output
@@ -1115,7 +1115,7 @@
                     # check for election
                     topics = []
                     for i in range( 14 ):
-                        topics.append( "intent-partition-" + str( i ) )
+                        topics.append( "work-partition-" + str( i ) )
                     # FIXME: this should only be after we start the app
                     topics.append( "org.onosproject.election" )
                     main.log.debug( topics )
diff --git a/TestON/tests/HA/HAscaling/HAscaling.py b/TestON/tests/HA/HAscaling/HAscaling.py
index 4fd29f3..f3ccacf 100644
--- a/TestON/tests/HA/HAscaling/HAscaling.py
+++ b/TestON/tests/HA/HAscaling/HAscaling.py
@@ -202,7 +202,7 @@
         #       index = The number of the graph under plot name
         job = "HAscaling"
         plotName = "Plot-HA"
-        index = "0"
+        index = "1"
         graphs = '<ac:structured-macro ac:name="html">\n'
         graphs += '<ac:plain-text-body><![CDATA[\n'
         graphs += '<iframe src="https://onos-jenkins.onlab.us/job/' + job +\
@@ -770,7 +770,7 @@
                 # check for all intent partitions
                 topics = []
                 for i in range( 14 ):
-                    topics.append( "intent-partition-" + str( i ) )
+                    topics.append( "work-partition-" + str( i ) )
                 main.log.debug( topics )
                 ONOStopics = [ j['topic'] for j in parsedLeaders ]
                 for topic in topics:
@@ -926,7 +926,7 @@
                     # check for election
                     topics = []
                     for i in range( 14 ):
-                        topics.append( "intent-partition-" + str( i ) )
+                        topics.append( "work-partition-" + str( i ) )
                     # FIXME: this should only be after we start the app
                     topics.append( "org.onosproject.election" )
                     main.log.debug( topics )
@@ -1076,7 +1076,7 @@
                 # TODO: Look at Devices as topics now that it uses this system
                 topics = []
                 for i in range( 14 ):
-                    topics.append( "intent-partition-" + str( i ) )
+                    topics.append( "work-partition-" + str( i ) )
                 # FIXME: this should only be after we start the app
                 # FIXME: topics.append( "org.onosproject.election" )
                 # Print leaders output
@@ -1175,7 +1175,7 @@
                     # check for election
                     topics = []
                     for i in range( 14 ):
-                        topics.append( "intent-partition-" + str( i ) )
+                        topics.append( "work-partition-" + str( i ) )
                     # FIXME: this should only be after we start the app
                     topics.append( "org.onosproject.election" )
                     main.log.debug( topics )
diff --git a/TestON/tests/HA/HAsingleInstanceRestart/HAsingleInstanceRestart.py b/TestON/tests/HA/HAsingleInstanceRestart/HAsingleInstanceRestart.py
index be59032..f158408 100644
--- a/TestON/tests/HA/HAsingleInstanceRestart/HAsingleInstanceRestart.py
+++ b/TestON/tests/HA/HAsingleInstanceRestart/HAsingleInstanceRestart.py
@@ -680,7 +680,7 @@
                 # check for all intent partitions
                 topics = []
                 for i in range( 14 ):
-                    topics.append( "intent-partition-" + str( i ) )
+                    topics.append( "work-partition-" + str( i ) )
                 main.log.debug( topics )
                 ONOStopics = [ j['topic'] for j in parsedLeaders ]
                 for topic in topics:
@@ -825,7 +825,7 @@
                     # check for election
                     topics = []
                     for i in range( 14 ):
-                        topics.append( "intent-partition-" + str( i ) )
+                        topics.append( "work-partition-" + str( i ) )
                     # FIXME: this should only be after we start the app
                     topics.append( "org.onosproject.election" )
                     main.log.debug( topics )
@@ -967,7 +967,7 @@
                 # TODO: Look at Devices as topics now that it uses this system
                 topics = []
                 for i in range( 14 ):
-                    topics.append( "intent-partition-" + str( i ) )
+                    topics.append( "work-partition-" + str( i ) )
                 # FIXME: this should only be after we start the app
                 # FIXME: topics.append( "org.onosproject.election" )
                 # Print leaders output
@@ -1066,7 +1066,7 @@
                     # check for election
                     topics = []
                     for i in range( 14 ):
-                        topics.append( "intent-partition-" + str( i ) )
+                        topics.append( "work-partition-" + str( i ) )
                     # FIXME: this should only be after we start the app
                     topics.append( "org.onosproject.election" )
                     main.log.debug( topics )
diff --git a/TestON/tests/HA/HAstopNodes/HAstopNodes.py b/TestON/tests/HA/HAstopNodes/HAstopNodes.py
index a3b818f..388200a 100644
--- a/TestON/tests/HA/HAstopNodes/HAstopNodes.py
+++ b/TestON/tests/HA/HAstopNodes/HAstopNodes.py
@@ -732,7 +732,7 @@
                 # check for all intent partitions
                 topics = []
                 for i in range( 14 ):
-                    topics.append( "intent-partition-" + str( i ) )
+                    topics.append( "work-partition-" + str( i ) )
                 main.log.debug( topics )
                 ONOStopics = [ j['topic'] for j in parsedLeaders ]
                 for topic in topics:
@@ -877,7 +877,7 @@
                     # check for election
                     topics = []
                     for i in range( 14 ):
-                        topics.append( "intent-partition-" + str( i ) )
+                        topics.append( "work-partition-" + str( i ) )
                     # FIXME: this should only be after we start the app
                     topics.append( "org.onosproject.election" )
                     main.log.debug( topics )
@@ -1027,7 +1027,7 @@
                 # TODO: Look at Devices as topics now that it uses this system
                 topics = []
                 for i in range( 14 ):
-                    topics.append( "intent-partition-" + str( i ) )
+                    topics.append( "work-partition-" + str( i ) )
                 # FIXME: this should only be after we start the app
                 # FIXME: topics.append( "org.onosproject.election" )
                 # Print leaders output
@@ -1126,7 +1126,7 @@
                     # check for election
                     topics = []
                     for i in range( 14 ):
-                        topics.append( "intent-partition-" + str( i ) )
+                        topics.append( "work-partition-" + str( i ) )
                     # FIXME: this should only be after we start the app
                     topics.append( "org.onosproject.election" )
                     main.log.debug( topics )
diff --git a/TestON/tests/HA/HAswapNodes/HAswapNodes.py b/TestON/tests/HA/HAswapNodes/HAswapNodes.py
index 5c8d694..24daf1d 100644
--- a/TestON/tests/HA/HAswapNodes/HAswapNodes.py
+++ b/TestON/tests/HA/HAswapNodes/HAswapNodes.py
@@ -196,7 +196,7 @@
         #       index = The number of the graph under plot name
         job = "HAswapNodes"
         plotName = "Plot-HA"
-        index = "0"
+        index = "2"
         graphs = '<ac:structured-macro ac:name="html">\n'
         graphs += '<ac:plain-text-body><![CDATA[\n'
         graphs += '<iframe src="https://onos-jenkins.onlab.us/job/' + job +\
@@ -764,7 +764,7 @@
                 # check for all intent partitions
                 topics = []
                 for i in range( 14 ):
-                    topics.append( "intent-partition-" + str( i ) )
+                    topics.append( "work-partition-" + str( i ) )
                 main.log.debug( topics )
                 ONOStopics = [ j['topic'] for j in parsedLeaders ]
                 for topic in topics:
@@ -920,7 +920,7 @@
                     # check for election
                     topics = []
                     for i in range( 14 ):
-                        topics.append( "intent-partition-" + str( i ) )
+                        topics.append( "work-partition-" + str( i ) )
                     # FIXME: this should only be after we start the app
                     topics.append( "org.onosproject.election" )
                     main.log.debug( topics )
@@ -1070,7 +1070,7 @@
                 # TODO: Look at Devices as topics now that it uses this system
                 topics = []
                 for i in range( 14 ):
-                    topics.append( "intent-partition-" + str( i ) )
+                    topics.append( "work-partition-" + str( i ) )
                 # FIXME: this should only be after we start the app
                 # FIXME: topics.append( "org.onosproject.election" )
                 # Print leaders output
@@ -1169,7 +1169,7 @@
                     # check for election
                     topics = []
                     for i in range( 14 ):
-                        topics.append( "intent-partition-" + str( i ) )
+                        topics.append( "work-partition-" + str( i ) )
                     # FIXME: this should only be after we start the app
                     topics.append( "org.onosproject.election" )
                     main.log.debug( topics )
diff --git a/TestON/tests/USECASE/SegmentRouting/SRLinkFailure/SRLinkFailure.py b/TestON/tests/USECASE/SegmentRouting/SRLinkFailure/SRLinkFailure.py
index b388a64..0bef93e 100755
--- a/TestON/tests/USECASE/SegmentRouting/SRLinkFailure/SRLinkFailure.py
+++ b/TestON/tests/USECASE/SegmentRouting/SRLinkFailure/SRLinkFailure.py
@@ -35,7 +35,7 @@
         run.killLink( main, 'spine101', 'leaf2', switches='4', links='6' )
         run.pingAll( main, "CASE1_Failure" )
         run.restoreLink( main, 'spine101', 'leaf2', 'of:0000000000000101',
-                         'of:0000000000000002', '2', '1', '4', '8' )
+                         'of:0000000000000002', '2', '3', '4', '8' )
         run.pingAll( main, "CASE1_Recovery" )
         # TODO Dynamic config of hosts in subnet
         # TODO Dynamic config of host not in subnet
@@ -69,7 +69,7 @@
         run.killLink( main, 'spine101', 'leaf2', switches='8', links='30' )
         run.pingAll( main, "CASE2_Failure" )
         run.restoreLink( main, 'spine101', 'leaf2', 'of:0000000000000101',
-                         'of:0000000000000002', '2', '1', '8', '32' )
+                         'of:0000000000000002', '2', '3', '8', '32' )
         run.pingAll( main, "CASE2_Recovery" )
         # TODO Dynamic config of hosts in subnet
         # TODO Dynamic config of host not in subnet
@@ -103,7 +103,7 @@
         run.killLink( main, 'spine101', 'leaf2', switches='4', links='6' )
         run.pingAll( main, "CASE3_Failure" )
         run.restoreLink( main, 'spine101', 'leaf2', 'of:0000000000000101',
-                         'of:0000000000000002', '2', '1', '4', '8' )
+                         'of:0000000000000002', '2', '3', '4', '8' )
         run.pingAll( main, "CASE3_Recovery" )
         # TODO Dynamic config of hosts in subnet
         # TODO Dynamic config of host not in subnet
@@ -137,7 +137,7 @@
         run.killLink( main, 'spine101', 'leaf2', switches='8', links='30' )
         run.pingAll( main, "CASE2_Failure" )
         run.restoreLink( main, 'spine101', 'leaf2', 'of:0000000000000101',
-                         'of:0000000000000002', '2', '1', '8', '32' )
+                         'of:0000000000000002', '2', '3', '8', '32' )
         run.pingAll( main, "CASE2_Recovery" )
         # TODO Dynamic config of hosts in subnet
         # TODO Dynamic config of host not in subnet
diff --git a/TestON/tests/USECASE/SegmentRouting/dependencies/Testcaselib.py b/TestON/tests/USECASE/SegmentRouting/dependencies/Testcaselib.py
index dcaddbf..5da5834 100755
--- a/TestON/tests/USECASE/SegmentRouting/dependencies/Testcaselib.py
+++ b/TestON/tests/USECASE/SegmentRouting/dependencies/Testcaselib.py
@@ -7,6 +7,9 @@
 
 
 class Testcaselib:
+
+    useSSH=False
+
     @staticmethod
     def initTest( main ):
         """
@@ -98,7 +101,7 @@
                                        apps,
                                        tempOnosIp,
                                        onosUser,
-                                       useSSH=True )
+                                       useSSH=Testcaselib.useSSH )
         cellResult = main.ONOSbench.setCell( "temp" )
         verifyResult = main.ONOSbench.verifyCell( )
         stepResult = cellResult and verifyResult
@@ -125,15 +128,16 @@
                                  actual=stepResult,
                                  onpass="Successfully installed ONOS package",
                                  onfail="Failed to install ONOS package" )
-        for i in range( main.numCtrls ):
-            onosInstallResult = onosInstallResult and \
-                                main.ONOSbench.onosSecureSSH(
-                                        node=main.ONOSip[ i ] )
-        stepResult = onosInstallResult
-        utilities.assert_equals( expect=main.TRUE,
-                                 actual=stepResult,
-                                 onpass="Successfully secure SSH",
-                                 onfail="Failed to secure SSH" )
+        if Testcaselib.useSSH:
+            for i in range( main.numCtrls ):
+                onosInstallResult = onosInstallResult and \
+                                    main.ONOSbench.onosSecureSSH(
+                                            node=main.ONOSip[ i ] )
+            stepResult = onosInstallResult
+            utilities.assert_equals( expect=main.TRUE,
+                                     actual=stepResult,
+                                     onpass="Successfully secure SSH",
+                                     onfail="Failed to secure SSH" )
         main.step( "Starting ONOS service" )
         stopResult, startResult, onosIsUp = main.TRUE, main.TRUE, main.TRUE,
         for i in range( main.numCtrls ):
@@ -240,12 +244,14 @@
                 onpass="Flow status is correct!",
                 onfail="Flow status is wrong!" )
         if dumpflows:
-            main.ONOSbench.dumpFlows( main.ONOSip[ main.active ],
-                                      main.logdir,
-                                      "flowsBefore" + main.cfgName )
-            main.ONOSbench.dumpGroups( main.ONOSip[ main.active ],
-                                       main.logdir,
-                                       "groupsBefore" + main.cfgName )
+            main.ONOSbench.dumpONOSCmd( main.ONOSip[ main.active ],
+                                        "flows",
+                                        main.logdir,
+                                        "flowsBefore" + main.cfgName )
+            main.ONOSbench.dumpONOSCmd( main.ONOSip[ main.active ],
+                                        "groups",
+                                        main.logdir,
+                                        "groupsBefore" + main.cfgName )
 
     @staticmethod
     def pingAll( main, tag="", dumpflows=True ):
@@ -261,10 +267,14 @@
                                      onpass="IP connectivity successfully tested",
                                      onfail="IP connectivity failed" )
         if dumpflows:
-            main.ONOSbench.dumpFlows( main.ONOSip[ main.active ],
-                                      main.logdir, "flowsOn" + tag )
-            main.ONOSbench.dumpGroups( main.ONOSip[ main.active ],
-                                       main.logdir, "groupsOn" + tag )
+            main.ONOSbench.dumpONOSCmd( main.ONOSip[ main.active ],
+                                        "flows",
+                                        main.logdir,
+                                        "flowsOn" + tag )
+            main.ONOSbench.dumpONOSCmd( main.ONOSip[ main.active ],
+                                        "groups",
+                                        main.logdir,
+                                        "groupsOn" + tag )
 
     @staticmethod
     def killLink( main, end1, end2, switches, links ):
@@ -276,6 +286,7 @@
         main.linkSleep = float( main.params[ 'timers' ][ 'LinkDiscovery' ] )
         main.step( "Kill link between %s and %s" % (end1, end2) )
         LinkDown = main.Mininet1.link( END1=end1, END2=end2, OPTION="down" )
+        LinkDown = main.Mininet1.link( END2=end1, END1=end2, OPTION="down" )
         main.log.info(
                 "Waiting %s seconds for link down to be discovered" % main.linkSleep )
         time.sleep( main.linkSleep )
@@ -311,8 +322,12 @@
             main.log.info(
                     "Waiting %s seconds for link up to be discovered" % main.linkSleep )
             time.sleep( main.linkSleep )
-            main.CLIs[ main.active ].portstate( dpid=dpid1, port=port1 )
-            main.CLIs[ main.active ].portstate( dpid=dpid2, port=port2 )
+
+            for i in range(0, main.numCtrls):
+                onosIsUp = main.ONOSbench.isup( main.ONOSip[ i ] )
+                if onosIsUp == main.TRUE:
+                    main.CLIs[ i ].portstate( dpid=dpid1, port=port1 )
+                    main.CLIs[ i ].portstate( dpid=dpid2, port=port2 )
             time.sleep( main.linkSleep )
 
             result = main.CLIs[ main.active ].checkStatus( numoswitch=switches,
