diff --git a/TestON/drivers/common/cli/emulator/mininetclidriver.py b/TestON/drivers/common/cli/emulator/mininetclidriver.py
index 7a4e565..439b4fb 100644
--- a/TestON/drivers/common/cli/emulator/mininetclidriver.py
+++ b/TestON/drivers/common/cli/emulator/mininetclidriver.py
@@ -3915,6 +3915,8 @@
         if hostHome is not None:
             self.hostHome = hostHome
         try:
+            self.handle.sendline( "" )
+            self.handle.expect( self.Prompt() )
             if not host:
                 host = self.name
             if self.mExecDir:
diff --git a/TestON/drivers/common/cli/onosclidriver.py b/TestON/drivers/common/cli/onosclidriver.py
index 4112977..ef69aec 100755
--- a/TestON/drivers/common/cli/onosclidriver.py
+++ b/TestON/drivers/common/cli/onosclidriver.py
@@ -2689,7 +2689,7 @@
         count = self.getTotalFlowsNum( timeout=timeout )
         count = int( count ) if count else 0
         main.log.debug( "found {} flows".format( count ) )
-        return count if ( count > min ) else False
+        return count if ( count >= min ) else False
 
     def checkFlowsState( self, isPENDING=True, timeout=60, noExit=False ):
         """
@@ -3133,7 +3133,7 @@
         count = self.flowAddedCount( deviceId, core )
         count = int( count ) if count else 0
         main.log.debug( "found {} flows".format( count ) )
-        return count if ((count > expectedFlowCount) if (comparison == 0) else (count == expectedFlowCount)) else main.FALSE
+        return count if ((count >= expectedFlowCount) if (comparison == 0) else (count == expectedFlowCount)) else main.FALSE
 
     def getAllDevicesId( self ):
         """
@@ -3261,7 +3261,7 @@
             main.log.exception( self.name + ": Uncaught exception!" )
             main.cleanAndExit()
 
-    def checkStatus( self, numoswitch, numolink = -1, numoctrl = -1, logLevel="info" ):
+    def checkStatus( self, numoswitch, numolink = -1, numoctrl = -1, numoSCCs=1, logLevel="info" ):
         """
         Checks the number of switches & links that ONOS sees against the
         supplied values. By default this will report to main.log, but the
@@ -3270,6 +3270,7 @@
         Params: numoswitch = expected number of switches
                 numolink = expected number of links
                 numoctrl = expected number of controllers
+                numoSCCs = Number of expected SCCs
                 logLevel = level to log to.
                 Currently accepts 'info', 'warn' and 'report'
 
@@ -3292,36 +3293,52 @@
             devices = topology.get( 'devices', False )
             links = topology.get( 'links', False )
             nodes = summary.get( 'nodes', False )
-            if devices is False or links is False or nodes is False:
+            SCCs = summary.get( 'SCC(s)', False )
+            if devices is False or links is False or nodes is False or SCCs is False:
+                main.log.warn( "Issues parsing topology and summary output" )
+                main.log.debug( topology )
+                main.log.debug( summary )
                 return main.ERROR
             switchCheck = ( int( devices ) == int( numoswitch ) )
-            # Is the number of links is what we expected
+            if not switchCheck:
+                main.log.debug( "switch Check Failed" )
             linkCheck = ( int( links ) == int( numolink ) ) or int( numolink ) == -1
+            if not linkCheck:
+                main.log.debug( "link Check Failed" )
             nodeCheck = ( int( nodes ) == int( numoctrl ) ) or int( numoctrl ) == -1
-            if switchCheck and linkCheck and nodeCheck:
+            if not nodeCheck:
+                main.log.debug( "node Check Failed" )
+            SCCsCheck = ( int( SCCs ) == int( numoSCCs ) ) or int( numoSCCs ) == -1
+            if not SCCsCheck:
+                main.log.debug( "SCCs Check Failed" )
+            if switchCheck and linkCheck and nodeCheck and SCCsCheck:
                 # We expected the correct numbers
-                output = output + "The number of links and switches match "\
+                output = output + "The number of links, switches, nodes, and SCCs match "\
                     + "what was expected"
                 result = main.TRUE
             else:
                 output = output + \
-                    "The number of links and switches does not match " + \
+                    "The number of links, switches, nodes, and SCCs  does not match " + \
                     "what was expected"
                 result = main.FALSE
-            output = output + "\n ONOS sees %i devices" % int( devices )
-            output = output + " (%i expected) " % int( numoswitch )
-            if int( numolink ) > 0:
+            output = output + "\n ONOS sees %i devices " % int( devices )
+            output = output + "(%i expected) " % int( numoswitch )
+            if int( numolink ) >= 0:
                 output = output + "and %i links " % int( links )
-                output = output + "(%i expected)" % int( numolink )
-            if int( numoctrl ) > 0:
+                output = output + "(%i expected) " % int( numolink )
+            if int( numoctrl ) >= 0:
                 output = output + "and %i controllers " % int( nodes )
-                output = output + "(%i expected)" % int( numoctrl )
+                output = output + "(%i expected) " % int( numoctrl )
+            if int( numoSCCs ) >= 0:
+                output = output + "and %i SCCs " % int( SCCs )
+                output = output + "(%i expected)" % int( numoSCCs )
             if logLevel == "report":
                 main.log.report( output )
             elif logLevel == "warn":
                 main.log.warn( output )
             else:
                 main.log.info( output )
+            main.TOPOOUTPUT = output
             return result
         except pexpect.EOF:
             main.log.error( self.name + ": EOF exception found" )
@@ -6757,7 +6774,7 @@
             output = ""
             for cmdStr in cmdList:
                 self.handle.sendline( cmdStr )
-                self.handle.expect( self.dockerPrompt )
+                self.handle.expect( self.dockerPrompt, timeout=120 )
                 self.handle.sendline( "" )
                 self.handle.expect( self.dockerPrompt )
                 handle = self.handle.before
diff --git a/TestON/drivers/common/cli/onosdriver.py b/TestON/drivers/common/cli/onosdriver.py
index a2fade7..e9cca52 100755
--- a/TestON/drivers/common/cli/onosdriver.py
+++ b/TestON/drivers/common/cli/onosdriver.py
@@ -2574,7 +2574,7 @@
 
         return main.TRUE if onosStatus else main.FALSE
 
-    def onosNetCfg( self, controllerIp, path, fileName, user=None, password=None):
+    def onosNetCfg( self, controllerIp, path, fileName, user=None, password=None ):
         """
         Push a specified json file to ONOS through the onos-netcfg service
 
@@ -2967,7 +2967,8 @@
             main.log.exception( self.name + ": Uncaught exception!" )
             main.cleanAndExit()
 
