diff --git a/TestON/drivers/common/cli/onosdriver.py b/TestON/drivers/common/cli/onosdriver.py
index 3ac31dd..a2fade7 100755
--- a/TestON/drivers/common/cli/onosdriver.py
+++ b/TestON/drivers/common/cli/onosdriver.py
@@ -1306,23 +1306,26 @@
         try:
             self.handle.sendline( "" )
             self.handle.expect( self.prompt )
-            cmdStr = "onos-die " + str( nodeIp )
-            self.handle.sendline( cmdStr )
-            i = self.handle.expect( [
-                "Killing\sONOS",
-                "ONOS\sprocess\sis\snot\srunning",
-                pexpect.TIMEOUT ], timeout=60 )
-            if i == 0:
-                main.log.info( self.name + ": ONOS instance " + str( nodeIp ) +
-                               " was killed and stopped" )
-                self.handle.sendline( "" )
-                self.handle.expect( self.prompt )
-                return main.TRUE
-            elif i == 1:
-                main.log.info( self.name + ": ONOS process was not running" )
-                self.handle.sendline( "" )
-                self.handle.expect( self.prompt )
-                return main.FALSE
+            if self.inDocker:
+                return self.dockerStop( self.name )
+            else:
+                cmdStr = "onos-die " + str( nodeIp )
+                self.handle.sendline( cmdStr )
+                i = self.handle.expect( [
+                    "Killing\sONOS",
+                    "ONOS\sprocess\sis\snot\srunning",
+                    pexpect.TIMEOUT ], timeout=60 )
+                if i == 0:
+                    main.log.info( self.name + ": ONOS instance " + str( nodeIp ) +
+                                   " was killed and stopped" )
+                    self.handle.sendline( "" )
+                    self.handle.expect( self.prompt )
+                    return main.TRUE
+                elif i == 1:
+                    main.log.info( self.name + ": ONOS process was not running" )
+                    self.handle.sendline( "" )
+                    self.handle.expect( self.prompt )
+                    return main.FALSE
         except pexpect.EOF:
             main.log.error( self.name + ": EOF exception found" )
             main.log.error( self.name + ":    " + self.handle.before )
diff --git a/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/SRBridgingTest.py b/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/SRBridgingTest.py
index c3d93be..56d44ec 100644
--- a/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/SRBridgingTest.py
+++ b/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/SRBridgingTest.py
@@ -47,7 +47,7 @@
             if not hasattr( main, 'apps' ):
                 init = True
                 run.initTest( main )
-            # Skip onos packaging if the clusrer size stays the same
+            # Skip onos packaging if the cluster size stays the same
             if not init and onosNodes == main.Cluster.numCtrls:
                 skipPackage = True
 
