diff --git a/src/test/setup/cord-test.py b/src/test/setup/cord-test.py
index 960e35f..a2d0ac3 100755
--- a/src/test/setup/cord-test.py
+++ b/src/test/setup/cord-test.py
@@ -30,6 +30,7 @@
 from CordContainer import *
 from CordTestServer import cord_test_server_start,cord_test_server_stop,cord_test_server_shutdown,CORD_TEST_HOST,CORD_TEST_PORT
 from TestManifest import TestManifest
+from VolthaCtrl import VolthaService
 from docker import Client
 from docker.utils import kwargs_from_env
 from Xos import XosServiceProfile
@@ -545,6 +546,8 @@
     service_profile = test_manifest.service_profile
     synchronizer = test_manifest.synchronizer
     olt_config_file = test_manifest.olt_config
+    voltha_loc = test_manifest.voltha_loc
+    voltha_intf = test_manifest.voltha_intf
     if not os.access(olt_config_file, os.F_OK):
         olt_config_file = os.path.join(CordTester.tester_base, 'olt_config.json')
     else:
@@ -661,6 +664,11 @@
                 OnosCtrl.install_app(args.app, onos_ip = ip)
         except: pass
 
+    if voltha_loc:
+        #start voltha
+        voltha = VolthaService(voltha_loc, onos_ips[0], interface = voltha_intf)
+        voltha.start()
+
     if radius_ip is None:
         ##Start Radius container
         radius = Radius(prefix = Container.IMAGE_PREFIX, update = update_map['radius'],
@@ -689,7 +697,8 @@
                      'LOG_LEVEL': test_manifest.log_level,
                      'HEAD_NODE': head_node if head_node else CORD_TEST_HOST,
                      'MAAS_API_KEY': maas_api_key,
-                     'KARAF_VERSION' : test_manifest.karaf_version
+                     'KARAF_VERSION' : test_manifest.karaf_version,
+                     'VOLTHA_ENABLED' : True if voltha_loc else False
                    }
 
     if ssh_key_file:
@@ -822,6 +831,8 @@
     iterations = test_manifest.iterations
     service_profile = test_manifest.service_profile
     synchronizer = test_manifest.synchronizer
+    voltha_loc = test_manifest.voltha_loc
+    voltha_intf = test_manifest.voltha_intf
     onos_cord = None
     onos_cord_loc = test_manifest.onos_cord
     Onos.update_data_dir(test_manifest.karaf_version)
@@ -929,6 +940,11 @@
             OnosCtrl.install_app(args.app, onos_ip = ip)
     except: pass
 
+    if voltha_loc:
+        #start voltha
+        voltha = VolthaService(voltha_loc, onos_ips[0], interface = voltha_intf)
+        voltha.start()
+
     ##Start Radius container if not started
     if radius_ip is None:
         radius = Radius(prefix = Container.IMAGE_PREFIX, update = update_map['radius'],
@@ -967,7 +983,8 @@
                          'LOG_LEVEL': test_manifest.log_level,
                          'HEAD_NODE': head_node if head_node else CORD_TEST_HOST,
                          'MAAS_API_KEY': maas_api_key,
-                         'KARAF_VERSION' : test_manifest.karaf_version
+                         'KARAF_VERSION' : test_manifest.karaf_version,
+                         'VOLTHA_ENABLED' : True if voltha_loc else False
                        }
 
         if ssh_key_file:
@@ -1023,6 +1040,7 @@
         args.onos_cord = manifest.onos_cord
         args.service_profile = manifest.service_profile
         args.synchronizer = manifest.synchronizer
+        args.voltha_loc = manifest.voltha_loc
     else:
         args.onos_ip = None
         args.radius_ip = None
@@ -1057,6 +1075,10 @@
     quagga_container = '{}{}:candidate'.format(prefix, Quagga.IMAGE)
     Container.cleanup(radius_container)
     Container.cleanup(quagga_container)
+    if args.voltha_loc:
+        voltha = VolthaService(args.voltha_loc, args.onos_ip)
+        voltha.stop()
+
     if args.onos_cord:
         #try restoring the onos cord instance
         try:
@@ -1280,6 +1302,11 @@
                             help='Specify the synchronizer to use for ONOS cord instance when running on podd.'
                             'Eg: vtn,fabric,cord')
     parser_run.add_argument('-karaf', '--karaf', default='3.0.8', type=str, help='Karaf version for ONOS')