-    def onosApp( self, onosIP, option, fileName, filePath='~/onos/'):
+    def onosApp( self, onosIP, option, fileName, filePath='~/onos/',
+                 appName=None, user=None, password=None ):
         """
         Wrapper for onos-app script
 
@@ -2977,14 +2978,21 @@
             [ list|install|install!|reinstall|reinstall!|activate|deactivate|uninstall ]
         - fileName - The name of the app file
         Optional Arguments:
+        - appName - The name of the app, some options require this
         - filePath - The location of the file
+        - user - ONOS cli user
+        - password - ONOS cli password
 
         Returns main.TRUE on successfully executing the command, and main.FALSE if
         there is an error.
         """
         # FIXME: Not all options may work, more testing is required, only tested with install(!)
         try:
-            cmd = "onos-app %s %s %s/%s" % ( onosIP, option, filePath, fileName )
+            cmd = "onos-app %s %s %s %s/%s" % ( onosIP, option, appName if "reinstall" in option else "", filePath, fileName )
+            if user:
+                cmd += " -u %s" % user
+            if password:
+                cmd += " -p %s" % password
             main.log.info( self.name + ": Sending: " + cmd )
             self.handle.sendline( cmd )
             self.handle.expect( self.prompt )
diff --git a/TestON/drivers/common/cli/stratumosswitchdriver.py b/TestON/drivers/common/cli/stratumosswitchdriver.py
index 79f1d89..3eae155 100644
--- a/TestON/drivers/common/cli/stratumosswitchdriver.py
+++ b/TestON/drivers/common/cli/stratumosswitchdriver.py
@@ -203,20 +203,21 @@
             main.log.info( "Modify start container script" )
             self.handle.sendline( "sed -i '/--privileged/a \    --name stratum \\\\' start-stratum-container.sh" )
             self.handle.expect( self.prompt )
-            #self.handle.sendline( "sed -i '/LOG_DIR:\/var\/log\/stratum/a \    --entrypoint /bin/bash \\\\' start-stratum-container.sh" )
-            #self.handle.expect( self.prompt )
             # TODO: Add docker pull command to the start-stratum-container.sh script
 
             main.log.info( "Getting chassis config" )
             # TODO: Parameterize this
-            self.handle.sendline( "wget --backups=1 https://raw.githubusercontent.com/stratum/stratum/master/stratum/hal/config/x86-64-accton-wedge100bf-32x-r0/chassis_config.pb.txt" )
-            self.handle.expect( self.prompt )
+            filename = "~/TestON/tests/USECASE/SegmentRouting/dependencies/chassis_config.pb.txt.qa"
+            main.ONOSbench.secureCopy( self.user_name, self.ip_address, filename, "~/TestON/chassis_config.pb.txt", pwd=self.pwd, direction="to" )
             main.log.info( "Modify chassis config" )
             # TODO: Parameterize this
-            self.handle.sendline( "sed -i '$!N;s/\(port: [5|6]\\n\  speed_bps: \)\([0-9]*\)/\\1 40000000000/;P;D' chassis_config.pb.txt" )
-            self.handle.expect( self.prompt )
             self.handle.sendline( "export CHASSIS_CONFIG=~/TestON/chassis_config.pb.txt" )
             self.handle.expect( self.prompt )
+            #self.handle.sendline( "export DOCKER_IMAGE=registry.aetherproject.org/tost/stratum-bfrt" )
+            self.handle.sendline( "export DOCKER_IMAGE=stratumproject/stratum-bf" )
+            self.handle.expect( self.prompt )
+            self.handle.sendline( "export DOCKER_IMAGE_TAG=9.2.0" )
+            self.handle.expect( self.prompt )
             self.handle.sendline( "chmod +x start-stratum-container.sh" )
             self.handle.expect( self.prompt )
         except pexpect.TIMEOUT:
@@ -237,7 +238,7 @@
         """
         try:
             main.log.info( "Starting switch agent" )
-            self.handle.sendline( "./start-stratum-container.sh --bf-sim" )
+            self.handle.sendline( "./start-stratum-container.sh --bf-sim --bf-switchd-background=false" )
             self.handle.expect( "Chassis config pushed successfully." )
             return main.TRUE
         except pexpect.TIMEOUT:
diff --git a/TestON/drivers/common/clidriver.py b/TestON/drivers/common/clidriver.py
index 928db71..3083f44 100644
--- a/TestON/drivers/common/clidriver.py
+++ b/TestON/drivers/common/clidriver.py
@@ -274,7 +274,7 @@
                     timeout=120 )
 
     def secureCopy( self, userName, ipAddress, filePath, dstPath, pwd="",
-                    direction="from" ):
+                    direction="from", options="" ):
         """
         Definition:
             Execute scp command in linux to copy to/from a remote host
@@ -294,12 +294,13 @@
         ssh_newkey = 'Are you sure you want to continue connecting'
         refused = "ssh: connect to host " + \
                   ipAddress + " port 22: Connection refused"
+        cmd = "scp %s " % options
 
         if direction == "from":
-            cmd = 'scp ' + str( userName ) + '@' + str( ipAddress ) + ':' + \
+            cmd = cmd + str( userName ) + '@' + str( ipAddress ) + ':' + \
                   str( filePath ) + ' ' + str( dstPath )
         elif direction == "to":
-            cmd = 'scp ' + str( filePath ) + ' ' + str( userName ) + \
+            cmd = cmd + str( filePath ) + ' ' + str( userName ) + \
                   '@' + str( ipAddress ) + ':' + str( dstPath )
         else:
             main.log.debug( "Wrong direction using secure copy command!" )
@@ -337,9 +338,11 @@
                 returnVal = main.FALSE
             elif i == 4:  # File Not found
                 main.log.error( self.name + ": No such file found" )
+                main.log.debug( self.handle.before + self.handle.after )
                 returnVal = main.FALSE
             elif i == 5:  # Permission denied
                 main.log.error( self.name + ": Permission denied. Check folder permissions" )
+                main.log.debug( self.handle.before + self.handle.after )
                 returnVal = main.FALSE
             elif i == 6:  # prompt returned
                 return returnVal
@@ -356,7 +359,7 @@
         self.handle.expect( self.prompt )
         return returnVal
 