diff --git a/TestON/tests/USECASE/SegmentRouting/SRLinkFailure/SRLinkFailure.params.stratum b/TestON/tests/USECASE/SegmentRouting/SRLinkFailure/SRLinkFailure.params.stratum
new file mode 100644
index 0000000..07cfeb9
--- /dev/null
+++ b/TestON/tests/USECASE/SegmentRouting/SRLinkFailure/SRLinkFailure.params.stratum
@@ -0,0 +1,102 @@
+<PARAMS>
+    <testcases>1,2,4,5</testcases>
+
+    <GRAPH>
+        <nodeCluster>Fabric</nodeCluster>
+        <builds>20</builds>
+        <jobName>SRLinkFailure-stratum</jobName>
+    </GRAPH>
+
+    <SCALE>
+        <size>3</size>
+        <max>3</max>
+    </SCALE>
+
+    <DEPENDENCY>
+        <useCommonConf>True</useCommonConf>
+        <useCommonTopo>True</useCommonTopo>
+        <useBmv2>True</useBmv2>
+        <bmv2SwitchType>stratum</bmv2SwitchType>
+        <switchPrefix>bmv2</switchPrefix>
+        <stratumRoot>~/stratum</stratumRoot>
+        <topology>cord_fabric.py</topology>
+        <lib>routinglib.py,trellislib.py,stratum.py</lib>
+        <conf>bgpdbgp1.conf,bgpdbgp2.conf,bgpdr1.conf,bgpdr2.conf,dhcpd6.conf,dhcpd.conf,zebradbgp1.conf,zebradbgp2.conf</conf>
+    </DEPENDENCY>
+
+    <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/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=master DOCKER_TAG=TestON-master 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>tost:TestON-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,hostprovider,netcfghostprovider,lldpprovider,drivers.bmv2,pipelines.fabric,segmentrouting,t3 </cellApps>
+    </ENV>
+
+    <ONOS_Configuration>
+        <org.onosproject.grpc.ctl.GrpcChannelControllerImpl>
+            <enableMessageLog>true</enableMessageLog>
+        </org.onosproject.grpc.ctl.GrpcChannelControllerImpl>
+    </ONOS_Configuration>
+
+    <ONOS_Logging>
+        <org.onosproject.events>TRACE</org.onosproject.events>
+        <org.onosproject.segmentrouting>DEBUG</org.onosproject.segmentrouting>
+        <org.onosproject.driver>DEBUG</org.onosproject.driver>
+        <org.onosproject.net.flowobjective.impl>DEBUG</org.onosproject.net.flowobjective.impl>
+        <org.onosproject.routeservice.impl>DEBUG</org.onosproject.routeservice.impl>
+        <org.onosproject.routeservice.store>DEBUG</org.onosproject.routeservice.store>
+        <org.onosproject.routing.fpm>DEBUG</org.onosproject.routing.fpm>
+        <org.onosproject.fpm>DEBUG</org.onosproject.fpm>
+        <org.onosproject.mcast>DEBUG</org.onosproject.mcast>
+        <org.onosproject.p4runtime>DEBUG</org.onosproject.p4runtime>
+        <org.onosproject.protocols.p4runtime>DEBUG</org.onosproject.protocols.p4runtime>
+        <org.onosproject.drivers.p4runtime>DEBUG</org.onosproject.drivers.p4runtime>
+        <org.onosproject.protocols.grpc>DEBUG</org.onosproject.protocols.grpc>
+        <org.onosproject.protocols.gnmi>DEBUG</org.onosproject.protocols.gnmi>
+        <org.onosproject.protocols.gnoi>DEBUG</org.onosproject.protocols.gnoi>
+        <org.onosproject.drivers.gnoi>DEBUG</org.onosproject.drivers.gnoi>
+        <org.onosproject.drivers.gmni>DEBUG</org.onosproject.drivers.gmni>
+        <org.onosproject.drivers.stratum>DEBUG</org.onosproject.drivers.stratum>
+        <org.onosproject.bmv2>DEBUG</org.onosproject.bmv2>
+    </ONOS_Logging>
+
+    <GIT>
+        <pull>False</pull>
+        <branch>master</branch>
+    </GIT>
+
+    <CTRL>
+        <port>6653</port>
+    </CTRL>
+
+    <timers>
+        <LinkDiscovery>12</LinkDiscovery>
+        <SwitchDiscovery>12</SwitchDiscovery>
+    </timers>
+
+    <kill>
+        <switch> spine101 </switch>
+        <dpid> 000000000101 </dpid>
+        <links> leaf1 leaf2 </links>
+    </kill>
+
+    <SLEEP>
+        <startup>10</startup>
+    </SLEEP>
+
+</PARAMS>
diff --git a/TestON/tests/USECASE/SegmentRouting/SRLinkFailure/dependencies/SRLinkFailFuncs.py b/TestON/tests/USECASE/SegmentRouting/SRLinkFailure/dependencies/SRLinkFailFuncs.py
index 4f07fe5..0a0ef5a 100644
--- a/TestON/tests/USECASE/SegmentRouting/SRLinkFailure/dependencies/SRLinkFailFuncs.py
+++ b/TestON/tests/USECASE/SegmentRouting/SRLinkFailure/dependencies/SRLinkFailFuncs.py
@@ -20,6 +20,7 @@
 """
 
 from tests.USECASE.SegmentRouting.dependencies.Testcaselib import Testcaselib as run
+import tests.USECASE.SegmentRouting.dependencies.cfgtranslator as translator
 
 class SRLinkFailFuncs():
 
@@ -29,6 +30,7 @@
         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"
         self.switchOne = 'spine101'
         self.switchTwo = 'leaf2'
         self.dpidOne = 'of:0000000000000101'
@@ -38,18 +40,46 @@
 
     def runTest( self, main, caseNum, numNodes, Topo, minFlow ):
         try:
-            if not hasattr( main, 'apps' ):
-                run.initTest( main )
-
             description = "Bridging and Routing Link 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 ] )
+            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 )
             # pre-configured routing and bridging test
diff --git a/TestON/tests/USECASE/SegmentRouting/SROnosFailure/dependencies/SROnosFailureFuncs.py b/TestON/tests/USECASE/SegmentRouting/SROnosFailure/dependencies/SROnosFailureFuncs.py
index 679baf0..a5ff3ac 100644
--- a/TestON/tests/USECASE/SegmentRouting/SROnosFailure/dependencies/SROnosFailureFuncs.py
+++ b/TestON/tests/USECASE/SegmentRouting/SROnosFailure/dependencies/SROnosFailureFuncs.py
@@ -20,6 +20,7 @@
 """
 
 from tests.USECASE.SegmentRouting.dependencies.Testcaselib import Testcaselib as run