+    parser_run.add_argument('-voltha-loc', '--voltha-loc', default='', type=str,
+                            help='Specify the voltha location in order to start voltha')
+    parser_run.add_argument('-voltha-intf', '--voltha-intf', default='eth0', type=str,
+                            help='Specify the voltha interface for voltha to listen')
+
     parser_run.set_defaults(func=runTest)
 
     parser_setup = subparser.add_parser('setup', help='Setup cord tester environment')
@@ -1323,6 +1350,10 @@
     parser_setup.add_argument('-jvm-heap-size', '--jvm-heap-size', default='', type=str, help='ONOS JVM heap size')
     parser_setup.add_argument('-network', '--network', default='', type=str, help='Docker network to attach')
     parser_setup.add_argument('-karaf', '--karaf', default='3.0.8', type=str, help='Karaf version for ONOS')
+    parser_setup.add_argument('-voltha-loc', '--voltha-loc', default='', type=str,
+                              help='Specify the voltha location in order to start voltha')
+    parser_setup.add_argument('-voltha-intf', '--voltha-intf', default='eth0', type=str,
+                              help='Specify the voltha interface for voltha to listen')
     parser_setup.set_defaults(func=setupCordTester)
 
     parser_xos = subparser.add_parser('xos', help='Building xos into cord tester environment')
@@ -1374,6 +1405,8 @@
                                 help='Specify the synchronizer to use for ONOS cord instance when running on podd.'
                                 'Eg: vtn,fabric,cord')
     parser_cleanup.add_argument('-m', '--manifest', default='', type=str, help='Provide test manifest')
+    parser_cleanup.add_argument('-voltha-loc', '--voltha-loc', default='', type=str,
+                                help='Specify the voltha location')
     parser_cleanup.set_defaults(func=cleanupTests)
 
     c = Client(**(kwargs_from_env()))
diff --git a/src/test/setup/manifest-voltha.json b/src/test/setup/manifest-voltha.json
new file mode 100644
index 0000000..d73b5d2
--- /dev/null
+++ b/src/test/setup/manifest-voltha.json
@@ -0,0 +1,11 @@
+{
+    "onos_instances": 1,
+    "olt": true,
+    "start_switch": true,
+    "onos_image": "onosproject/onos:latest",
+    "log_level" : "INFO",
+    "jvm_heap_size" : "1G",
+    "karaf_version" : "3.0.8",
+    "voltha_loc" : "/home/ubuntu/voltha/incubator/voltha",
+    "voltha_intf" : "enp0s9"
+}
diff --git a/src/test/utils/TestManifest.py b/src/test/utils/TestManifest.py
index bdd66c7..26c5130 100644
--- a/src/test/utils/TestManifest.py
+++ b/src/test/utils/TestManifest.py
@@ -50,6 +50,8 @@
             self.server = args.server
             self.jvm_heap_size = args.jvm_heap_size if args.jvm_heap_size else None
             self.karaf_version = args.karaf
+            self.voltha_loc = args.voltha_loc
+            self.voltha_intf = args.voltha_intf
         else:
             with open(self.manifest, 'r') as fd:
                 data = json.load(fd)
@@ -76,3 +78,5 @@
             self.iterations = data.get('iterations', None)
             self.jvm_heap_size = data.get('jvm_heap_size', None)
             self.karaf_version = data.get('karaf_version', '3.0.8')
+            self.voltha_loc = data.get('voltha_loc', '')
+            self.voltha_intf = data.get('voltha_intf', 'eth0')
diff --git a/src/test/utils/VolthaCtrl.py b/src/test/utils/VolthaCtrl.py
index b23aefa..19e246c 100644
--- a/src/test/utils/VolthaCtrl.py
+++ b/src/test/utils/VolthaCtrl.py
@@ -1,7 +1,93 @@
 import requests
 import json
 import time