-    def scp( self, remoteHost, filePath, dstPath, direction="from" ):
+    def scp( self, remoteHost, filePath, dstPath, direction="from", options="" ):
         """
         Definition:
             Execute scp command in linux to copy to/from a remote host
@@ -375,7 +378,8 @@
                                 filePath,
                                 dstPath,
                                 pwd=remoteHost.pwd,
-                                direction=direction )
+                                direction=direction,
+                                options=options )
 
     def sshToNode( self, ipAddress, uName="sdn", pwd="rocks" ):
         ssh_newkey = 'Are you sure you want to continue connecting'
diff --git a/TestON/tests/USECASE/SegmentRouting/SRBridging/SRBridging.params.tofino b/TestON/tests/USECASE/SegmentRouting/SRBridging/SRBridging.params.tofino
index 95f1173..fc89308 100644
--- a/TestON/tests/USECASE/SegmentRouting/SRBridging/SRBridging.params.tofino
+++ b/TestON/tests/USECASE/SegmentRouting/SRBridging/SRBridging.params.tofino
@@ -21,25 +21,34 @@
         <stratumRoot>~/stratum</stratumRoot>
         <topology>trellis_fabric.py</topology>
         <lib>routinglib.py,trellislib.py,stratum.py</lib>
-        <trellisOar>/home/sdn/segmentrouting-app-3.0.1-SNAPSHOT.oar</trellisOar>
-        <t3Oar>/home/sdn/t3-app-4.0.0-SNAPSHOT.oar</t3Oar>
     </DEPENDENCY>
 
     <jsonFileSuffix>.hw</jsonFileSuffix>
 
     <MN_DOCKER>
-        <args>--privileged --net host --rm -v topo:/topo -v ~/mininet/custom:/home/root/mininet/custom -v /var/run/openvswitch/:/var/run/openvswitch/ -v /tmp/mn-stratum:/tmp -v /tmp/mn_conf/:/home/root --hostname mn-stratum -v /etc/network/interfaces:/etc/network/interfaces -it -d</args>
+        <args>--privileged --net host --rm -v topo:/topo -v ~/mininet/custom:/home/root/mininet/custom -v /var/run/openvswitch/:/var/run/openvswitch/ -v /tmp/mn-stratum:/tmp -v /tmp/mn_conf/:/home/root/config --hostname mn-stratum -v /etc/network/interfaces:/etc/network/interfaces -it -d</args>
         <name>trellis_mininet</name>
         <home>/home/root/</home>
     </MN_DOCKER>
+    <CLUSTER>
+        # Params for onos docker
+        <dockerSkipBuild>True</dockerSkipBuild>
+        <dockerBuildCmd>make ONOS_VERSION=onos-2.2 DOCKER_TAG=TestON-onos-2.2 onos-build trellis-control-build trellis-t3-build tost-build</dockerBuildCmd> # If using another cmd like make
+        <dockerBuildTimeout>1200</dockerBuildTimeout>
+        <dockerFilePath>~/tost-onos</dockerFilePath>
+        <dockerImageTag>registry.aetherproject.org/tost/tost:master</dockerImageTag>
+        <dockerOptions>-d --rm --network host -v ~/.ssh/authorized_keys:/root/.ssh/authorized_keys -v /tmp/cluster.json:/root/onos/config/cluster.json </dockerOptions> # We start the container detached, so the docker component can connect to cli instead of logs
+        <atomixImageTag>atomix/atomix:3.1.5</atomixImageTag>
+        <atomixOptions>-d --rm --network host -v ~/.ssh/authorized_keys:/root/.ssh/authorized_keys -v /tmp/atomix.json:/opt/atomix/conf/atomix.json </atomixOptions>
+    </CLUSTER>
+
 
     <ENV>
         <cellName>productionCell</cellName>
-        <cellApps>drivers,openflow,fpm,netcfghostprovider,drivers.bmv2,pipelines.fabric,drivers.barefoot</cellApps>
+        <cellApps>drivers,fpm,lldpprovider,hostprovider,netcfghostprovider,drivers.bmv2,org.opencord.fabric-tofino,pipelines.fabric,org.stratumproject.fabric-tna,drivers.barefoot,segmentrouting,t3</cellApps>
     </ENV>
 
     <EXTERNAL_APPS>
-        <fabric-tofino>https://oss.sonatype.org/content/groups/public/org/opencord/fabric-tofino/1.1.0/fabric-tofino-1.1.0.oar</fabric-tofino>
     </EXTERNAL_APPS>
 
     <ONOS_Configuration>
diff --git a/TestON/tests/USECASE/SegmentRouting/SRBridging/SRBridging.topo.0x1.physical b/TestON/tests/USECASE/SegmentRouting/SRBridging/SRBridging.topo.0x1.physical
index 111380e..d7a2bad 100644
--- a/TestON/tests/USECASE/SegmentRouting/SRBridging/SRBridging.topo.0x1.physical
+++ b/TestON/tests/USECASE/SegmentRouting/SRBridging/SRBridging.topo.0x1.physical
@@ -24,7 +24,7 @@
         </ONOScell>
 
         <SwitchLeaf1>
-            <host>10.128.13.232</host>
+            <host>10.128.13.211</host>
             <user>root</user>
             <password>onl</password>
             <type>StratumOSSwitchDriver</type>
@@ -47,13 +47,13 @@
             <type>HostDriver</type>
             <connect_order>6</connect_order>
             <COMPONENTS>
-                <mac>3c:fd:fe:a8:ea:31</mac>
+                <mac>3c:fd:fe:a8:ea:30</mac>
                 <inband>false</inband>
                 <ip>10.0.2.1</ip>
                 <shortName>h1</shortName>
                 <port1>0</port1>
                 <link1>SwitchLeaf1</link1>
-                <interfaceName>ens6f1</interfaceName>
+                <interfaceName>ens6f0</interfaceName>
                 <routes>
                     <route1>
                         <network>10.0.2.0</network>
@@ -72,13 +72,13 @@
             <type>HostDriver</type>
             <connect_order>7</connect_order>
             <COMPONENTS>
-                <mac>3c:fd:fe:a8:ea:30</mac>
+                <mac>3c:fd:fe:a8:ea:31</mac>
                 <inband>false</inband>
                 <ip>10.0.2.2</ip>
                 <shortName>h2</shortName>
                 <port1>0</port1>
                 <link1>SwitchLeaf1</link1>
-                <interfaceName>ens6f0</interfaceName>
+                <interfaceName>ens6f1</interfaceName>
                 <routes>
                     <route1>
                         <network>10.0.2.0</network>
diff --git a/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/SRBridgingTest.py b/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/SRBridgingTest.py
index 56d44ec..f88c85a 100644
--- a/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/SRBridgingTest.py
+++ b/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/SRBridgingTest.py
@@ -29,7 +29,7 @@
         self.topo = dict()
         # TODO: Check minFlowCount of leaf for BMv2 switch
         # (number of spine switch, number of leaf switch, dual-homed, description, minFlowCount - leaf (OvS), minFlowCount - leaf (BMv2))
-        self.topo[ '0x1' ] = ( 0, 1, False, 'single ToR', 28, 28 )
+        self.topo[ '0x1' ] = ( 0, 1, False, 'single ToR', 28, 20 )
         self.topo[ '0x2' ] = ( 0, 2, True, 'dual-homed ToR', 37, 37 )
         self.topo[ '2x2' ] = ( 2, 2, False, '2x2 leaf-spine topology', 37, 32 )
         # TODO: Implement 2x3 topology
@@ -53,6 +53,13 @@
 
             main.case( '%s, with %s, %s switches and %d ONOS instance%s' %
                        ( description, self.topo[ topology ][ 3 ], main.switchType, onosNodes, 's' if onosNodes > 1 else '' ) )
+            spines = self.topo[ topology ][ 0 ]
+            leaves = self.topo[ topology ][ 1 ]
+            switches = spines + leaves
+            links = ( spines * leaves ) * 2
+            if self.topo[ topology ][ 2 ]:
+                links += links
+                links += ( leaves - 1 ) * 2
 
             main.cfgName = 'CASE%01d%01d' % ( test_idx / 10, ( ( test_idx - 1 ) % 10 ) % 4 + 1 )
             main.Cluster.setRunningNode( onosNodes )
@@ -91,11 +98,16 @@
 
             run.checkFlows( main, minFlowCount=self.topo[ topology ][ 5 if main.useBmv2 else 4 ] * self.topo[ topology ][ 1 ], sleep=5 )
             if main.useBmv2:
-                leaf_dpid = [ "device:bmv2:leaf%d" % ( ls + 1 ) for ls in range( self.topo[ topology ][ 1 ]) ]
+                switchPrefix = main.params[ 'DEPENDENCY' ].get( 'switchPrefix' )
+                if switchPrefix == "tofino":
+                    leaf_dpid = [ "device:tofino:leaf%d" % ( ls + 1 ) for ls in range( self.topo[ topology ][ 1 ]) ]
+                else:
+                    leaf_dpid = [ "device:bmv2:leaf%d" % ( ls + 1 ) for ls in range( self.topo[ topology ][ 1 ]) ]
             else:
                 leaf_dpid = [ "of:%016d" % ( ls + 1 ) for ls in range( self.topo[ topology ][ 1 ] ) ]
             for dpid in leaf_dpid:
                 run.checkFlowsByDpid( main, dpid, self.topo[ topology ][ 5 if main.useBmv2 else 4 ], sleep=5 )
+            run.verifyTopology( main, switches, links, onosNodes )
             run.pingAll( main )
         except Exception as e:
             main.log.exception( "Error in runTest" )
diff --git a/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/json/CASE01.json b/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/json/CASE01.json
index ac9c2ca..b6699f0 100644
--- a/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/json/CASE01.json
+++ b/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/json/CASE01.json
@@ -1,9 +1,7 @@
 {
     "devices":{
-        "of:0000000000000001":{
-            "basic":{
-                "driver":"ofdpa-ovs"
-            },
+        "device:tofino:leaf1":{
+            "basic":{},
             "segmentrouting":{
                 "adjacencySids":[],
                 "ipv4Loopback":"192.168.0.1",
diff --git a/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/json/CASE01.json.hw b/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/json/CASE01.json.hw
index 31c166a..b2eb1e6 100644
--- a/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/json/CASE01.json.hw
+++ b/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/json/CASE01.json.hw
@@ -1,17 +1,17 @@
 {
     "devices":{
-        "of:0000000000000001":{
+        "device:tofino:leaf1":{
             "segmentrouting":{
                 "adjacencySids":[],
-                "ipv4Loopback":"10.128.13.232",
+                "ipv4Loopback":"10.128.13.211",
                 "ipv4NodeSid":201,
                 "isEdgeRouter":true,
-                "routerMac":"00:90:fb:64:cc:9e"
+                "routerMac":"00:00:00:00:00:01"
             }
         }
     },
     "ports":{
-        "of:0000000000000001/160":{
+        "device:tofino:leaf1/128":{
             "interfaces":[
                 {
                     "ips":[
@@ -21,7 +21,7 @@
                 }
             ]
         },
-        "of:0000000000000001/168":{
+        "device:tofino:leaf1/136":{
             "interfaces":[
                 {
                     "ips":[
@@ -32,4 +32,4 @@
             ]
         }
     }
-}
\ No newline at end of file
+}
diff --git a/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/json/tofino-onos-netcfg.json b/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/json/tofino-onos-netcfg.json
index 5cc17ed..8c8995a 100644
--- a/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/json/tofino-onos-netcfg.json
+++ b/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/json/tofino-onos-netcfg.json
@@ -3,7 +3,7 @@
     "device:tofino:leaf1": {
       "basic": {
         "name": "leaf1",
-        "managementAddress": "grpc://10.128.13.232:28000?device_id=1",
+        "managementAddress": "grpc://10.128.13.211:28000?device_id=1",
         "driver": "stratum-tofino",
         "pipeconf": "org.opencord.fabric.tofino.montara_sde_9_0_0"
       }
diff --git a/TestON/tests/USECASE/SegmentRouting/SRLinkFailure/dependencies/SRLinkFailFuncs.py b/TestON/tests/USECASE/SegmentRouting/SRLinkFailure/dependencies/SRLinkFailFuncs.py
index 0a0ef5a..4664c9e 100644
--- a/TestON/tests/USECASE/SegmentRouting/SRLinkFailure/dependencies/SRLinkFailFuncs.py
+++ b/TestON/tests/USECASE/SegmentRouting/SRLinkFailure/dependencies/SRLinkFailFuncs.py
@@ -82,17 +82,20 @@
                 pass
             # xconnects need to be loaded after topology
             run.loadXconnects( main )
+            switches = self.topo[ Topo ][ 0 ] + self.topo[ Topo ][ 1 ]
+            links = ( self.topo[ Topo ][ 0 ] * self.topo[ Topo ][ 1 ] ) * 2
             # pre-configured routing and bridging test
+            run.verifyTopology( main, switches, links, numNodes )
             run.checkFlows( main, minFlowCount=minFlow )
-            run.pingAll( main )
-            switch = self.topo[ Topo ][ 0 ] + self.topo[ Topo ][ 1 ]
-            link = ( self.topo[ Topo ][ 0 ] + self.topo[ Topo ][ 1 ] ) * self.topo[ Topo ][ 0 ]
+            run.pingAll( main, 'CASE{}'.format( caseNum ) )
             # link failure
-            run.killLink( main, self.switchOne, self.switchTwo, switches='{}'.format( switch ), links='{}'.format( link - 2 ) )
-            run.pingAll( main, "CASE{}_Failure".format( caseNum ) )
-            run.restoreLink( main, self.switchOne, self.switchTwo, '{}'.format( switch ), '{}'.format( link ),
+            run.killLink( main, self.switchOne, self.switchTwo, switches='{}'.format( switches ), links='{}'.format( links - 2 ) )
+            run.pingAll( main, 'CASE{}_Failure'.format( caseNum ) )
+            run.restoreLink( main, self.switchOne, self.switchTwo, '{}'.format( switches ), '{}'.format( links ),
                              True, self.dpidOne, self.dpidTwo, self.portOne, self.portTwo )
-            run.pingAll( main, "CASE{}_Recovery".format( caseNum ) )
+            run.checkFlows( main, minFlowCount=minFlow, tag='CASE{}_Recovery'.format( caseNum ) )
+            run.pingAll( main, 'CASE{}_Recovery'.format( caseNum ) )
+            run.verifyTopology( main, switches, links, numNodes )
             # TODO Dynamic config of hosts in subnet
             # TODO Dynamic config of host not in subnet
             # TODO Dynamic config of vlan xconnect
diff --git a/TestON/tests/USECASE/SegmentRouting/SROnosFailure/dependencies/SROnosFailureFuncs.py b/TestON/tests/USECASE/SegmentRouting/SROnosFailure/dependencies/SROnosFailureFuncs.py
index a5ff3ac..96bf84d 100644
--- a/TestON/tests/USECASE/SegmentRouting/SROnosFailure/dependencies/SROnosFailureFuncs.py
+++ b/TestON/tests/USECASE/SegmentRouting/SROnosFailure/dependencies/SROnosFailureFuncs.py
@@ -76,16 +76,18 @@
                 pass
             # xconnects need to be loaded after topology
             run.loadXconnects( main )
+            switches = self.topo[ Topo ][ 0 ] + self.topo[ Topo ][ 1 ]
+            links = ( self.topo[ Topo ][ 0 ] * self.topo[ Topo ][ 1 ] ) * 2
             # pre-configured routing and bridging test
+            run.verifyTopology( main, switches, links, numNodes )
             run.checkFlows( main, minFlowCount=minFlow )
             run.pingAll( main, 'CASE{}'.format( caseNum ) )
-            switch = '{}'.format( self.topo[ Topo ][ 0 ] + self.topo[ Topo ][ 1 ] )
-            link = '{}'.format( ( self.topo[ Topo ][ 0 ] + self.topo[ Topo ][ 1 ] ) * self.topo[ Topo ][ 0 ] )
-            run.killOnos( main, killList, switch, link, '{}'.format( numNodes - 1 ) )
+            run.killOnos( main, killList, switches, links, '{}'.format( numNodes - 1 ) )
             run.pingAll( main, 'CASE{}_Failure'.format( caseNum ) )
-            run.recoverOnos( main, killList, switch, link, '{}'.format( numNodes ) )
+            run.recoverOnos( main, killList, switches, links, '{}'.format( numNodes ) )
             run.checkFlows( main, minFlowCount=minFlow, tag='CASE{}_Recovery'.format( caseNum ) )
             run.pingAll( main, 'CASE{}_Recovery'.format( caseNum ) )
+            run.verifyTopology( main, switches, links, numNodes )
             # TODO Dynamic config of hosts in subnet
             # TODO Dynamic config of host not in subnet
             # TODO Dynamic config of vlan xconnect
diff --git a/TestON/tests/USECASE/SegmentRouting/SRRouting/SRRouting.py b/TestON/tests/USECASE/SegmentRouting/SRRouting/SRRouting.py
index 5ca5f40..d4ed62c 100644
--- a/TestON/tests/USECASE/SegmentRouting/SRRouting/SRRouting.py
+++ b/TestON/tests/USECASE/SegmentRouting/SRRouting/SRRouting.py
@@ -102,7 +102,7 @@
 
     def CASE9( self, main ):
         """