+import tests.USECASE.SegmentRouting.dependencies.cfgtranslator as translator
 
 class SROnosFailureFuncs():
 
@@ -29,6 +30,7 @@
         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, killList=[ 0 ] ):
         try:
@@ -39,7 +41,24 @@
             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 )
             if hasattr( main, 'Mininet1' ):
                 run.mnDockerSetup( main )  # optionally create and setup docker image
diff --git a/TestON/tests/USECASE/SegmentRouting/dependencies/Testcaselib.py b/TestON/tests/USECASE/SegmentRouting/dependencies/Testcaselib.py
index 68072a7..e20e31a 100644
--- a/TestON/tests/USECASE/SegmentRouting/dependencies/Testcaselib.py
+++ b/TestON/tests/USECASE/SegmentRouting/dependencies/Testcaselib.py
@@ -720,20 +720,23 @@
         main.step( "Kill link between %s and %s" % ( end1, end2 ) )
         linkDown = main.Network.link( END1=end1, END2=end2, OPTION="down" )
         linkDown = linkDown and main.Network.link( END2=end1, END1=end2, OPTION="down" )
+        utilities.assert_equals( expect=main.TRUE, actual=linkDown,
+                                 onpass="Link down successful",
+                                 onfail="Failed to turn off link?" )
         # TODO: Can remove this, since in the retry we will wait anyways if topology is incorrect
         main.log.info(
                 "Waiting %s seconds for link down to be discovered" % sleep )
         time.sleep( sleep )
+        main.step( "Checking topology after link down" )
         topology = utilities.retry( main.Cluster.active( 0 ).CLI.checkStatus,
                                     main.FALSE,
                                     kwargs={ 'numoswitch': switches,
                                              'numolink': links },
                                     attempts=10,
                                     sleep=sleep )
-        result = topology and linkDown
-        utilities.assert_equals( expect=main.TRUE, actual=result,
-                                 onpass="Link down successful",
-                                 onfail="Failed to turn off link?" )
+        utilities.assert_equals( expect=main.TRUE, actual=topology,
+                                 onpass="Topology after link down is correct",
+                                 onfail="Topology after link down is incorrect" )
 
     @staticmethod
     def killLinkBatch( main, links, linksAfter, switches, sleep=None ):
@@ -1092,12 +1095,18 @@
         else:
             sleep = float( sleep )
 
+        stepResult = main.TRUE
         for i in nodes:
-            killResult = main.ONOSbench.onosDie( main.Cluster.runningNodes[ i ].ipAddress )
-            utilities.assert_equals( expect=main.TRUE, actual=killResult,
-                                     onpass="ONOS instance Killed",
-                                     onfail="Error killing ONOS instance" )
+            node = main.Cluster.runningNodes[ i ]
+            if node.inDocker:
+                killResult = node.server.dockerStop( node.name )
+            else:
+                killResult = main.ONOSbench.onosDie( node.ipAddress )
+            stepResult = stepResult and killResult
             main.Cluster.runningNodes[ i ].active = False
