diff --git a/TestON/drivers/common/cli/onosdriver.py b/TestON/drivers/common/cli/onosdriver.py
index 31f26d5..a835399 100755
--- a/TestON/drivers/common/cli/onosdriver.py
+++ b/TestON/drivers/common/cli/onosdriver.py
@@ -820,11 +820,9 @@
         """
         Calls 'cell <name>' to set the environment variables on ONOSbench
         """
-        import re
         try:
             if not cellname:
-                main.log.error( "Must define cellname" )
-
+                main.log.error( self.name + ": Must define cellname" )
                 main.cleanAndExit()
             else:
                 self.handle.sendline( "cell " + str( cellname ) )
@@ -832,21 +830,25 @@
                 # Note that this variable name is subject to change
                 #   and that this driver will have to change accordingly
                 self.handle.expect( str( cellname ) )
-                handleBefore = self.handle.before
-                handleAfter = self.handle.after
-                # Get the rest of the handle
-                self.handle.expect( self.prompt )
-                time.sleep( 10 )
-                handleMore = self.handle.before
-
-                cell_result = handleBefore + handleAfter + handleMore
-                # print cell_result
-                if( re.search( "No such cell", cell_result ) ):
-                    main.log.error( "Cell call returned: " + handleBefore +
-                                    handleAfter + handleMore )
-
+                i = self.handle.expect( [ "No such cell",
+                                          self.prompt,
+                                          pexpect.TIMEOUT ], timeout=10 )
+                if i == 0:
+                    main.log.error( self.name + ": No such cell. Response: " + str( self.handle.before ) )
+                    main.cleanAndExit()
+                elif i == 1:
+                    main.log.info( self.name + ": Successfully set cell: " + str( self.handle.before ) )
+                elif i == 2:
+                    main.log.error( self.name + ": Set cell timed out. Response: " + str( self.handle.before ) )
+                    main.cleanAndExit()
+                else:
+                    main.log.error( self.name + ": Unexpected response: " + str( self.handle.before ) )
                     main.cleanAndExit()
                 return main.TRUE
+        except pexpect.TIMEOUT:
+            main.log.error( self.name + ": TIMEOUT exception found" )
+            main.log.error( self.name + ":     " + self.handle.before )
+            main.cleanAndExit()
         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/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,
