diff --git a/TestON/tests/USECASE/SegmentRouting/dependencies/SRBridgingTest.py b/TestON/tests/USECASE/SegmentRouting/dependencies/SRBridgingTest.py
index 653588e..108e7ea 100644
--- a/TestON/tests/USECASE/SegmentRouting/dependencies/SRBridgingTest.py
+++ b/TestON/tests/USECASE/SegmentRouting/dependencies/SRBridgingTest.py
@@ -38,23 +38,29 @@
         # topo[ '2x3' ] = ( 2, 3, True, '2x3 leaf-spine topology with dual ToR and single ToR' )
         topo[ '2x4' ] = ( 2, 4, True, '2x4 dual-homed leaf-spine topology', 116 )
 
+        skipPackage = False
+        init = False
         if not hasattr( main, 'apps' ):
+            init = True
             run.initTest( main )
+        # Skip onos packaging if the clusrer size stays the same
+        if not init and onosNodes == main.Cluster.numCtrls:
+            skipPackage = True
 
         main.case( '%s, with %s and %d ONOS instance%s' %
                    ( description, topo[ topology ][ 3 ], onosNodes, 's' if onosNodes > 1 else '' ) )
 
         main.cfgName = 'CASE%01d%01d' % ( test_idx / 10, ( ( test_idx - 1 ) % 10 ) % 4 + 1 )
         main.Cluster.setRunningNode( onosNodes )
-        run.installOnos( main )
+        run.installOnos( main, skipPackage=skipPackage, cliSleep=5 )
         mininet_args = ' --spine=%d --leaf=%d' % ( topo[ topology ][ 0 ], topo[ topology ][ 1 ] )
         if topo[ topology ][ 2 ]:
             mininet_args += ' --dual-homed'
         if len( vlan ) > 0 :
             mininet_args += ' --vlan=%s' % ( ','.join( ['%d' % vlanId for vlanId in vlan ] ) )
 
-        run.startMininet( main, 'trellis_fabric.py', args = mininet_args )
+        run.startMininet( main, 'trellis_fabric.py', args=mininet_args )
         # TODO: Need to check correct number of minFlowCount
-        run.checkFlows( main, minFlowCount = topo[ topology ][ 4 ] )
+        run.checkFlows( main, minFlowCount=topo[ topology ][ 4 ], sleep=5 )
         run.pingAll( main, 'CASE%02d' % test_idx )
         run.cleanup( main )
diff --git a/TestON/tests/USECASE/SegmentRouting/dependencies/Testcaselib.py b/TestON/tests/USECASE/SegmentRouting/dependencies/Testcaselib.py
index 174e697..5ffed7c 100644
--- a/TestON/tests/USECASE/SegmentRouting/dependencies/Testcaselib.py
+++ b/TestON/tests/USECASE/SegmentRouting/dependencies/Testcaselib.py
@@ -94,7 +94,7 @@
         main.testSetUp.evnSetupConclusion( stepResult )
 
     @staticmethod
-    def installOnos( main, vlanCfg=True ):
+    def installOnos( main, vlanCfg=True, skipPackage=False, cliSleep=10 ):
         """
         - Set up cell
             - Create cell file
@@ -114,33 +114,11 @@
         main.log.info( "NODE COUNT = " + str( main.Cluster.numCtrls ) )
         main.log.info( ''.join( main.Cluster.getIps() ) )
         main.dynamicHosts = [ 'in1', 'out1' ]
-        main.testSetUp.createApplyCell( main.Cluster, newCell=True, cellName=main.cellName,
-                                        Mininet=main.Mininet1, useSSH=Testcaselib.useSSH,
-                                        ips=main.Cluster.getIps() )
-        # kill off all onos processes
-        main.log.info( "Safety check, killing all ONOS processes" +
-                       " before initiating environment setup" )
-        main.testSetUp.killingAllOnos(main.Cluster, True, False)
-
-        main.testSetUp.uninstallOnos(main.Cluster, False)
-        main.testSetUp.buildOnos(main.Cluster)
-
-        main.testSetUp.installOnos(main.Cluster, False)
-
-        main.testSetUp.setupSsh(main.Cluster)
-
-        main.testSetUp.checkOnosService(main.Cluster)
-
-        cliResult = main.TRUE
-        main.step("Checking if ONOS CLI is ready")
-        cliResult = main.testSetUp.startOnosClis(main.Cluster)
-        utilities.assert_equals( expect=main.TRUE,
-                                 actual=cliResult,
-                                 onpass="ONOS CLI is ready",
-                                 onfail="ONOS CLI is not ready" )
+        main.testSetUp.ONOSSetUp( main.Mininet1, main.Cluster, newCell=True, cellName=main.cellName,
+                                  skipPack=skipPackage, useSSH=Testcaselib.useSSH )
         ready = utilities.retry( main.Cluster.active( 0 ).CLI.summary,
                                  main.FALSE,
-                                 sleep=10,
+                                 sleep=cliSleep,
                                  attempts=10 )
         if ready:
             ready = main.TRUE
@@ -224,14 +202,14 @@
             main.cleanAndExit()
 
     @staticmethod
-    def checkFlows( main, minFlowCount, dumpflows=True ):
+    def checkFlows( main, minFlowCount, dumpflows=True, sleep=10 ):
         main.step(
                 " Check whether the flow count is bigger than %s" % minFlowCount )
         count = utilities.retry( main.Cluster.active( 0 ).CLI.checkFlowCount,
                                  main.FALSE,
                                  kwargs={ 'min': minFlowCount },
                                  attempts=10,
-                                 sleep=10 )
+                                 sleep=sleep )
         utilities.assertEquals(
                 expect=True,
                 actual=( count > 0 ),
@@ -243,7 +221,7 @@
                                      main.FALSE,
                                      kwargs={ 'isPENDING': False },
                                      attempts=4,
-                                     sleep=10 )
+                                     sleep=sleep )
         utilities.assertEquals(
                 expect=main.TRUE,
                 actual=flowCheck,