+        utilities.assert_equals( expect=main.TRUE, actual=stepResult,
+                                 onpass="ONOS instance Killed",
+                                 onfail="Error killing ONOS instance" )
         main.Cluster.reset()
         main.log.debug( "sleeping %i seconds" % ( sleep ) )
         time.sleep( sleep )
@@ -1118,11 +1127,22 @@
             sleep = float( main.params[ 'timers' ][ 'OnosDiscovery' ] )
         else:
             sleep = float( sleep )
-        [ main.ONOSbench.onosStart( main.Cluster.runningNodes[ i ].ipAddress ) for i in nodes ]
+        for i in nodes:
+            node = main.Cluster.runningNodes[ i ]
+            if node.inDocker:
+                main.Cluster.startONOSDockerNode( i )
+            else:
+                main.ONOSbench.onosStart( node.ipAddress )
         main.log.debug( "sleeping %i seconds" % ( sleep ) )
         time.sleep( sleep )
         for i in nodes:
-            isUp = main.ONOSbench.isup( main.Cluster.runningNodes[ i ].ipAddress )
+            node =  main.Cluster.runningNodes[ i ]
+            if node.inDocker:
+                isUp = node.CLI.dockerExec( node.name, dockerPrompt=node.dockerPrompt )
+                isUp = isUp and node.CLI.prepareForCLI()
+                isUp = isUp and node.CLI.onosSecureSSH( userName=node.karafUser, userPWD=node.karafPass )
+            else:
+                isUp = main.ONOSbench.isup( node.ipAddress )
             utilities.assert_equals( expect=main.TRUE, actual=isUp,
                                      onpass="ONOS service is ready",
                                      onfail="ONOS service did not start properly" )
diff --git a/TestON/tests/USECASE/SegmentRouting/dependencies/cfgtranslator.py b/TestON/tests/USECASE/SegmentRouting/dependencies/cfgtranslator.py
index 5e95efe..b978b73 100644
--- a/TestON/tests/USECASE/SegmentRouting/dependencies/cfgtranslator.py
+++ b/TestON/tests/USECASE/SegmentRouting/dependencies/cfgtranslator.py
@@ -27,8 +27,8 @@
 DHCP_APP_ID = ONOS_GROUP_ID + '.' + DHCP_APP
 
 # Translate configuration JSON file from BMv2 driver to OFDPA-OVS driver.
-def bmv2ToOfdpa( main, cfgFile="" ):
-    didRE = r"device:(?P<swType>bmv2|tofino):(?P<swRole>leaf|spine)(?P<swNum>[1-9][0-9]*)(/(?P<portNum>[0-9]+))?"
+def bmv2ToOfdpa( main, cfgFile="", rolesRE=r'spine|leaf' ):
+    didRE = r"device:(?P<swType>bmv2|tofino):(?P<swRole>" + rolesRE + ")(?P<swNum>[1-9][0-9]*)(/(?P<portNum>[0-9]+))?"
     if not cfgFile:
         cfgFile = "%s%s.json" % ( main.configPath + main.forJson,
                                   main.cfgName )
@@ -84,12 +84,21 @@
                         netcfg[ 'apps' ][ DHCP_APP_ID ][ 'default' ][ i ][ 'dhcpServerConnectPoint' ] = \
                             'of:' + searchObj.group( 'swNum' ).zfill(16) + '/' + searchObj.group( 'portNum' )
 
+    if 'xconnects' in netcfg.keys():
+        new_xconnects = []
+        for xconnect in netcfg[ 'xconnects' ]:
+            searchObj = re.search( didRE, xconnect.get( "deviceId" ) )
+            if searchObj:
+                new_device = 'of:' + searchObj.group( 'swNum' ).zfill( 16 )
+                xconnect[ 'deviceId' ] = new_device
+            new_xconnects.append( xconnect )
+        netcfg[ 'xconnects' ] = new_xconnects
+
     with open( cfgFile, 'w' ) as cfg:
         cfg.write( json.dumps( netcfg, indent=4, separators=( ',', ':' ), sort_keys=True ) )
 
 # Translate configuration JSON file from OFDPA-OVS driver to BMv2 driver.
