diff --git a/src/test/cordSubscriber/cordSubscriberTest.py b/src/test/cordSubscriber/cordSubscriberTest.py
index b9d23ff..9aeba36 100644
--- a/src/test/cordSubscriber/cordSubscriberTest.py
+++ b/src/test/cordSubscriber/cordSubscriberTest.py
@@ -267,6 +267,8 @@
 yg==
 -----END CERTIFICATE-----'''
 
+      #disable voltha auto configuration
+      VOLTHA_AUTO_CONFIGURE = False
       VOLTHA_HOST = None
       VOLTHA_REST_PORT = 8881
       VOLTHA_UPLINK_VLAN_MAP = { 'of:0000000000000001' : '222' }
diff --git a/src/test/tls/tlsTest.py b/src/test/tls/tlsTest.py
index 3fd72f5..3417b1f 100644
--- a/src/test/tls/tlsTest.py
+++ b/src/test/tls/tlsTest.py
@@ -23,8 +23,8 @@
 from OnosCtrl import OnosCtrl
 from CordLogger import CordLogger
 from CordTestUtils import log_test
-from CordTestConfig import setup_module
-from VolthaCtrl import VolthaCtrl, voltha_setup, voltha_teardown
+from CordTestConfig import setup_module, teardown_module
+from VolthaCtrl import VolthaCtrl
 from scapy.all import *
 from scapy_ssl_tls.ssl_tls import *
 from scapy_ssl_tls.ssl_tls_crypto import *
@@ -41,9 +41,6 @@
     VOLTHA_OLT_TYPE = 'simulated_olt'
     VOLTHA_OLT_MAC = '00:0c:e2:31:12:00'
     VOLTHA_UPLINK_VLAN_MAP = { 'of:0000000000000001' : '222' }
-    voltha_device = None
-    voltha_ctrl = None
-    voltha_switch_map = None
     #this is from ca.pem file
     CLIENT_CERT_INVALID = '''-----BEGIN CERTIFICATE-----
 MIIEyTCCA7GgAwIBAgIJAN3OagiHm6AXMA0GCSqGSIb3DQEBCwUAMIGLMQswCQYD
@@ -86,24 +83,6 @@
                              'TLS_DH_anon_WITH_AES_256_CBC_SHA256']
 
 
-    @classmethod
-    def setUpClass(cls):
-        #activate the device if voltha was enabled
-        if cls.VOLTHA_ENABLED is False or cls.VOLTHA_HOST is None:
-            return
-        ret = voltha_setup(host = cls.VOLTHA_HOST,
-                           rest_port = cls.VOLTHA_REST_PORT,
-                           olt_type = cls.VOLTHA_OLT_TYPE,
-                           olt_mac = cls.VOLTHA_OLT_MAC,
-                           uplink_vlan_map = cls.VOLTHA_UPLINK_VLAN_MAP)
-        if ret is not None:
-            cls.voltha_ctrl, cls.voltha_device, cls.voltha_switch_map = ret[0], ret[1], ret[2]
-
-    @classmethod
-    def tearDownClass(cls):
-        if cls.voltha_ctrl and cls.voltha_device:
-            voltha_teardown(cls.voltha_ctrl, cls.voltha_device, cls.voltha_switch_map)
-
     def setUp(self):
         super(eap_auth_exchange, self).setUp()
         self.onos_ctrl = OnosCtrl(self.app)
diff --git a/src/test/utils/CordTestConfig.py b/src/test/utils/CordTestConfig.py
index 7aca5cb..e57b948 100644
--- a/src/test/utils/CordTestConfig.py
+++ b/src/test/utils/CordTestConfig.py
@@ -6,6 +6,7 @@
 from nose.plugins import Plugin
 from CordTestUtils import log_test as log
 from CordTestUtils import running_on_pod
+from VolthaCtrl import voltha_setup, voltha_teardown
 from SSHTestAgent import SSHTestAgent
 log.setLevel('INFO')
 
@@ -49,7 +50,7 @@
     def addFailure(self, test, exception):
         self.doFailure(test, exception)
 
-def setup_module(module):
+def get_test_class(module):
     class_test = None
     for name, obj in inspect.getmembers(module):
         if inspect.isclass(obj) and issubclass(obj, unittest.TestCase):
@@ -59,6 +60,10 @@
             else:
                 class_test = obj
 
+    return class_test
+
+def setup_module(module):
+    class_test = get_test_class(module)
     assert_not_equal(class_test, None)
     module_name = module.__name__.split('.')[-1]
     cfg = '{}.json'.format(module_name)
@@ -69,6 +74,47 @@
             for k, v in json_data.iteritems():
                 setattr(class_test, k, v)
 
+    #check for voltha and configure as appropriate
+    voltha_attrs = dict(host='172.17.0.1',
+                        rest_port = 8881,
+                        config_fake = False,
+                        olt_type = 'ponsim',
+                        olt_mac = '00:0c:e2:31:12:00',
+                        uplink_vlan_map = { 'of:0000000000000001' : '222' }
+                        )
+    voltha_enabled = bool(int(os.getenv('VOLTHA_ENABLED', 0)))
+    voltha_configure = True
+    if hasattr(class_test, 'VOLTHA_AUTO_CONFIGURE'):
+        voltha_configure = getattr(class_test, 'VOLTHA_AUTO_CONFIGURE')
+
+    if voltha_enabled and voltha_configure:
+        for k,v in voltha_attrs.iteritems():
+            voltha_attr = 'VOLTHA_{}'.format(k.upper())
+            if hasattr(class_test, voltha_attr):
+                v = getattr(class_test, voltha_attr)
+                voltha_attrs[k] = v
+            else:
+                setattr(class_test, voltha_attr, v)
+        ret = voltha_setup(**voltha_attrs)
+        if ret is not None:
+            #setup the stage to drop voltha on the way out
+            setattr(class_test, 'voltha_ctrl', ret[0])
+            setattr(class_test, 'voltha_device', ret[1])
+            setattr(class_test, 'voltha_switch_map', ret[2])
+
+def teardown_module(module):
+    class_test = get_test_class(module)
+    if class_test is None:
+        return
+    if not hasattr(class_test, 'voltha_ctrl') or \
+       not hasattr(class_test, 'voltha_device') or \
+       not hasattr(class_test, 'voltha_switch_map'):
+        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)
+
 def running_on_ciab():
     if running_on_pod() is False:
         return False
diff --git a/src/test/utils/VolthaCtrl.py b/src/test/utils/VolthaCtrl.py
index 955644e..9e9b757 100644
--- a/src/test/utils/VolthaCtrl.py
+++ b/src/test/utils/VolthaCtrl.py
@@ -349,4 +349,5 @@
     time.sleep(10)
     if olt_app is None:
         olt_app = get_olt_app()
+    log.info('Uninstalling OLT app %s' %olt_app)
     OnosCtrl.uninstall_app(olt_app)
