diff --git a/TestON/tests/USECASE/SegmentRouting/dependencies/Testcaselib.py b/TestON/tests/USECASE/SegmentRouting/dependencies/Testcaselib.py
index dd33993..bb868df 100644
--- a/TestON/tests/USECASE/SegmentRouting/dependencies/Testcaselib.py
+++ b/TestON/tests/USECASE/SegmentRouting/dependencies/Testcaselib.py
@@ -57,13 +57,17 @@
             main.cellName = main.params[ 'ENV' ][ 'cellName' ]
             main.apps = main.params[ 'ENV' ][ 'cellApps' ]
             main.path = os.path.dirname( main.testFile )
-            main.topoPath = main.path + "/../dependencies/"
-            main.configPath = main.path + "/../dependencies/conf/"
-            main.testConfPath = main.path + "/dependencies/conf/"
+            main.useCommonTopo = main.params[ 'DEPENDENCY' ][ 'useCommonTopo' ] == 'True'
+            main.topoPath = main.path + ( "/.." if main.useCommonTopo else "" ) + "/dependencies/"
+            main.useCommonConf = main.params[ 'DEPENDENCY' ][ 'useCommonConf' ] == 'True'
+            main.configPath = main.path + ( "/.." if main.useCommonConf else "" ) + "/dependencies/"
+            main.forJson = "json/"
+            main.forChart = "chart/"
+            main.forConfig = "conf/"
+            main.forHost = "host/"
             main.topology = main.params[ 'DEPENDENCY' ][ 'topology' ]
             main.topologyLib = main.params[ 'DEPENDENCY' ][ 'lib' ] if 'lib' in main.params[ 'DEPENDENCY' ] else None
             main.topologyConf = main.params[ 'DEPENDENCY' ][ 'conf' ] if 'conf' in main.params[ 'DEPENDENCY' ] else None
-            main.testConf = main.params[ 'DEPENDENCY' ][ 'testConf' ] if 'testConf' in main.params[ 'DEPENDENCY' ] else None
             main.scale = ( main.params[ 'SCALE' ][ 'size' ] ).split( "," )
             main.maxNodes = int( main.params[ 'SCALE' ][ 'max' ] )
             main.startUpSleep = int( main.params[ 'SLEEP' ][ 'startup' ] )
@@ -107,16 +111,6 @@
         utilities.assert_equals( expect=main.TRUE, actual=ready,
                                  onpass="ONOS summary command succeded",
                                  onfail="ONOS summary command failed" )
-
-        with open( "%s/json/%s.json" % (
-                main.configPath, main.cfgName ) ) as cfg:
-            main.Cluster.active( 0 ).REST.setNetCfg( json.load( cfg ) )
-        try:
-            with open( "%s/json/%s.chart" % (
-                    main.configPath, main.cfgName ) ) as chart:
-                main.pingChart = json.load( chart )
-        except IOError:
-            main.log.warn( "No chart file found." )
         if not ready:
             main.log.error( "ONOS startup failed!" )
             main.cleanAndExit()
@@ -128,6 +122,27 @@
             ctrl.CLI.logSet( "DEBUG", "org.onosproject.net.flowobjective.impl" )
 
     @staticmethod
+    def loadJson( main ):
+        with open( "%s%s.json" % ( main.configPath + main.forJson,
+                                   main.cfgName ) ) as cfg:
+            main.Cluster.active( 0 ).REST.setNetCfg( json.load( cfg ) )
+
+    @staticmethod
+    def loadChart( main ):
+        try:
+            with open( "%s%s.chart" % ( main.configPath + main.forChart,
+                                        main.cfgName ) ) as chart:
+                main.pingChart = json.load(chart)
+        except IOError:
+            main.log.warn( "No chart file found." )
+
+    @staticmethod
+    def loadHost( main ):
+        with open( "%s%s.host" % ( main.configPath + main.forHost,
+                                   main.cfgName ) ) as host:
+            main.expectedHosts = json.load( host )
+
+    @staticmethod
     def startMininet( main, topology, args="" ):
         copyResult = main.ONOSbench.scp( main.Mininet1,
                                          main.topoPath + main.topology,
@@ -142,13 +157,7 @@
         if main.topologyConf:
             for conf in main.topologyConf.split(","):
                 copyResult = copyResult and main.ONOSbench.scp( main.Mininet1,
-                                                                main.configPath + conf,
-                                                                "~/",
-                                                                direction="to" )
-        if main.testConf:
-            for conf in main.testConf.split(","):
-                copyResult = copyResult and main.ONOSbench.scp( main.Mininet1,
-                                                                main.testConfPath + conf,
+                                                                main.configPath + main.forConfig + conf,
                                                                 "~/",
                                                                 direction="to" )
         stepResult = copyResult
@@ -593,7 +602,7 @@
         """
         import json
         hostCfg = {}
-        with open( main.configPath + "/json/extra.json" ) as template:
+        with open( main.configPath + main.forJson + "extra.json" ) as template:
             hostCfg = json.load( template )
         main.pingChart[ 'ip' ][ 'hosts' ] += [ 'in1' ]
         main.step( "Pushing new configuration" )
@@ -630,7 +639,7 @@
         """
         import json
         hostCfg = {}
-        with open( main.configPath + "/json/extra.json" ) as template:
+        with open( main.configPath + main.forJson + "extra.json" ) as template:
             hostCfg = json.load( template )
         main.step( "Removing host configuration" )
         main.pingChart[ 'ip' ][ 'expect' ] = 0