-def ofdpaToBmv2( main, switchPrefix="bmv2", cfgFile="" ):
-    didRE= r"device:(?P<swType>bmv2|tofino):(?P<swRole>leaf|spine)(?P<swNum>[1-9][0-9]*)(/(?P<portNum>[0-9]+))?"
+def ofdpaToBmv2( main, switchPrefix="bmv2", cfgFile="", roleMap={r'0*[1-9]([0-9]){2}': 'spine', r'0{15}[1-9]': "leaf"} ):
     didRE = r"of:0*(?P<swNum>[1-9][0-9]*)(/(?P<portNum>[0-9]+))?"
     if not cfgFile:
         cfgFile = "%s%s.json" % ( main.configPath + main.forJson,
@@ -101,7 +110,14 @@
         for port in netcfg[ 'ports' ].keys():
             searchObj = re.search( didRE, port )
             if searchObj:
-                new_port = 'device:' + switchPrefix + ':leaf' + searchObj.group( 'swNum' ) + '/' + searchObj.group( 'portNum' )
+                # search  for a match between keys of roleMap and device id and set role to value of key
+                role = "leaf"
+                for roleRE, roleValue in roleMap.items():
+                    roleMatch = re.search( roleRE, searchObj.group( 'swNum' ) )
+                    if roleMatch:
+                        role = roleValue
+                        break
+                new_port = 'device:' + switchPrefix + ':' + role + searchObj.group( 'swNum' ) + '/' + searchObj.group( 'portNum' )
                 netcfg[ 'ports' ][ new_port ] = netcfg[ 'ports' ].pop( port )
 
     if 'hosts' in netcfg.keys():
@@ -111,7 +127,14 @@
                 for location in hostCfg[ 'basic' ][ 'locations' ]:
                     searchObj = re.search( didRE, location )
                     if searchObj:
-                        new_locations.append( 'device:' + switchPrefix + ':leaf' + searchObj.group( 'swNum' ) + '/' + searchObj.group( 'portNum' ) )
+                        # search  for a match between keys of roleMap and device id and set role to value of key
+                        role = "leaf"
+                        for roleRE, roleValue in roleMap.items():
+                            roleMatch = re.search( roleRE, searchObj.group( 'swNum' ) )
+                            if roleMatch:
+                                role = roleValue
+                                break
+                        new_locations.append( 'device:' + switchPrefix + ':' + role + searchObj.group( 'swNum' ) + '/' + searchObj.group( 'portNum' ) )
                     else:
                         new_locations.append( location )
                 netcfg[ 'hosts' ][ host ][ 'basic' ][ 'locations' ] = new_locations
@@ -119,7 +142,14 @@
                 location = hostCfg[ 'basic' ][ 'locations' ]
                 searchObj = re.search( didRE, location )
                 if searchObj:
-                    new_location = 'device:' + switchPrefix + ':leaf' + searchObj.group( 'swNum' ) + '/' + searchObj.group( 'portNum' )
+                    # search  for a match between keys of roleMap and device id and set role to value of key
+                    role = "leaf"
+                    for roleRE, roleValue in roleMap.items():
+                        roleMatch = re.search( roleRE, searchObj.group( 'swNum' ) )
+                        if roleMatch:
+                            role = roleValue
+                            break
+                    new_location = 'device:' + switchPrefix + ':' + role + searchObj.group( 'swNum' ) + '/' + searchObj.group( 'portNum' )
                     netcfg[ 'hosts' ][ host ][ 'basic' ][ 'locations' ] = new_location
 
     if 'devices' in netcfg.keys():
@@ -127,6 +157,7 @@
             searchObj = re.search( didRE, device )
             new_device = device
             if searchObj:
+                #TODO This or roleMap? maybe use this to populate role Map?
                 isLeaf = netcfg[ 'devices' ][ device ][ SR_APP ][ 'isEdgeRouter' ]
                 if isLeaf is True:
                     new_device = 'device:' + switchPrefix + ':leaf' + searchObj.group( 'swNum' )
@@ -137,7 +168,14 @@
                 searchObj = re.search( didRE,
                                        netcfg[ 'devices' ][ new_device ][ SR_APP ][ 'pairDeviceId' ])
                 if searchObj:
-                    netcfg[ 'devices' ][ new_device ][ SR_APP ][ 'pairDeviceId' ] = 'device:' + switchPrefix + ':leaf' + \
+                    # search  for a match between keys of roleMap and device id and set role to value of key
+                    role = "leaf"
+                    for roleRE, roleValue in roleMap.items():
+                        roleMatch = re.search( roleRE, searchObj.group( 'swNum' ) )
+                        if roleMatch:
+                            role = roleValue
+                            break
+                    netcfg[ 'devices' ][ new_device ][ SR_APP ][ 'pairDeviceId' ] = 'device:' + switchPrefix + ':' + role + \
                                                                                     searchObj.group( 'swNum' )
             if 'basic' in netcfg[ 'devices' ][ new_device ].keys():
                 if 'driver' in netcfg[ 'devices' ][ new_device ][ 'basic' ].keys():
@@ -150,8 +188,32 @@
                     searchObj = re.search( didRE,
                                            dhcpcfg[ 'dhcpServerConnectPoint' ] )
                     if searchObj:
+                        # search  for a match between keys of roleMap and device id and set role to value of key
+                        role = "leaf"
+                        for roleRE, roleValue in roleMap.items():
+                            roleMatch = re.search( roleRE, searchObj.group( 'swNum' ) )
+                            if roleMatch:
+                                role = roleValue
+                                break
                         netcfg[ 'apps' ][ DHCP_APP_ID ][ 'default' ][ i ][ 'dhcpServerConnectPoint' ] = \
-                            'device:' + switchPrefix + ':leaf' + searchObj.group( 'swNum' ) + '/' + searchObj.group( 'portNum' )
+                            'device:' + switchPrefix + ':' + role + searchObj.group( 'swNum' ) + '/' + searchObj.group( 'portNum' )
+
+    if 'xconnects' in netcfg.keys():
+        new_xconnects = []
+        for xconnect in netcfg[ 'xconnects' ]:
+            searchObj = re.search( didRE, xconnect.get( "deviceId" ) )
+            if searchObj:
+                # search  for a match between keys of roleMap and device id and set role to value of key
+                role = "leaf"
+                for roleRE, roleValue in roleMap.items():
+                    roleMatch = re.search( roleRE, searchObj.group( 'swNum' ) )
+                    if roleMatch:
+                        role = roleValue
+                        break
+                new_device = 'device:' + switchPrefix + ':' + role + searchObj.group( 'swNum' )
+                xconnect[ 'deviceId' ] = new_device
+            new_xconnects.append( xconnect )
+        netcfg[ 'xconnects' ] = new_xconnects
 
     with open( cfgFile, 'w' ) as cfg:
         cfg.write( json.dumps( netcfg, indent=4, separators=( ',', ':' ), sort_keys=True ) )
diff --git a/TestON/tests/dependencies/Cluster.py b/TestON/tests/dependencies/Cluster.py
index e8aa795..5808ba2 100644
--- a/TestON/tests/dependencies/Cluster.py
+++ b/TestON/tests/dependencies/Cluster.py
@@ -605,6 +605,21 @@
                 result = result and t.result
         return result
 
+    def startONOSDockerNode( self, node ):
+        """
+        Description:
+            Installing onos via docker container on a specific node.
+        Required:
+            * node - the node to install ONOS on, given in index of runningNodes
+        Returns:
+            Returns main.TRUE if it successfully installed
+        """
+        ctrl = self.runningNodes[ node ]
+        result = ctrl.server.dockerRun( self.dockerImageTag,
+                                        ctrl.name,
+                                        options=self.dockerOptions )
+        return result
+
     def startAtomixDocker( self, installParallel=True ):
         """
         Description:
