diff --git a/src/test/scale/__init__.py b/src/test/scale/__init__.py
index ec5e91b..3d1e823 100644
--- a/src/test/scale/__init__.py
+++ b/src/test/scale/__init__.py
@@ -21,6 +21,7 @@
 subscriber_dir = os.path.join(working_dir, '../subscriber')
 tls_dir = os.path.join(working_dir, '../tls')
 vrouter_dir = os.path.join(working_dir, '../vrouter')
+vsg_dir = os.path.join(working_dir, '../vsg')
 __path__.append(utils_dir)
 __path__.append(fsm_dir)
 __path__.append(subscriber_dir)
@@ -28,3 +29,4 @@
 __path__.append(cli_dir)
 __path__.append(tls_dir)
 __path__.append(vrouter_dir)
+__path__.append(vsg_dir)
diff --git a/src/test/scale/scaleTest.py b/src/test/scale/scaleTest.py
index f5eff3a..19740ad 100644
--- a/src/test/scale/scaleTest.py
+++ b/src/test/scale/scaleTest.py
@@ -35,6 +35,7 @@
 from OnosCtrl import OnosCtrl
 from CordContainer import Onos
 from CordSubscriberUtils import CordSubscriberUtils, XosUtils
+from vsgTest import vsg_exchange
 log.setLevel('INFO')
 
 class scale_exchange(CordLogger):
@@ -45,14 +46,10 @@
     HEAD_NODE = head_node + '.cord.lab' if len(head_node.split('.')) == 1 else head_node
     test_path = os.path.dirname(os.path.realpath(__file__))
     olt_conf_file = os.getenv('OLT_CONFIG_FILE', os.path.join(test_path, '..', 'setup/olt_config.json'))
-    restApiXos =  None
-    cord_subscriber = None
     SUBSCRIBER_ACCOUNT_NUM = 100
     SUBSCRIBER_S_TAG = 500
     SUBSCRIBER_C_TAG = 500
     SUBSCRIBERS_PER_S_TAG = 8
-    subscriber_info = []
-    volt_subscriber_info = []
     restore_methods = []
     TIMEOUT=120
     NUM_SUBSCRIBERS = 100