-from CordTestUtils import log_test as log
+import os
+import signal
+from CordTestUtils import log_test as log, getstatusoutput
+from CordContainer import Container
+
+class VolthaService(object):
+    services = ('consul', 'kafka', 'zookeeper', 'registrator', 'fluentd')
+    compose_file = 'docker-compose-system-test.yml'
+    service_map = {}
+
+    def __init__(self, voltha_loc, controller, interface = 'eth0'):
+        if not os.access(voltha_loc, os.F_OK):
+            raise Exception('Voltha location %s not found' %voltha_loc)
+        compose_file_loc = os.path.join(voltha_loc, 'compose', self.compose_file)
+        if not os.access(compose_file_loc, os.F_OK):
+            raise Exception('Voltha compose file %s not found' %compose_file_loc)
+        self.voltha_loc = voltha_loc
+        self.controller = controller
+        self.interface = interface
+        self.compose_file_loc = compose_file_loc
+
+    def start(self):
+        start_cmd = 'docker-compose -f {} up -d {} {} {} {} {}'.format(self.compose_file_loc,
+                                                                       *self.services)
+        ret = os.system(start_cmd)
+        if ret != 0:
+            raise Exception('Failed to start voltha services. Failed with code %d' %ret)
+
+        for service in self.services:
+            name = 'compose_{}_1'.format(service)
+            network = 'compose_default'
+            cnt = Container(name, name)
+            ip = cnt.ip(network = network)
+            if not ip:
+                raise Exception('IP not found for container %s' %name)
+            print('IP %s for service %s' %(ip, service))
+            self.service_map[service] = dict(name = name, network = network, ip = ip)
+
+        #first start chameleon
+        chameleon_start_cmd = "cd {} && sh -c '. ./env.sh && \
+        nohup python chameleon/main.py -v --consul=localhost:8500 \
+        --fluentd={}:24224 --grpc-endpoint=localhost:50555 \
+        >/tmp/chameleon.log 2>&1 &'".format(self.voltha_loc,
+                                            self.service_map['fluentd']['ip'])
+        ret = os.system(chameleon_start_cmd)
+        if ret != 0:
+            raise Exception('VOLTHA chameleon service not started. Failed with return code %d' %ret)
+
+        #now start voltha and ofagent
+        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 \
+        >/tmp/voltha.log 2>&1 &'".format(self.voltha_loc,
+                                         self.service_map['kafka']['ip'],
+                                         self.interface,
+                                         self.service_map['fluentd']['ip'])
+        ret = os.system(voltha_start_cmd)
+        if ret != 0:
+            raise Exception('Failed to start VOLTHA. Return code %d' %ret)
+
+
+        ofagent_start_cmd = "cd {} && sh -c '. ./env.sh && \
+        nohup python ofagent/main.py -v --consul=localhost:8500 \
+        --fluentd={}:24224 --controller={}:6653 --grpc-endpoint=localhost:50555 \
+        >/tmp/ofagent.log 2>&1 &'".format(self.voltha_loc,
+                                          self.service_map['fluentd']['ip'],
+                                          self.controller)
+        ret = os.system(ofagent_start_cmd)
+        if ret != 0:
+            raise Exception('VOLTHA ofagent not started. Failed with return code %d' %ret)
+
+    def kill_service(self, pattern):
+        st, output = getstatusoutput('pgrep -f "{}"'.format(pattern))
+        if st == 0 and output:
+            pids = output.strip().splitlines()
+            for pid in pids:
+                try:
+                    os.kill(int(pid), signal.SIGKILL)
+                except:
+                    pass
+
+    def stop(self):
+        self.kill_service('python voltha/main.py')
+        self.kill_service('python ofagent/main.py')
+        self.kill_service('python chameleon/main.py')
+        service_stop_cmd = 'docker-compose -f {} down'.format(self.compose_file_loc)
+        os.system(service_stop_cmd)
 
 class VolthaCtrl(object):
 
diff --git a/src/test/voltha/volthaTest.json b/src/test/voltha/volthaTest.json
index 8ad1319..d397700 100644
--- a/src/test/voltha/volthaTest.json
+++ b/src/test/voltha/volthaTest.json
@@ -1,5 +1,5 @@
 {
-    "OLT_TYPE" : "tibit_olt",
+    "OLT_TYPE" : "simulated_olt",
     "OLT_MAC"  : "00:0c:e2:31:12:00",
     "VOLTHA_HOST" : "172.17.0.1",
     "VOLTHA_REST_PORT" : 8881
diff --git a/src/test/voltha/volthaTest.py b/src/test/voltha/volthaTest.py
index 526f593..0620e4b 100644
--- a/src/test/voltha/volthaTest.py
+++ b/src/test/voltha/volthaTest.py
@@ -249,7 +249,7 @@
         6  Verify that subscriber should not get ip from dhcp server, ping to gateway.
         """
 
-def test_subscriber_with_voltha_for_dhcp_starvation_positive_scenario(self):
+    def test_subscriber_with_voltha_for_dhcp_starvation_positive_scenario(self):
         """
         Test Method:
         0. Make sure that voltha is up and running on CORD-POD setup.
@@ -856,4 +856,3 @@
         6. Pause the olt device which is detected in voltha.
         7. Verify that subscriber should not get ip from external dhcp server. and other subscriber ping to gateway should failed.
         """
-