-        Ping between ipv4 and pv6 hosts and external hosts that is not configured in
+        Ping between ipv4 and ipv6 hosts and external hosts that is not configured in
         external router config, but reachable through the use of route-add
         command.
         """
@@ -1353,7 +1353,7 @@
 
     def CASE652( self, main ):
         """
-        Move a dual-homed host from porst 1A and 1B to ports 2A and 2B
+        Move a dual-homed host from ports 1A and 1B to ports 2A and 2B
         Host retains the same MAC and IP address
         Test connectivity (expect no failure)
         """
diff --git a/TestON/tests/USECASE/SegmentRouting/SRRouting/dependencies/SRRoutingTest.py b/TestON/tests/USECASE/SegmentRouting/SRRouting/dependencies/SRRoutingTest.py
index 24864e5..9c1b8c1 100644
--- a/TestON/tests/USECASE/SegmentRouting/SRRouting/dependencies/SRRoutingTest.py
+++ b/TestON/tests/USECASE/SegmentRouting/SRRouting/dependencies/SRRoutingTest.py
@@ -266,14 +266,32 @@
     Verify host IP assignment, flow/group number and pings
     """
     from tests.USECASE.SegmentRouting.dependencies.Testcaselib import Testcaselib as lib
-    # Verify host IP assignment
-    lib.verifyOnosHostIp( main )
-    lib.verifyNetworkHostIp( main )
+
+    spines = 4
+    leaves = 6
+    switches = spines + leaves
+    links = 0
+    #links = ( spines * leaves ) * 2
+    # Some double links, spines 101 and 102 to leaves 2-5
+    links += ( 2 * 4 * 2 ) * 2
+    # Some paired leaves
+    links += ( ( leaves - 2 ) / 2 ) * 2
+    # Paired spines
+    links += ( spines / 2 ) * 2
+    # single homed leaf to spines
+    links += ( 2 * 2 ) * 2
+
+    lib.verifyTopology( main, switches, links, len( main.Cluster.runningNodes ) )
     # check flows / groups numbers
     if countFlowsGroups:
         lib.checkFlowsGroupsFromFile( main )
     # ping hosts
     verifyPing( main, ipv4, ipv6, disconnected, internal, external )
