diff --git a/src/test/utils/CordContainer.py b/src/test/utils/CordContainer.py
index 4458869..ab49cb5 100644
--- a/src/test/utils/CordContainer.py
+++ b/src/test/utils/CordContainer.py
@@ -596,6 +596,7 @@
     onos_form_cluster = os.path.join(setup_dir, 'onos-form-cluster')
     cord_apps_dir = os.path.join(os.path.dirname(os.path.realpath(__file__)), '..', 'apps')
     host_guest_map = ( (host_config_dir, guest_config_dir), )
+    ssl_key = None
     cluster_cfg = os.path.join(host_config_dir, 'cluster.json')
     cluster_mode = False
     cluster_instances = []
@@ -653,6 +654,14 @@
         Onos.guest_data_dir = '/root/onos/apache-karaf-{}/data'.format(karaf)
         Onos.guest_log_file = '/root/onos/apache-karaf-{}/data/log/karaf.log'.format(karaf)
 
+    @classmethod
+    def update_ssl_key(cls, key):
+        if os.access(key, os.F_OK):
+            try:
+                shutil.copy(key, cls.host_config_dir)
+                cls.ssl_key = os.path.join(cls.host_config_dir, os.path.basename(key))
+            except:pass
+
     def remove_data_volume(self):
         if self.data_map is not None:
             self.remove_data_map(*self.data_map)
@@ -678,6 +687,9 @@
         self.data_map = None
         instance_memory = (get_mem(jvm_heap_size = Onos.JVM_HEAP_SIZE, instances = Onos.MAX_INSTANCES),) * 2
         self.env['JAVA_OPTS'] = self.JAVA_OPTS_FORMAT.format(*instance_memory)
+        if self.ssl_key:
+            key_files = ( os.path.join(self.guest_config_dir, os.path.basename(self.ssl_key)), ) * 2
+            self.env['JAVA_OPTS'] += ' -DenableOFTLS=true -Djavax.net.ssl.keyStore={} -Djavax.net.ssl.keyStorePassword=222222 -Djavax.net.ssl.trustStore={} -Djavax.net.ssl.trustStorePassword=222222'.format(*key_files)
         if cluster is True:
             self.ports = []
             if data_volume is not None:
diff --git a/src/test/utils/VolthaCtrl.py b/src/test/utils/VolthaCtrl.py
index d7ab139..8e70dd4 100644
--- a/src/test/utils/VolthaCtrl.py
+++ b/src/test/utils/VolthaCtrl.py
@@ -62,6 +62,7 @@
             print('Chameleon voltha sevice is already running. Skipped start')
 
         #now start voltha and ofagent
+        voltha_setup_cmd = "cd {} && sh -c '. ./env.sh && make rebuild-venv && make protos'".format(self.voltha_loc)
         voltha_start_cmd = "cd {} && sh -c '. ./env.sh && \
         nohup python voltha/main.py -v --consul=localhost:8500 --kafka={}:9092 -I {} \
         --fluentd={}:24224 --rest-port=8880 --grpc-port=50555 \
@@ -69,7 +70,15 @@
                                          self.service_map['kafka']['ip'],
                                          self.interface,
                                          self.service_map['fluentd']['ip'])
+        pki_dir = '{}/pki'.format(self.voltha_loc)
         if not self.service_running('python voltha/main.py'):
+            voltha_pki_dir = '/voltha'
+            if os.access(pki_dir, os.F_OK):
+                pki_xfer_cmd = 'mkdir -p {} && cp -rv {}/pki {}'.format(voltha_pki_dir,
+                                                                        self.voltha_loc,
+                                                                        voltha_pki_dir)
+                os.system(pki_xfer_cmd)
+            #os.system(voltha_setup_cmd)
             ret = os.system(voltha_start_cmd)
             if ret != 0:
                 raise Exception('Failed to start VOLTHA. Return code %d' %ret)
@@ -84,6 +93,12 @@
                                           self.service_map['fluentd']['ip'],
                                           self.controller)
         if not self.service_running('python ofagent/main.py'):
+            ofagent_pki_dir = '/ofagent'
+            if os.access(pki_dir, os.F_OK):
+                pki_xfer_cmd = 'mkdir -p {} && cp -rv {}/pki {}'.format(ofagent_pki_dir,
+                                                                        self.voltha_loc,
+                                                                        ofagent_pki_dir)
+                os.system(pki_xfer_cmd)
             ret = os.system(ofagent_start_cmd)
             if ret != 0:
                 raise Exception('VOLTHA ofagent not started. Failed with return code %d' %ret)