@@ -115,81 +112,18 @@
 7cp7jLRL7T+i4orZiAXpeEpAeOrP8r0DYTJi/8A=
 -----END CERTIFICATE-----'''
 
-
-    @classmethod
-    def setUpCordApi(cls):
-        num_subscribers = max(cls.NUM_SUBSCRIBERS, 10)
-        cls.cord_subscriber = CordSubscriberUtils(num_subscribers,
-                                                  account_num = cls.SUBSCRIBER_ACCOUNT_NUM,
-                                                  s_tag = cls.SUBSCRIBER_S_TAG,
-                                                  c_tag = cls.SUBSCRIBER_C_TAG,
-                                                  subscribers_per_s_tag = cls.SUBSCRIBERS_PER_S_TAG)
-        cls.restApiXos = XosUtils.getRestApi()
-
     @classmethod
     def setUpClass(cls):
-        cls.controllers = get_controllers()
-        cls.controller = cls.controllers[0]
-        cls.cli = None
-        cls.on_pod = running_on_pod()
-        cls.on_ciab = running_on_ciab()
-        cls.olt = OltConfig(olt_conf_file = cls.olt_conf_file)
-        cls.vcpes = cls.olt.get_vcpes()
-        cls.vcpes_dhcp = cls.olt.get_vcpes_by_type('dhcp')
-        cls.vcpes_reserved = cls.olt.get_vcpes_by_type('reserved')
-        cls.dhcp_vcpes_reserved = [ 'vcpe{}.{}.{}'.format(i, cls.vcpes_reserved[i]['s_tag'], cls.vcpes_reserved[i]['c_tag'])
-                                    for i in xrange(len(cls.vcpes_reserved)) ]
-        cls.untagged_dhcp_vcpes_reserved = [ 'vcpe{}'.format(i) for i in xrange(len(cls.vcpes_reserved)) ]
-        cls.container_vcpes_reserved = [ 'vcpe-{}-{}'.format(vcpe['s_tag'], vcpe['c_tag']) for vcpe in cls.vcpes_reserved ]
-        vcpe_dhcp_reserved = None
-        vcpe_container_reserved = None
-        if cls.vcpes_reserved:
-            vcpe_dhcp_reserved = cls.dhcp_vcpes_reserved[0]
-            if cls.on_pod is False:
-                vcpe_dhcp_reserved = cls.untagged_dhcp_vcpes_reserved[0]
-            vcpe_container_reserved = cls.container_vcpes_reserved[0]
-
-        cls.vcpe_dhcp_reserved = vcpe_dhcp_reserved
-        cls.vcpe_container_reserved = vcpe_container_reserved
-        dhcp_vcpe_offset = len(cls.vcpes_reserved)
-        cls.dhcp_vcpes = [ 'vcpe{}.{}.{}'.format(i+dhcp_vcpe_offset, cls.vcpes_dhcp[i]['s_tag'], cls.vcpes_dhcp[i]['c_tag'])
-                           for i in xrange(len(cls.vcpes_dhcp))  ]
-        cls.untagged_dhcp_vcpes = [ 'vcpe{}'.format(i+dhcp_vcpe_offset) for i in xrange(len(cls.vcpes_dhcp)) ]
-        cls.container_vcpes = [ 'vcpe-{}-{}'.format(vcpe['s_tag'], vcpe['c_tag']) for vcpe in cls.vcpes_dhcp ]
-        vcpe_dhcp = None
-        vcpe_container = None
-        #cache the first dhcp vcpe in the class for quick testing
-        if cls.vcpes_dhcp:
-            vcpe_container = cls.container_vcpes[0]
-            vcpe_dhcp = cls.dhcp_vcpes[0]
-            if cls.on_pod is False:
-                vcpe_dhcp = cls.untagged_dhcp_vcpes[0]
-        cls.vcpe_container = vcpe_container_reserved or vcpe_container
-        cls.vcpe_dhcp = vcpe_dhcp_reserved or vcpe_dhcp
-        VSGAccess.setUp()
-        cls.setUpCordApi()
-        if cls.on_pod is True:
-            cls.openVCPEAccess(cls.cord_subscriber.volt_subscriber_info)
-	cls.activate_apps()
-
-    @classmethod
-    def activate_apps(cls, deactivate = False):
-        for app in cls.vrouter_apps:
-            onos_ctrl = OnosCtrl(app)
-            if deactivate is False:
-                onos_ctrl.activate()
-            else:
-                onos_ctrl.deactivate()
-            time.sleep(2)
-	OnosCtrl(cls.igmp_app).activate()
-	OnosCtrl(cls.acl_app).activate()
-	OnosCtrl(cls.aaa_app).activate()
+        num_subscribers = max(cls.NUM_SUBSCRIBERS, 10)
+        vsg_exchange.vsgSetup(num_subscribers = num_subscribers,
+                              account_num = cls.SUBSCRIBER_ACCOUNT_NUM,
+                              s_tag = cls.SUBSCRIBER_S_TAG,
+                              c_tag = cls.SUBSCRIBER_C_TAG,
+                              subscribers_per_s_tag = cls.SUBSCRIBERS_PER_S_TAG)
 
     @classmethod
     def tearDownClass(cls):
-        VSGAccess.tearDown()
-        if cls.on_pod is True:
-            cls.closeVCPEAccess(cls.cord_subscriber.volt_subscriber_info)
+        vsg_exchange.vsgTeardown()
 
     def log_set(self, level = None, app = 'org.onosproject'):
         CordLogger.logSet(level = level, app = app, controllers = self.controllers, forced = True)
@@ -208,65 +142,6 @@
         assert_equal(status, True)
         return float(output)
 
-    def vsg_for_external_connectivity(self, subscriber_index, reserved = False):
-        if reserved is True:
-            if self.on_pod is True:
-                vcpe = self.dhcp_vcpes_reserved[subscriber_index]
-            else:
-                vcpe = self.untagged_dhcp_vcpes_reserved[subscriber_index]
-        else:
-            if self.on_pod is True:
-                vcpe = self.dhcp_vcpes[subscriber_index]
-            else:
-                vcpe = self.untagged_dhcp_vcpes[subscriber_index]
-        mgmt = 'eth0'
-        host = '8.8.8.8'
-        self.success = False
-        assert_not_equal(vcpe, None)
-        vcpe_ip = VSGAccess.vcpe_get_dhcp(vcpe, mgmt = mgmt)
-        assert_not_equal(vcpe_ip, None)
-        log.info('Got DHCP IP %s for %s' %(vcpe_ip, vcpe))
-        log.info('Sending icmp echo requests to external network 8.8.8.8')
-        st, _ = getstatusoutput('ping -c 3 8.8.8.8')
-        VSGAccess.restore_interface_config(mgmt, vcpe = vcpe)
-        assert_equal(st, 0)
-
-    def vsg_xos_subscriber_create(self, index, subscriber_info = None, volt_subscriber_info = None):
-        if self.on_pod is False:
-            return ''
-        if subscriber_info is None:
-            subscriber_info = self.cord_subscriber.subscriber_info[index]
-        if volt_subscriber_info is None:
-            volt_subscriber_info = self.cord_subscriber.volt_subscriber_info[index]
-        s_tag = int(volt_subscriber_info['voltTenant']['s_tag'])
-        c_tag = int(volt_subscriber_info['voltTenant']['c_tag'])
-        vcpe = 'vcpe-{}-{}'.format(s_tag, c_tag)
-        subId = self.cord_subscriber.subscriberCreate(index, subscriber_info, volt_subscriber_info)
-        if subId:
-            #if the vsg instance was already instantiated, then reduce delay
-            if c_tag % self.SUBSCRIBERS_PER_S_TAG == 0:
-                delay = 350
-            else:
-                delay = 90
-            log.info('Delaying %d seconds for the VCPE to be provisioned' %(delay))
-            time.sleep(delay)
-            log.info('Testing for external connectivity to VCPE %s' %(vcpe))
-            self.vsg_for_external_connectivity(index)
-
-        return subId
-
-    def vsg_xos_subscriber_delete(self, index, subId = '', voltId = '', subscriber_info = None, volt_subscriber_info = None):
-        if self.on_pod is False:
-            return
-        self.cord_subscriber.subscriberDelete(index, subId = subId, voltId = voltId,
-                                              subscriber_info = subscriber_info,
-                                              volt_subscriber_info = volt_subscriber_info)
-
-    def vsg_xos_subscriber_id(self, index):
-        if self.on_pod is False:
-            return ''
-        return self.cord_subscriber.subscriberId(index)
-
     def onos_load_config(self, config):
         #log_test.info('onos load config is %s'%config)
         status, code = OnosCtrl.config(config)
@@ -451,44 +326,44 @@
             time.sleep(3)
 
     def test_scale_for_vsg_vm_creations(self):
-        for index in xrange(len(self.cord_subscriber.subscriber_info)):
-            #check if the index exists
-            subId = self.vsg_xos_subscriber_id(index)
-            log.info('test_vsg_xos_subscriber_creation')
-            if subId and subId != '0':
-                self.vsg_xos_subscriber_delete(index, subId = subId)
-            subId = self.vsg_xos_subscriber_create(index)
-            log.info('Created Subscriber %s' %(subId))
+        vsg = vsg_exchange('test_vsg_xos_subscriber_create_all')
+        vsg.test_vsg_xos_subscriber_create_all()
 
     def test_scale_for_vcpe_creations(self):
-        for index in xrange(len(self.cord_subscriber.subscriber_info)):
-            #check if the index exists
-            subId = self.vsg_xos_subscriber_id(index)
-            log.info('test_vsg_xos_subscriber_creation')
-            if subId and subId != '0':
-                self.vsg_xos_subscriber_delete(index, subId = subId)
-            subId = self.vsg_xos_subscriber_create(index)
-            log.info('Created Subscriber %s' %(subId))
+        vsg = vsg_exchange('test_vsg_xos_subscriber_create_all')
+        vsg.test_vsg_xos_subscriber_create_all()
 
     def test_scale_of_subcriber_vcpe_creations_in_single_vsg_vm(self):
-        subId = self.vsg_xos_subscriber_create(100)
-        if subId and subId != '0':
-            self.vsg_xos_subscriber_delete(100, subId)
+        #create 100 subscribers and delete them after creation
+        vsg = vsg_exchange('vsg_create')
+        try:
+            vsg.vsg_create(100)
+        finally:
+            vsg.vsg_delete(100)
 
     def test_scale_of_subcriber_vcpe_creations_in_multiple_vsg_vm(self):
-        subId = self.vsg_xos_subscriber_create(100)
-        if subId and subId != '0':
-            self.vsg_xos_subscriber_delete(100, subId)
+        #create 100 subscribers and delete them after creation
+        vsg = vsg_exchange('vsg_create')
+        try:
+            vsg.vsg_create(100)
+        finally:
+            vsg.vsg_delete(100)
 
     def test_scale_of_subcriber_vcpe_creations_with_one_vcpe_in_one_vsg_vm(self):
-        subId = self.vsg_xos_subscriber_create(100)
-        if subId and subId != '0':
-            self.vsg_xos_subscriber_delete(100, subId)
+        #create 100 subscribers and delete them after creation
+        vsg = vsg_exchange('vsg_create')
+        try:
+            vsg.vsg_create(100)
+        finally:
+            vsg.vsg_delete(100)
 
     def test_scale_for_cord_subscriber_creation_and_deletion(self):
-        subId = self.vsg_xos_subscriber_create(100)
-        if subId and subId != '0':
-            self.vsg_xos_subscriber_delete(100, subId)
+        #create 100 subscribers and delete them after creation
+        vsg = vsg_exchange('vsg_create')
+        try:
+            vsg.vsg_create(100)
+        finally:
+            vsg.vsg_delete(100)
 
     def test_cord_for_scale_of_subscriber_containers_per_compute_node(self):
         pass
diff --git a/src/test/vsg/vsgTest.py b/src/test/vsg/vsgTest.py
index 6fa22f1..ee192ba 100644
--- a/src/test/vsg/vsgTest.py
+++ b/src/test/vsg/vsgTest.py
@@ -62,13 +62,17 @@
     NUM_SUBSCRIBERS = 5
 
     @classmethod
-    def setUpCordApi(cls):
-        num_subscribers = max(cls.NUM_SUBSCRIBERS, 5)
+    def setUpCordApi(cls, **subscriber_config):
+        num_subscribers = subscriber_config.get('num_subscribers', cls.NUM_SUBSCRIBERS)
+        account_num = subscriber_config.get('account_num', cls.SUBSCRIBER_ACCOUNT_NUM)
+        s_tag = subscriber_config.get('s_tag', cls.SUBSCRIBER_S_TAG)
+        c_tag = subscriber_config.get('c_tag', cls.SUBSCRIBER_C_TAG)
+        subscribers_per_s_tag = subscriber_config.get('subscribers_per_s_tag', cls.SUBSCRIBERS_PER_S_TAG)
         cls.cord_subscriber = CordSubscriberUtils(num_subscribers,
-                                                  account_num = cls.SUBSCRIBER_ACCOUNT_NUM,
-                                                  s_tag = cls.SUBSCRIBER_S_TAG,
-                                                  c_tag = cls.SUBSCRIBER_C_TAG,
-                                                  subscribers_per_s_tag = cls.SUBSCRIBERS_PER_S_TAG)
+                                                  account_num = account_num,
+                                                  s_tag = s_tag,
+                                                  c_tag = c_tag,
+                                                  subscribers_per_s_tag = subscribers_per_s_tag)
         cls.restApiXos = XosUtils.getRestApi()
 
     @classmethod
@@ -110,7 +114,7 @@
             OnosCtrl.config(cfg, controller = cls.HEAD_NODE)
 
     @classmethod
-    def setUpClass(cls):
+    def vsgSetup(cls, **subscriber_config):
         cls.controllers = get_controllers()
         cls.controller = cls.controllers[0]
         cls.cli = None
@@ -150,16 +154,25 @@
         cls.vcpe_container = vcpe_container_reserved or vcpe_container
         cls.vcpe_dhcp = vcpe_dhcp_reserved or vcpe_dhcp
         VSGAccess.setUp()
-        cls.setUpCordApi()
+        cls.setUpCordApi(**subscriber_config)
         if cls.on_pod is True:
             cls.openVCPEAccess(cls.cord_subscriber.volt_subscriber_info)
 
     @classmethod
-    def tearDownClass(cls):
+    def setUpClass(cls):
+        num_subscribers = max(cls.NUM_SUBSCRIBERS, 5)
+        cls.vsgSetup(num_subscribers = num_subscribers)
+
+    @classmethod
+    def vsgTeardown(cls):
         VSGAccess.tearDown()
         if cls.on_pod is True:
             cls.closeVCPEAccess(cls.cord_subscriber.volt_subscriber_info)
 
+    @classmethod
+    def tearDownClass(cls):
+        cls.vsgTeardown()
+
     def onos_shutdown(self, controller = None):
         status = True
         cli = Onos.cliEnter(onos_ip = controller)
@@ -2314,10 +2327,11 @@
                                                    volt_subscriber_info = volt_subscriber_info)
             log.info('Created reserved subscriber %s' %(subId))
 
-    def test_vsg_xos_subscriber_create_all(self):
+    def vsg_create(self, num_subscribers):
         if self.on_pod is False:
             return
-        for index in xrange(len(self.cord_subscriber.subscriber_info)):
+        num_subscribers = min(num_subscribers, len(self.cord_subscriber.subscriber_info))
+        for index in xrange(num_subscribers):
             #check if the index exists
             subId = self.vsg_xos_subscriber_id(index)
             if subId and subId != '0':
@@ -2325,14 +2339,21 @@
             subId = self.vsg_xos_subscriber_create(index)
             log.info('Created Subscriber %s' %(subId))
 
-    def test_vsg_xos_subscriber_delete_all(self):
+    def test_vsg_xos_subscriber_create_all(self):
+        self.vsg_create(len(self.cord_subscriber.subscriber_info))
+
+    def vsg_delete(self, num_subscribers):
         if self.on_pod is False:
             return
-        for index in xrange(len(self.cord_subscriber.subscriber_info)):
+        num_subscribers = min(num_subscribers, len(self.cord_subscriber.subscriber_info))
+        for index in xrange(num_subscribers):
             subId = self.vsg_xos_subscriber_id(index)
             if subId and subId != '0':
                 self.vsg_xos_subscriber_delete(index, subId = subId)
 
+    def test_vsg_xos_subscriber_delete_all(self):
+        self.vsg_delete(len(self.cord_subscriber.subscriber_info))
+
     def test_vsg_xos_subscriber_create_and_delete(self):
         subId = self.vsg_xos_subscriber_create(0)
         if subId and subId != '0':
@@ -3074,3 +3095,4 @@
 	9.Extract all dns stats
 	10.Verify dns stats for queries sent, queries received for dns host resolve success and failed scenarios
         """
+        pass