+    # Verify host IP assignment
+    lib.verifyOnosHostIp( main )
+    lib.verifyNetworkHostIp( main )
+    # ping hosts
+    verifyPing( main, ipv4, ipv6, disconnected, internal, external )
 
 def verifyRouterFailure( main, routerToKill, affectedIpv4Hosts=[], affectedIpv6Hosts=[],
                          ipv4=True, ipv6=True, countFlowsGroups=False ):
diff --git a/TestON/tests/USECASE/SegmentRouting/SRRouting/dependencies/json/TEST_CONFIG_ipv4=1_ipv6=0.json b/TestON/tests/USECASE/SegmentRouting/SRRouting/dependencies/json/TEST_CONFIG_ipv4=1_ipv6=0.json
index 0ff7a0e..23c7750 100644
--- a/TestON/tests/USECASE/SegmentRouting/SRRouting/dependencies/json/TEST_CONFIG_ipv4=1_ipv6=0.json
+++ b/TestON/tests/USECASE/SegmentRouting/SRRouting/dependencies/json/TEST_CONFIG_ipv4=1_ipv6=0.json
@@ -14,33 +14,25 @@
     "devices":{
         "of:0000000000000001":{
             "basic":{
-                "driver":"ofdpa-ovs",
-                "latitude":30,
-                "longitude":-105,
-                "name":"s001"
+                "driver":"ofdpa-ovs"
             },
             "segmentrouting":{
                 "adjacencySids":[],
                 "ipv4Loopback":"192.168.0.1",
                 "ipv4NodeSid":1001,
                 "isEdgeRouter":true,
-                "name":"s001",
                 "routerMac":"00:00:00:00:00:01"
             }
         },
         "of:0000000000000002":{
             "basic":{
-                "driver":"ofdpa-ovs",
-                "latitude":34,
-                "longitude":-95,
-                "name":"s002"
+                "driver":"ofdpa-ovs"
             },
             "segmentrouting":{
                 "adjacencySids":[],
                 "ipv4Loopback":"192.168.0.2",
                 "ipv4NodeSid":1002,
                 "isEdgeRouter":true,
-                "name":"s002",
                 "pairDeviceId":"of:0000000000000003",
                 "pairLocalPort":5,
                 "routerMac":"00:00:00:00:00:02"
@@ -48,17 +40,13 @@
         },
         "of:0000000000000003":{
             "basic":{
-                "driver":"ofdpa-ovs",
-                "latitude":34,
-                "longitude":-90,
-                "name":"s003"
+                "driver":"ofdpa-ovs"
             },
             "segmentrouting":{
                 "adjacencySids":[],
                 "ipv4Loopback":"192.168.0.3",
                 "ipv4NodeSid":1003,
                 "isEdgeRouter":true,
-                "name":"s003",
                 "pairDeviceId":"of:0000000000000002",
                 "pairLocalPort":5,
                 "routerMac":"00:00:00:00:00:02"
@@ -66,17 +54,13 @@
         },
         "of:0000000000000004":{
             "basic":{
-                "driver":"ofdpa-ovs",
-                "latitude":34,
-                "longitude":-85,
-                "name":"s004"
+                "driver":"ofdpa-ovs"
             },
             "segmentrouting":{
                 "adjacencySids":[],
                 "ipv4Loopback":"192.168.0.4",
                 "ipv4NodeSid":1004,
                 "isEdgeRouter":true,
-                "name":"s004",
                 "pairDeviceId":"of:0000000000000005",
                 "pairLocalPort":5,
                 "routerMac":"00:00:00:00:00:04"
@@ -84,17 +68,13 @@
         },
         "of:0000000000000005":{
             "basic":{
-                "driver":"ofdpa-ovs",
-                "latitude":34,
-                "longitude":-80,
-                "name":"s005"
+                "driver":"ofdpa-ovs"
             },
             "segmentrouting":{
                 "adjacencySids":[],
                 "ipv4Loopback":"192.168.0.5",
                 "ipv4NodeSid":1005,
                 "isEdgeRouter":true,
-                "name":"s005",
                 "pairDeviceId":"of:0000000000000004",
                 "pairLocalPort":5,
                 "routerMac":"00:00:00:00:00:04"
@@ -102,10 +82,7 @@
         },
         "of:0000000000000006":{
             "basic":{
-                "driver":"ofdpa-ovs",
-                "latitude":30,
-                "longitude":-110,
-                "name":"s006"
+                "driver":"ofdpa-ovs"
             },
             "segmentrouting":{
                 "adjacencySids":[],
@@ -114,48 +91,36 @@
                 "ipv6Loopback":"2000::c0a8:0006",
                 "ipv6NodeSid":2006,
                 "isEdgeRouter":true,
-                "name":"s006",
                 "routerMac":"00:00:00:00:00:06"
             }
         },
         "of:0000000000000101":{
             "basic":{
-                "driver":"ofdpa-ovs",
-                "latitude":42,
-                "longitude":-100,
-                "name":"s101"
+                "driver":"ofdpa-ovs"
             },
             "segmentrouting":{
                 "adjacencySids":[],
                 "ipv4Loopback":"192.168.0.101",
                 "ipv4NodeSid":1101,
                 "isEdgeRouter":false,
-                "name":"s101",
                 "routerMac":"00:00:00:00:01:01"
             }
         },
         "of:0000000000000102":{
             "basic":{
-                "driver":"ofdpa-ovs",
-                "latitude":42,
-                "longitude":-95,
-                "name":"s102"
+                "driver":"ofdpa-ovs"
             },
             "segmentrouting":{
                 "adjacencySids":[],
                 "ipv4Loopback":"192.168.0.102",
                 "ipv4NodeSid":1102,
                 "isEdgeRouter":false,
-                "name":"s102",
                 "routerMac":"00:00:00:00:01:02"
             }
         },
         "of:0000000000000103":{
             "basic":{
-                "driver":"ofdpa-ovs",
-                "latitude":35,
-                "longitude":-115,
-                "name":"s103"
+                "driver":"ofdpa-ovs"
             },
             "segmentrouting":{
                 "adjacencySids":[],
@@ -164,16 +129,12 @@
                 "ipv6Loopback":"2000::c0a8:0203",
                 "ipv6NodeSid":2103,
                 "isEdgeRouter":false,
-                "name":"s103",
                 "routerMac":"00:00:00:00:01:03"
             }
         },
         "of:0000000000000104":{
             "basic":{
-                "driver":"ofdpa-ovs",
-                "latitude":35,
-                "longitude":-110,
-                "name":"s104"
+                "driver":"ofdpa-ovs"
             },
             "segmentrouting":{
                 "adjacencySids":[],
@@ -182,7 +143,6 @@
                 "ipv6Loopback":"2000::c0a8:0204",
                 "ipv6NodeSid":2104,
                 "isEdgeRouter":false,
-                "name":"s104",
                 "routerMac":"00:00:00:00:01:04"
             }
         }
diff --git a/TestON/tests/USECASE/SegmentRouting/SRSwitchFailure/dependencies/SRSwitchFailureFuncs.py b/TestON/tests/USECASE/SegmentRouting/SRSwitchFailure/dependencies/SRSwitchFailureFuncs.py
index 908c359..b25ace4 100644
--- a/TestON/tests/USECASE/SegmentRouting/SRSwitchFailure/dependencies/SRSwitchFailureFuncs.py
+++ b/TestON/tests/USECASE/SegmentRouting/SRSwitchFailure/dependencies/SRSwitchFailureFuncs.py
@@ -20,6 +20,7 @@
 """
 
 from tests.USECASE.SegmentRouting.dependencies.Testcaselib import Testcaselib as run
+import tests.USECASE.SegmentRouting.dependencies.cfgtranslator as translator
 
 class SRSwitchFailureFuncs():
 
@@ -29,28 +30,59 @@
         self.topo[ '0x1' ] = ( 0, 1, '--leaf=1 --spine=0', 'single switch' )
         self.topo[ '2x2' ] = ( 2, 2, '', '2x2 Leaf-spine' )
         self.topo[ '4x4' ] = ( 4, 4, '--leaf=4 --spine=4', '4x4 Leaf-spine' )
+        main.switchType = "ovs"
 
     def runTest( self, main, caseNum, numNodes, Topo, minFlow ):
         try:
-            if not hasattr( main, 'apps' ):
-                run.initTest( main )
-
             description = "Switch Failure test with " + self.topo[ Topo ][ 3 ] + " and {} Onos".format( numNodes )
             main.case( description )
-
+            if not hasattr( main, 'apps' ):
+                run.initTest( main )
             main.cfgName = Topo
             main.Cluster.setRunningNode( numNodes )
             run.installOnos( main )
-            run.loadJson( main )
+            suf = main.params.get( 'jsonFileSuffix', '')
+            xconnectFile = "%s%s-xconnects.json%s" % ( main.configPath + main.forJson,
+                    main.cfgName, suf )
+            if main.useBmv2:
+                switchPrefix = main.params[ 'DEPENDENCY' ].get( 'switchPrefix', "bmv2" )
+                # Translate configuration file from OVS-OFDPA to BMv2 driver
+                translator.bmv2ToOfdpa( main ) # Try to cleanup if switching between switch types
+                translator.ofdpaToBmv2( main, switchPrefix=switchPrefix )
+                # translate xconnects
+                translator.bmv2ToOfdpa( main, cfgFile=xconnectFile )
+                translator.ofdpaToBmv2( main, cfgFile=xconnectFile, switchPrefix=switchPrefix )
+            else:
+                translator.bmv2ToOfdpa( main )
+                translator.bmv2ToOfdpa( main, cfgFile=xconnectFile )
+            if suf:
+                run.loadJson( main, suffix=suf )
+            else:
+                run.loadJson( main )
             run.loadChart( main )
-            run.startMininet( main, 'cord_fabric.py', args=self.topo[ Topo ][ 2 ] )
-            # pre-configured routing and bridging test
-            run.checkFlows( main, minFlowCount=minFlow )
-            run.pingAll( main )
-            # switch failure\
+            if hasattr( main, 'Mininet1' ):
+                run.mnDockerSetup( main )  # optionally create and setup docker image
+
+                # Run the test with Mininet
+                mininet_args = self.topo[ Topo ][ 2 ]
+                if main.useBmv2:
+                    mininet_args += ' --switch %s' % main.switchType
+                    main.log.info( "Using %s switch" % main.switchType )
+
+                run.startMininet( main, 'cord_fabric.py', args=mininet_args )
+            else:
+                # Run the test with physical devices
+                # TODO: connect TestON to the physical network
+                pass
+            # xconnects need to be loaded after topology
+            run.loadXconnects( main )
+            # switch failure
             switch = main.params[ 'kill' ][ 'switch' ]
             switchNum = self.topo[ Topo ][ 0 ] + self.topo[ Topo ][ 1 ]
             linkNum = ( self.topo[ Topo ][ 0 ] + self.topo[ Topo ][ 1 ] ) * self.topo[ Topo ][ 0 ]
+            # pre-configured routing and bridging test
+            run.checkFlows( main, minFlowCount=minFlow )
+            run.pingAll( main )
             run.killSwitch( main, switch, switches='{}'.format( switchNum - 1 ), links='{}'.format( linkNum - switchNum ) )
             run.pingAll( main, "CASE{}_Failure".format( caseNum ) )
             run.recoverSwitch( main, switch, switches='{}'.format( switchNum ), links='{}'.format( linkNum ) )
diff --git a/TestON/tests/USECASE/SegmentRouting/dependencies/Testcaselib.py b/TestON/tests/USECASE/SegmentRouting/dependencies/Testcaselib.py
index e20e31a..15c09d5 100644
--- a/TestON/tests/USECASE/SegmentRouting/dependencies/Testcaselib.py
+++ b/TestON/tests/USECASE/SegmentRouting/dependencies/Testcaselib.py
@@ -52,6 +52,7 @@
         main.Network = Network()
         main.physicalNet = False
         main.testSetUp.envSetupDescription( False )
+        main.logdirBase = main.logdir
         stepResult = main.FALSE
         try:
             # Test variables
@@ -113,7 +114,7 @@
         try:
             if main.params.get( 'EXTERNAL_APPS' ):
                 for app, url in main.params[ 'EXTERNAL_APPS' ].iteritems():
-                    main.log.info( "Downloading %s app from %s" )
+                    main.log.info( "Downloading %s app from %s" % ( app, url ) )
                     main.ONOSbench.onosFetchApp( url )
             if not main.apps:
                 main.log.error( "App list is empty" )
@@ -318,7 +319,7 @@
                 main.ONOSbench1.handle.expect( main.ONOSbench1.prompt )
                 main.log.debug( main.ONOSbench1.handle.before + main.ONOSbench1.handle.after )
                 # Configure device name
-                main.ONOSbench1.handle.sendline( "sudo sed -i '/\"basic\"/a\        \"name\": \"%s\",' %s%s" % ( switch, dstPath, dstFileName ) )
+                main.ONOSbench1.handle.sendline( "sudo sed -i '/\"basic\"/a\        \"name\": \"%s:%s\",' %s%s" % ( switchPrefix, switch, dstPath, dstFileName ) )
                 main.ONOSbench1.handle.expect( main.ONOSbench1.prompt )
                 main.log.debug( main.ONOSbench1.handle.before + main.ONOSbench1.handle.after )
                 node = main.Cluster.active(0)
@@ -493,7 +494,7 @@
     @staticmethod
     def checkFlows( main, minFlowCount, tag="", dumpflows=True, sleep=10 ):
         main.step(
-                "Check whether the flow count is bigger than %s" % minFlowCount )
+                "Check whether the flow count is >= %s" % minFlowCount )
         if tag == "":
             tag = 'CASE%d' % main.CurrentTestCaseNumber
         count = utilities.retry( main.Cluster.active( 0 ).CLI.checkFlowCount,
@@ -505,7 +506,7 @@
             count = main.Cluster.active( 0 ).CLI.checkFlowCount()
         utilities.assertEquals(
                 expect=True,
-                actual=( count > minFlowCount ),
+                actual=( count >= minFlowCount ),
                 onpass="Flow count looks correct; found %s, expecting at least %s" % ( count, minFlowCount ),
                 onfail="Flow count looks wrong; found %s, expecting at least %s" % ( count, minFlowCount ) )
 
@@ -548,7 +549,7 @@
     @staticmethod
     def checkFlowsByDpid( main, dpid, minFlowCount, sleep=10 ):
         main.step(
-            "Check whether the flow count of device %s is bigger than %s" % ( dpid, minFlowCount ) )
+            "Check whether the flow count of device %s >= than %s" % ( dpid, minFlowCount ) )
         count = utilities.retry( main.Cluster.active( 0 ).CLI.checkFlowAddedCount,
                                  main.FALSE,
                                  args=( dpid, minFlowCount ),
@@ -558,7 +559,7 @@
             count = main.Cluster.active( 0 ).CLI.checkFlowAddedCount( dpid )
         utilities.assertEquals(
             expect=True,
-            actual=( count > minFlowCount ),
+            actual=( count >= minFlowCount ),
             onpass="Flow count looks correct: " + str( count ),
             onfail="Flow count looks wrong: " + str( count ) )
 
@@ -1062,24 +1063,26 @@
             main.cleanAndExit()
 
     @staticmethod
-    def verifyTopology( main, switches, links, expNodes ):
+    def verifyTopology( main, switches, links, expNodes, SCCs=1 ):
         """
         Verifies that the ONOS cluster has an acuurate view of the topology
 
         Params:
         switches, links, expNodes: number of expected switches, links, and nodes at this point in the test ex.: '4', '6', '2'
+        SCCs = Number of connected topology clusters within the control plane, defaults to 1
         """
         main.step( "Check number of topology elements" )
         topology = utilities.retry( main.Cluster.active( 0 ).CLI.checkStatus,
                                     main.FALSE,
                                     kwargs={ 'numoswitch': switches,
                                              'numolink': links,
-                                             'numoctrl': expNodes },
+                                             'numoctrl': expNodes,
+                                             'numoSCCs': SCCs },
                                     attempts=10,
                                     sleep=12 )
         utilities.assert_equals( expect=main.TRUE, actual=topology,
                                  onpass="Number of topology elements are correct",
-                                 onfail="Unexpected number of links, switches, and/or controllers" )
+                                 onfail="Unexpected number of links, switches, and/or controllers: " + main.TOPOOUTPUT )
 
     @staticmethod
     def killOnos( main, nodes, switches, links, expNodes, sleep=None ):
@@ -1136,7 +1139,7 @@
         main.log.debug( "sleeping %i seconds" % ( sleep ) )
         time.sleep( sleep )
         for i in nodes:
-            node =  main.Cluster.runningNodes[ i ]
+            node = main.Cluster.runningNodes[ i ]
             if node.inDocker:
                 isUp = node.CLI.dockerExec( node.name, dockerPrompt=node.dockerPrompt )
                 isUp = isUp and node.CLI.prepareForCLI()
@@ -1640,7 +1643,7 @@
                 # Stop any leftover container
                 main.Mininet1.dockerStop( dockerName )
                 # TODO: assert on these docker calls
-                main.Mininet1.dockerBuild( dockerFilePath, dockerName )
+                main.Mininet1.dockerBuild( dockerFilePath, dockerName, pull=True )
 
                 confDir = "/tmp/mn_conf/"
                 # Try to ensure the destination exists
@@ -1651,6 +1654,8 @@
                 handle.sendline( "mkdir -p %s" % confDir )
                 handle.expect( main.Mininet1.Prompt() )
                 main.log.debug( handle.before + handle.after )
+                handle.sendline( "sudo rm -rf /tmp/mn-stratum/*" )
+                handle.expect( main.Mininet1.Prompt() )
                 # Make sure permissions are correct
                 handle.sendline( "sudo chown %s:%s %s" % ( main.Mininet1.user_name, main.Mininet1.user_name, confDir ) )
                 handle.expect( main.Mininet1.Prompt() )
@@ -1680,7 +1685,7 @@
                 main.Mininet1.handle.expect( main.Mininet1.Prompt() )
         except Exception as e:
             main.log.exception( "Error seting up mininet" )
-            man.skipCase( result="FAIL", msg=e )
+            main.skipCase( result="FAIL", msg=e )
 
     @staticmethod
     def mnDockerTeardown( main ):
@@ -1693,13 +1698,20 @@
                 main.log.info( "Exiting from Mininet Docker" )
 
                 # Detach from container
-                handle = main.Mininet1.handle
                 try:
                     main.Mininet1.dockerDisconnect()
                     main.Mininet1.sudoRequired = True
                 except Exception as e:
                     main.log.error( e )
 
+                # Save docker logs
+                copyResult = main.ONOSbench.scp( main.Mininet1,
+                                                 "/tmp/mn-stratum/*",
+                                                 main.logdir,
+                                                 direction="from",
+                                                 options="-rp" )
+
+
     @staticmethod
     def setOnosConfig( main ):
         """
diff --git a/TestON/tests/USECASE/SegmentRouting/dependencies/chassis_config.pb.txt.qa b/TestON/tests/USECASE/SegmentRouting/dependencies/chassis_config.pb.txt.qa
new file mode 100644
index 0000000..d00d304
--- /dev/null
+++ b/TestON/tests/USECASE/SegmentRouting/dependencies/chassis_config.pb.txt.qa
@@ -0,0 +1,58 @@
+description: "Default Chassis Config for Edgecore Wedge100BF-32x"
+chassis {
+  platform: PLT_BAREFOOT_TOFINO
+  name: "Edgecore Wedge100BF-32x"
+}
+nodes {
+  id: 1
+  slot: 1
+  index: 1
+}
+singleton_ports {
+  id: 128
+  name: "1/0"
+  slot: 1
+  port: 1
+  speed_bps: 40000000000
+  config_params {
+    admin_state: ADMIN_STATE_ENABLED
+    autoneg: TRI_STATE_TRUE
+  }
+  node: 1
+}
+singleton_ports {
+  id: 136
+  name: "2/0"
+  slot: 1
+  port: 2
+  speed_bps: 40000000000
+  config_params {
+    admin_state: ADMIN_STATE_ENABLED
+    autoneg: TRI_STATE_TRUE
+  }
+  node: 1
+}
+singleton_ports {
+  id: 144
+  name: "3/0"
+  slot: 1
+  port: 3
+  speed_bps: 40000000000
+  config_params {
+    admin_state: ADMIN_STATE_ENABLED
+    autoneg: TRI_STATE_TRUE
+  }
+  node: 1
+}
+singleton_ports {
+  id: 152
+  name: "4/0"
+  slot: 1
+  port: 4
+  speed_bps: 40000000000
+  config_params {
+    admin_state: ADMIN_STATE_ENABLED
+    autoneg: TRI_STATE_TRUE
+  }
+  node: 1
+}
diff --git a/TestON/tests/dependencies/ONOSSetup.py b/TestON/tests/dependencies/ONOSSetup.py
index 020af9d..f904730 100644
--- a/TestON/tests/dependencies/ONOSSetup.py
+++ b/TestON/tests/dependencies/ONOSSetup.py
@@ -688,26 +688,30 @@
 
         onosNodesResult = self.checkOnosNodes( cluster )
 
+        externalAppsResult = main.TRUE
+        if main.params.get( 'EXTERNAL_APPS' ):
+            node = main.Cluster.controllers[0]
+            for app, url in main.params[ 'EXTERNAL_APPS' ].iteritems():
+                path, fileName = os.path.split( url )
+                main.ONOSbench.onosApp( node.ipAddress, "reinstall!", fileName, appName=app, user=node.karafUser, password=node.karafPass )
+
+
         onosAppsResult = main.TRUE
         if cellApply:
             if apps:
-                apps = apps.split( ',' )
-                apps = [ appPrefix + app for app in apps ]
+                newApps = []
+                appNames = apps.split( ',' )
                 if cluster.useDocker:
                     node = main.Cluster.active( 0 )
-                    for app in apps:
-                        node.activateApp( app )
+                    for app in appNames:
+                        appName = app if "org." in app else appPrefix + app
+                        node.activateApp( appName )
+                        newApps.append( appName )
 
-                onosAppsResult = self.checkOnosApps( cluster, apps )
+                onosAppsResult = self.checkOnosApps( cluster, newApps )
             else:
                 main.log.warn( "No apps were specified to be checked after startup" )
 
-        externalAppsResult = main.TRUE
-        if main.params.get( 'EXTERNAL_APPS' ):
-            for app, url in main.params[ 'EXTERNAL_APPS' ].iteritems():
-                path, fileName = os.path.split( url )
-                main.ONOSbench.onosApp( main.Cluster.controllers[0].ipAddress, "install!", fileName )
-
         return killResult and cellResult and packageResult and uninstallResult and \
                installResult and secureSshResult and onosServiceResult and onosCliResult and \
                onosNodesResult and onosAppsResult and preCLIResult
