diff --git a/src/test/cordSubscriber/cordSubscriberTest.json b/src/test/cordSubscriber/cordSubscriberTest.json
index 3a03f11..fb29f57 100644
--- a/src/test/cordSubscriber/cordSubscriberTest.json
+++ b/src/test/cordSubscriber/cordSubscriberTest.json
@@ -1,9 +1,9 @@
 {
-    "VOLTHA_HOST" : "172.17.0.1",
-    "VOLTHA_REST_PORT" : 8881,
-    "VOLTHA_IGMP_ITERATIONS" : 100,
-    "VOLTHA_CONFIG_FAKE" : true,
-    "VOLTHA_OLT_TYPE" : "ponsim_olt",
-    "VOLTHA_OLT_MAC"  : "00:0c:e2:31:12:00",
-    "VOLTHA_UPLINK_VLAN_START" : 333
-}
+    "VOLTHA_HOST": "172.17.0.1", 
+    "VOLTHA_REST_PORT": 8881, 
+    "VOLTHA_IGMP_ITERATIONS": 100, 
+    "VOLTHA_CONFIG_FAKE": true, 
+    "VOLTHA_OLT_TYPE": "ponsim_olt", 
+    "VOLTHA_OLT_MAC": "00:0c:e2:31:12:00", 
+    "VOLTHA_UPLINK_VLAN_START": 333
+}
\ No newline at end of file
diff --git a/src/test/cordSubscriber/cordSubscriberTest.py b/src/test/cordSubscriber/cordSubscriberTest.py
index 1915361..580989d 100644
--- a/src/test/cordSubscriber/cordSubscriberTest.py
+++ b/src/test/cordSubscriber/cordSubscriberTest.py
@@ -283,6 +283,7 @@
 -----END CERTIFICATE-----'''
 
       VOLTHA_HOST = None
+      VOLTHA_TEARDOWN = True
       VOLTHA_REST_PORT = 8881
       VOLTHA_UPLINK_VLAN_MAP = { 'of:0001000000000001' : '222' }
       VOLTHA_UPLINK_VLAN_START = 333
@@ -294,6 +295,7 @@
       voltha_ctrl = None
       voltha_device = None
       voltha_switch_map = None
+      voltha_preconfigured = False
 
       @classmethod
       def update_apps_version(cls):
@@ -2661,8 +2663,8 @@
                                                           services = services)
                 assert_equal(test_status, True)
           finally:
-                if switch_map is not None:
-                      if olt_configured is True:
+                if self.VOLTHA_TEARDOWN is True and switch_map is not None:
+                      if self.voltha_preconfigured is False and olt_configured is True:
                             self.remove_olt(switch_map)
 
       def test_cord_subscriber_voltha_tls(self):
diff --git a/src/test/setup/olt-test.py b/src/test/setup/olt-test.py
index 287d7a3..e3cf443 100755
--- a/src/test/setup/olt-test.py
+++ b/src/test/setup/olt-test.py
@@ -103,8 +103,14 @@
         manifest = self.args.manifest
         olt_type = self.args.olt_type
         test_type = self.args.test_type
+        disable_teardown = self.args.disable_teardown
+        test_mode = self.args.test_mode
+        disable_cleanup = self.args.disable_cleanup
+        if test_mode is True:
+            disable_cleanup = True
         test_config = { 'VOLTHA_HOST' : self.args.voltha_host,
                         'VOLTHA_OLT_TYPE' : self.args.olt_type,
+                        'VOLTHA_TEARDOWN' : not disable_teardown,
                         }
         if olt_type.startswith('tibit'):
             test_config['VOLTHA_OLT_MAC'] = self.args.olt_arg
@@ -119,8 +125,9 @@
         if self.start_in:
             time.sleep(self.start_in)
 
-        _, status = self.tester.start(manifest = manifest)
-        assert status == httplib.OK, 'Test setup failed with status %d' %status
+        if test_mode is False:
+            _, status = self.tester.start(manifest = manifest)
+            assert status == httplib.OK, 'Test setup failed with status %d' %status
 
         for test in test_type.split(','):
             print('Running test case %s' %(test))
@@ -128,8 +135,9 @@
             if status != httplib.OK:
                 print('Test case %s failed with status code %d' %(test, status))
 
-        print('Cleaning up the test')
-        self.tester.cleanup(manifest = manifest)
+        if disable_cleanup is False:
+            print('Cleaning up the test')
+            self.tester.cleanup(manifest = manifest)
         return 0 if status == httplib.OK else 127
 
 class CordTesterWebServer(object):
@@ -173,6 +181,11 @@
     parser.add_argument('-voltha-host', '--voltha-host', default='172.17.0.1', help = 'VOLTHA host ip')
     parser.add_argument('-olt-type', '--olt-type', default = 'ponsim_olt', help = 'OLT type')
     parser.add_argument('-olt-arg', '--olt-arg', default = '172.17.0.1', help = 'OLT type argument')
+    parser.add_argument('-disable-teardown', '--disable-teardown', action='store_true', help = 'Disable VOLTHA teardown')
+    parser.add_argument('-disable-cleanup', '--disable-cleanup', action='store_true', help = 'Dont cleanup cord-tester')
+    parser.add_argument('-test-mode', '--test-mode', action='store_true',
+                        help = 'Directly run the cord-tester run-test phase without setup and cleanup')
+
     parser.set_defaults(func = run_test)
     args = parser.parse_args()
     res = args.func(args)
diff --git a/src/test/utils/CordTestConfig.py b/src/test/utils/CordTestConfig.py
index 95320e5..5653773 100644
--- a/src/test/utils/CordTestConfig.py
+++ b/src/test/utils/CordTestConfig.py
@@ -99,7 +99,8 @@
                         olt_mac = '00:0c:e2:31:12:00',
                         olt_ip = None,
                         uplink_vlan_map = { 'of:0000000000000001' : '222' },
-                        uplink_vlan_start = 333
+                        uplink_vlan_start = 333,
+                        teardown = True,
                         )
     voltha_enabled = bool(int(os.getenv('VOLTHA_ENABLED', 0)))
     voltha_configure = True
@@ -127,6 +128,10 @@
             setattr(class_test, 'voltha_ctrl', ret[0])
             setattr(class_test, 'voltha_device', ret[1])
             setattr(class_test, 'voltha_switch_map', ret[2])
+            voltha_driver_configured = ret[3]
+            setattr(class_test, 'voltha_preconfigured', voltha_driver_configured)
+            if voltha_driver_configured:
+                setattr(class_test, 'VOLTHA_TEARDOWN', False)
 
 def teardown_module(module):
     class_test = get_test_class(module)
@@ -134,12 +139,17 @@
         return
     if not hasattr(class_test, 'voltha_ctrl') or \
        not hasattr(class_test, 'voltha_device') or \
-       not hasattr(class_test, 'voltha_switch_map'):
+       not hasattr(class_test, 'voltha_switch_map') or \
+       not hasattr(class_test, 'voltha_preconfigured') or \
+       not hasattr(class_test, 'VOLTHA_TEARDOWN'):
         return
     voltha_ctrl = getattr(class_test, 'voltha_ctrl')
     voltha_device = getattr(class_test, 'voltha_device')
     voltha_switch_map = getattr(class_test, 'voltha_switch_map')
-    voltha_teardown(voltha_ctrl, voltha_device, voltha_switch_map)
+    voltha_preconfigured = getattr(class_test, 'voltha_preconfigured')
+    voltha_teardown = getattr(class_test, 'VOLTHA_TEARDOWN')
+    if voltha_preconfigured is False and voltha_teardown is True:
+        voltha_teardown(voltha_ctrl, voltha_device, voltha_switch_map)
 
 def running_on_ciab():
     if running_on_pod() is False:
diff --git a/src/test/utils/VolthaCtrl.py b/src/test/utils/VolthaCtrl.py
index 615330d..aa19e6a 100644
--- a/src/test/utils/VolthaCtrl.py
+++ b/src/test/utils/VolthaCtrl.py
@@ -218,7 +218,8 @@
     OPER_STATUS = 'oper_status'
     CONNECT_STATUS = 'connect_status'
 
-    def __init__(self, host = HOST, rest_port = REST_PORT, uplink_vlan_map = UPLINK_VLAN_MAP, uplink_vlan_start = UPLINK_VLAN_START):
+    def __init__(self, host = HOST, rest_port = REST_PORT, uplink_vlan_map = UPLINK_VLAN_MAP,
+                 uplink_vlan_start = UPLINK_VLAN_START):
         self.host = host
         self.rest_port = rest_port
         self.rest_url = 'http://{}:{}/api/v1/local'.format(host, rest_port)
@@ -232,7 +233,7 @@
         self.switches = []
         self.switch_map = {}
 
-    def config(self, fake = False):
+    def config(self, fake = False, driver_configured = False):
         devices = OnosCtrl.get_devices()
         if not devices:
             return self.switch_map
@@ -248,6 +249,7 @@
             if device_id not in self.uplink_vlan_map:
                 uplink_vlan = VolthaCtrl.UPLINK_VLAN_START
                 VolthaCtrl.UPLINK_VLAN_START += 1
+                self.uplink_vlan_map[device_id] = uplink_vlan
                 log.info('Voltha device %s not in map. Using uplink vlan %d' %(device_id, uplink_vlan))
             else:
                 uplink_vlan = self.uplink_vlan_map[device_id]
@@ -275,7 +277,7 @@
                                                                        vlan = uplink_vlan,
                                                                        defaultVlan=str(onu_ports[0])
                                                                        )
-        if device_id:
+        if device_id and driver_configured is False:
             #toggle drivers/openflow base before reconfiguring the driver and olt config data
             OnosCtrl('org.onosproject.drivers').deactivate()
             OnosCtrl('org.onosproject.openflow-base').deactivate()
@@ -413,25 +415,40 @@
                  olt_type = 'ponsim_olt', olt_mac = '00:0c:e2:31:12:00',
                  uplink_vlan_map = VolthaCtrl.UPLINK_VLAN_MAP,
                  uplink_vlan_start = VolthaCtrl.UPLINK_VLAN_START,
-                 config_fake = False, olt_app = None):
-
+                 config_fake = False, olt_app = None, teardown = True):
+    devices = OnosCtrl.get_devices()
+    olt_devices = filter(lambda d: not d['mfr'].startswith('Nicira') and d['driver'] == 'pmc-olt', devices)
     voltha = VolthaCtrl(host, rest_port = rest_port,
                         uplink_vlan_map = uplink_vlan_map,
                         uplink_vlan_start = uplink_vlan_start)
-    if olt_type.startswith('ponsim'):
-        ponsim_address = '{}:50060'.format(ponsim_host)
-        log.info('Enabling ponsim olt')
-        device_id, status = voltha.enable_device(olt_type, address = ponsim_address)
+    voltha_devices = voltha.get_devices()
+    if voltha_devices:
+        voltha_device_ids = filter(lambda d: d[voltha.OPER_STATUS] == 'ACTIVE' and d[voltha.ADMIN_STATE] == 'ENABLED',
+                                   voltha_devices['items'])
     else:
-        if olt_type.startswith('maple'):
-            if olt_ip:
-                log.info('Enabling %s' %olt_type)
-                device_id, status = voltha.enable_device(olt_type, address = olt_ip)
-            else:
-                log.info('OLT IP needs to be specified for maple olt')
+        voltha_device_ids = []
+
+    driver_configured = len(olt_devices) > 0 and len(voltha_device_ids) > 0
+    if olt_type.startswith('ponsim'):
+        if driver_configured:
+            device_id, status = voltha_device_ids[0], True
         else:
-            log.info('Enabling OLT instance for %s with mac %s' %(olt_type, olt_mac))
-            device_id, status = voltha.enable_device(olt_type, olt_mac)
+            ponsim_address = '{}:50060'.format(ponsim_host)
+            log.info('Enabling ponsim olt')
+            device_id, status = voltha.enable_device(olt_type, address = ponsim_address)
+    else:
+        if driver_configured:
+            device_id, status = voltha_device_ids[0], True
+        else:
+            if olt_type.startswith('maple'):
+                if olt_ip:
+                    log.info('Enabling %s' %olt_type)
+                    device_id, status = voltha.enable_device(olt_type, address = olt_ip)
+                else:
+                    log.info('OLT IP needs to be specified for maple olt')
+            else:
+                log.info('Enabling OLT instance for %s with mac %s' %(olt_type, olt_mac))
+                device_id, status = voltha.enable_device(olt_type, olt_mac)
 
     if device_id is None or status is False:
         if device_id:
@@ -444,7 +461,7 @@
         olt_app = get_olt_app()
     try:
         time.sleep(5)
-        switch_map = voltha.config(fake = config_fake)
+        switch_map = voltha.config(fake = config_fake, driver_configured = driver_configured)
         if switch_map is None:
             voltha.disable_device(device_id)
             return None
@@ -452,7 +469,7 @@
         OnosCtrl.install_app(olt_app)
         olt_installed = True
         time.sleep(5)
-        return voltha, device_id, switch_map
+        return voltha, device_id, switch_map, driver_configured
     except:
         voltha.disable_device(device_id)
         time.sleep(10)
diff --git a/src/test/voltha/volthaTest.py b/src/test/voltha/volthaTest.py
index 2152910..74bae52 100644
--- a/src/test/voltha/volthaTest.py
+++ b/src/test/voltha/volthaTest.py
@@ -217,6 +217,7 @@
     VOLTHA_OLT_TYPE = 'ponsim_olt'
     VOLTHA_OLT_MAC = '00:0c:e2:31:12:00'
     VOLTHA_IGMP_ITERATIONS = 100
+    VOLTHA_TEARDOWN = True
     voltha = None
     voltha_attrs = None
     success = True
@@ -1677,7 +1678,9 @@
               config_fake = self.VOLTHA_CONFIG_FAKE,
               olt_app = self.olt_app_file)
         assert_not_equal(ret, None)
-        voltha, device_id, switch_map = ret[0], ret[1], ret[2]
+        voltha, device_id, switch_map, preconfigured = ret[0], ret[1], ret[2], ret[3]
+        if self.VOLTHA_TEARDOWN is False:
+              preconfigured = True
         try:
             log_test.info('Adding subscribers through OLT app')
             self.config_olt(switch_map)
@@ -1686,7 +1689,7 @@
             auth_status = self.tls_flow_check(self.INTF_RX_DEFAULT)
             assert_equal(auth_status, True)
         finally:
-            if switch_map is not None:
+            if switch_map is not None and preconfigured is False:
                 if olt_configured is True:
                     self.remove_olt(switch_map)
                 voltha_teardown(voltha, device_id, switch_map, olt_app = self.olt_app_file)
