diff --git a/src/test/setup/cord-test.py b/src/test/setup/cord-test.py
index 485295c..896e78a 100755
--- a/src/test/setup/cord-test.py
+++ b/src/test/setup/cord-test.py
@@ -350,7 +350,7 @@
     test_server_params = args.server.split(':')
     test_host = test_server_params[0]
     test_port = CORD_TEST_PORT
-    log_level = args.log_level.upper()
+    test_manifest = TestManifest(args = args)
     if len(test_server_params) > 1:
         test_port = int(test_server_params[1])
     try:
@@ -379,9 +379,6 @@
        for c in update_map.keys():
            update_map[c] = True
 
-    onos_ip = None
-    radius_ip = None
-    head_node = platform.node()
     use_manifest = False
     if args.manifest:
         if os.access(args.manifest, os.F_OK):
@@ -391,14 +388,15 @@
                 try:
                     shutil.copy(args.manifest, dest)
                 except: pass
-            test_manifest = TestManifest(dest)
-            onos_ip = test_manifest.onos_ip
-            radius_ip = test_manifest.radius_ip
-            head_node = test_manifest.head_node
+            test_manifest = TestManifest(manifest = dest)
             use_manifest = True
         else:
             print('Unable to access test manifest: %s' %args.manifest)
 
+    onos_ip = test_manifest.onos_ip
+    radius_ip = test_manifest.radius_ip
+    head_node = test_manifest.head_node
+
     #don't spawn onos if the user has specified external test controller with test interface config
     if args.test_controller:
         ips = args.test_controller.split('/')
@@ -408,43 +406,45 @@
         else:
             radius_ip = None
 
-    Container.IMAGE_PREFIX = args.prefix
-    Onos.MAX_INSTANCES = args.onos_instances
-    cluster_mode = True if args.onos_instances > 1 else False
-    async_mode = cluster_mode and args.async_mode
-    existing_list = [ c['Names'][0][1:] for c in Container.dckr.containers() if c['Image'] == args.onos ]
-    setup_cluster = False if len(existing_list) == args.onos_instances else True
+    Container.IMAGE_PREFIX = test_manifest.image_prefix
+    Onos.MAX_INSTANCES = test_manifest.onos_instances
+    cluster_mode = True if test_manifest.onos_instances > 1 else False
+    async_mode = cluster_mode and test_manifest.async_mode
+    existing_list = [ c['Names'][0][1:] for c in Container.dckr.containers() if c['Image'] == test_manifest.onos_image ]
+    setup_cluster = False if len(existing_list) == test_manifest.onos_instances else True
     onos_ips = []
+    if cluster_mode is True and len(existing_list) > 1:
+        ##don't setup cluster config again
+        cluster_mode = False
     if onos_ip is None:
-        image_names = args.onos.rsplit(':', 1)
+        image_names = test_manifest.onos_image.rsplit(':', 1)
         onos_cnt['image'] = image_names[0]
         if len(image_names) > 1:
             if image_names[1].find('/') < 0:
                 onos_cnt['tag'] = image_names[1]
             else:
                 #tag cannot have slashes
-                onos_cnt['image'] = args.onos
+                onos_cnt['image'] = test_manifest.onos_image
 
         Onos.IMAGE = onos_cnt['image']
-        Onos.PREFIX = args.prefix
+        Onos.PREFIX = test_manifest.image_prefix
         Onos.TAG = onos_cnt['tag']
-        data_volume = '{}-data'.format(Onos.NAME) if args.shared_volume else None
+        data_volume = '{}-data'.format(Onos.NAME) if test_manifest.shared_volume else None
         onos = Onos(image = Onos.IMAGE,
                     tag = Onos.TAG, boot_delay = 60, cluster = cluster_mode,
                     data_volume = data_volume, async = async_mode)
         if onos.running:
-            onos_ip = onos.ipaddr
-            onos_ips.append(onos_ip)
+            onos_ips.append(onos.ipaddr)
     else:
         onos_ips.append(onos_ip)
 
-    num_onos_instances = args.onos_instances
+    num_onos_instances = test_manifest.onos_instances
     if num_onos_instances > 1 and onos is not None:
         onos_instances = []
         onos_instances.append(onos)
         for i in range(1, num_onos_instances):
             name = '{}-{}'.format(Onos.NAME, i+1)
-            data_volume = '{}-data'.format(name) if args.shared_volume else None
+            data_volume = '{}-data'.format(name) if test_manifest.shared_volume else None
             quagga_config = Onos.get_quagga_config(i)
             onos = Onos(name = name, image = Onos.IMAGE, tag = Onos.TAG, boot_delay = 60, cluster = cluster_mode,
                         data_volume = data_volume, async = async_mode,
@@ -452,24 +452,25 @@
             onos_instances.append(onos)
             if onos.running:
                 onos_ips.append(onos.ipaddr)
-        if async_mode is True:
+        if async_mode is True and cluster_mode is True:
             Onos.start_cluster_async(onos_instances)
         if not onos_ips:
             for onos in onos_instances:
                 onos_ips.append(onos.ipaddr)
-        try:
-            for ip in onos_ips:
-                print('Installing cord tester ONOS app %s in ONOS instance %s' %(args.app,ip))
-                OnosCtrl.install_app(args.app, onos_ip = ip)
-        except: pass
+        if cluster_mode is True:
+            try:
+                for ip in onos_ips:
+                    print('Installing cord tester ONOS app %s in ONOS instance %s' %(args.app,ip))
+                    OnosCtrl.install_app(args.app, onos_ip = ip)
+            except: pass
         if setup_cluster is True:
             Onos.setup_cluster(onos_instances)
         else:
             print('ONOS instances already running. Skipping ONOS form cluster for %d instances' %num_onos_instances)
     ctlr_addr = ','.join(onos_ips)
 
-    print('Onos IP %s, Test type %s' %(onos_ip, args.test_type))
-    if use_manifest or args.test_controller:
+    print('Controller IP %s, Test type %s' %(onos_ips, args.test_type))
+    if onos_ip is not None:
         print('Installing ONOS cord apps')
         try:
             Onos.install_cord_apps(onos_ip = onos_ip)
@@ -479,7 +480,7 @@
         print('Installing cord tester ONOS app %s' %args.app)
         try:
 	    for ip in onos_ips:
-                OnosCtrl.install_app(args.app, onos_ip = onos_ip)
+                OnosCtrl.install_app(args.app, onos_ip = ip)
         except: pass
 
     if radius_ip is None:
@@ -504,8 +505,8 @@
                      'QUAGGA_IP': test_host,
                      'CORD_TEST_HOST' : test_host,
                      'CORD_TEST_PORT' : test_port,
-                     'ONOS_RESTART' : 0 if args.olt and args.test_controller else 1,
-                     'LOG_LEVEL': log_level,
+                     'ONOS_RESTART' : 0 if test_manifest.olt and args.test_controller else 1,
+                     'LOG_LEVEL': test_manifest.log_level,
                      'MANIFEST': int(use_manifest),
                      'HEAD_NODE': head_node if head_node else CORD_TEST_HOST,
                      'MAAS_API_KEY': maas_api_key
@@ -514,7 +515,7 @@
     if ssh_key_file:
         test_cnt_env['SSH_KEY_FILE'] = ssh_key_file
 
-    if args.olt:
+    if test_manifest.olt:
         olt_conf_test_loc = os.path.join(CordTester.sandbox_setup, 'olt_config.json')
         test_cnt_env['OLT_CONFIG'] = olt_conf_test_loc
 
@@ -551,7 +552,7 @@
         test_containers.append(test_cnt)
         if not test_cnt.create:
             continue
-        if test_cnt.create and (args.start_switch or not args.olt):
+        if test_cnt.create and (test_manifest.start_switch or not test_manifest.olt):
             if not args.no_switch:
                 test_cnt.start_switch()
         if test_cnt.create and test_cnt.olt:
@@ -581,7 +582,7 @@
                               env = test_cnt_env,
                               rm = False if args.keep else True,
                               update = update_map['test'])
-        if test_cnt.create and (args.start_switch or not args.olt):
+        if test_cnt.create and (test_manifest.start_switch or not test_manifest.olt):
             #For non parallel tests, we just restart the switch also for OLT's
             CordTester.switch_on_olt = False
             if not args.no_switch:
@@ -601,13 +602,12 @@
     nose_cnt = {'image': CordTester.IMAGE, 'tag': 'candidate'}
     update_map = { 'quagga' : False, 'radius' : False, 'test': False }
     update_map[args.update.lower()] = True
-    log_level = args.log_level.upper()
+    test_manifest = TestManifest(args = args)
+
     if args.update.lower() == 'all':
        for c in update_map.keys():
            update_map[c] = True
 
-    onos_ip = None
-    radius_ip = None
     onos_cord_loc = args.onos_cord
     if onos_cord_loc:
         if onos_cord_loc.find(os.path.sep) < 0:
@@ -618,7 +618,6 @@
         #Disable test container provisioning on the ONOS compute node
         args.dont_provision = True
 
-    head_node = platform.node()
     use_manifest = False
     if args.manifest:
         if os.access(args.manifest, os.F_OK):
@@ -628,12 +627,12 @@
                 try:
                     shutil.copy(args.manifest, dest)
                 except: pass
-            test_manifest = TestManifest(dest)
-            onos_ip = test_manifest.onos_ip
-            radius_ip = test_manifest.radius_ip
-            head_node = test_manifest.head_node
+            test_manifest = TestManifest(manifest = dest)
             use_manifest = True
 
+    onos_ip = test_manifest.onos_ip
+    radius_ip = test_manifest.radius_ip
+    head_node = test_manifest.head_node
     ##If onos/radius was already started
     if args.test_controller:
         ips = args.test_controller.split('/')
@@ -651,25 +650,25 @@
             sys.exit(1)
         onos_cord = OnosCord(onos_ip, onos_cord_loc)
 
-    Container.IMAGE_PREFIX = args.prefix
+    Container.IMAGE_PREFIX = test_manifest.image_prefix
     #don't spawn onos if the user had started it externally
-    image_names = args.onos.rsplit(':', 1)
+    image_names = test_manifest.onos_image.rsplit(':', 1)
     onos_cnt['image'] = image_names[0]
     if len(image_names) > 1:
         if image_names[1].find('/') < 0:
             onos_cnt['tag'] = image_names[1]
         else:
             #tag cannot have slashes
-            onos_cnt['image'] = args.onos
+            onos_cnt['image'] = test_manifest.onos_image
 
     Onos.IMAGE = onos_cnt['image']
-    Onos.PREFIX = args.prefix
+    Onos.PREFIX = test_manifest.image_prefix
     Onos.TAG = onos_cnt['tag']
-    Onos.MAX_INSTANCES = args.onos_instances
-    cluster_mode = True if args.onos_instances > 1 else False
-    async_mode = cluster_mode and args.async_mode
-    existing_list = [ c['Names'][0][1:] for c in Container.dckr.containers() if c['Image'] == args.onos ]
-    setup_cluster = False if len(existing_list) == args.onos_instances else True
+    Onos.MAX_INSTANCES = test_manifest.onos_instances
+    cluster_mode = True if test_manifest.onos_instances > 1 else False
+    async_mode = cluster_mode and test_manifest.async_mode
+    existing_list = [ c['Names'][0][1:] for c in Container.dckr.containers() if c['Image'] == test_manifest.onos_image ]
+    setup_cluster = False if len(existing_list) == test_manifest.onos_instances else True
     #cleanup existing volumes before forming a new cluster
     if setup_cluster is True:
         print('Cleaning up existing cluster volumes')
@@ -681,22 +680,21 @@
     onos = None
     onos_ips = []
     if onos_ip is None:
-        data_volume = '{}-data'.format(Onos.NAME) if args.shared_volume else None
+        data_volume = '{}-data'.format(Onos.NAME) if test_manifest.shared_volume else None
         onos = Onos(image = Onos.IMAGE, tag = Onos.TAG, boot_delay = 60, cluster = cluster_mode,
                     data_volume = data_volume, async = async_mode)
         if onos.running:
-            onos_ip = onos.ipaddr
-            onos_ips.append(onos_ip)
+            onos_ips.append(onos.ipaddr)
     else:
         onos_ips.append(onos_ip)
 
-    num_onos_instances = args.onos_instances
+    num_onos_instances = test_manifest.onos_instances
     if num_onos_instances > 1 and onos is not None:
         onos_instances = []
         onos_instances.append(onos)
         for i in range(1, num_onos_instances):
             name = '{}-{}'.format(Onos.NAME, i+1)
-            data_volume = '{}-data'.format(name) if args.shared_volume else None
+            data_volume = '{}-data'.format(name) if test_manifest.shared_volume else None
             quagga_config = Onos.get_quagga_config(i)
             onos = Onos(name = name, image = Onos.IMAGE, tag = Onos.TAG, boot_delay = 60, cluster = cluster_mode,
                         data_volume = data_volume, async = async_mode,
@@ -714,7 +712,7 @@
 
     ctlr_addr = ','.join(onos_ips)
     print('Onos IP %s' %ctlr_addr)
-    if use_manifest or args.test_controller:
+    if onos_ip is not None:
         print('Installing ONOS cord apps')
         try:
             Onos.install_cord_apps(onos_ip = onos_ip)
@@ -758,8 +756,8 @@
                          'QUAGGA_IP': ip,
                          'CORD_TEST_HOST' : ip,
                          'CORD_TEST_PORT' : port,
-                         'ONOS_RESTART' : 0 if args.olt and args.test_controller else 1,
-                         'LOG_LEVEL': log_level,
+                         'ONOS_RESTART' : 0 if test_manifest.olt and args.test_controller else 1,
+                         'LOG_LEVEL': test_manifest.log_level,
                          'MANIFEST': int(use_manifest),
                          'HEAD_NODE': head_node if head_node else CORD_TEST_HOST,
                          'MAAS_API_KEY': maas_api_key
@@ -767,7 +765,7 @@
 
         if ssh_key_file:
             test_cnt_env['SSH_KEY_FILE'] = ssh_key_file
-        if args.olt:
+        if test_manifest.olt:
             olt_conf_test_loc = os.path.join(CordTester.sandbox_setup, 'olt_config.json')
             test_cnt_env['OLT_CONFIG'] = olt_conf_test_loc
 
@@ -780,7 +778,7 @@
                               rm = False,
                               update = update_map['test'])
 
-        if args.start_switch or not args.olt:
+        if test_manifest.start_switch or not test_manifest.olt:
             test_cnt.start_switch()
         if test_cnt.olt:
             test_cnt.setup_intfs(port_num = 0)
diff --git a/src/test/setup/manifest.json b/src/test/setup/manifest.json
index 366558e..8ac08e3 100644
--- a/src/test/setup/manifest.json
+++ b/src/test/setup/manifest.json
@@ -1,5 +1,7 @@
 {
-  "onos"   : "172.17.0.2",
-  "radius" : "172.17.0.3",
-  "head_node"   : "cord-r6-s1.cord.lab"
-}
\ No newline at end of file
+    "onos_instances": 1,
+    "olt": true,
+    "start_switch": true,
+    "onos_image": "onosproject/onos:latest",
+    "log_level" : "INFO"
+}
diff --git a/src/test/utils/TestManifest.py b/src/test/utils/TestManifest.py
index 2156972..de7c72a 100644
--- a/src/test/utils/TestManifest.py
+++ b/src/test/utils/TestManifest.py
@@ -1,12 +1,12 @@
-# 
+#
 # Copyright 2016-present Ciena Corporation
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
 # You may obtain a copy of the License at
-# 
+#
 # http://www.apache.org/licenses/LICENSE-2.0
-# 
+#
 # Unless required by applicable law or agreed to in writing, software
 # distributed under the License is distributed on an "AS IS" BASIS,
 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -16,13 +16,35 @@
 import json
 import os
 import shutil
+import platform
 
 class TestManifest(object):
 
-    def __init__(self, manifest):
+    def __init__(self, manifest = None, args = None):
         self.manifest = manifest
-        with open(self.manifest, 'r') as fd:
-            data = json.load(fd)
-        self.onos_ip = data.get('onos', None)
-        self.radius_ip = data.get('radius', None)
-        self.head_node = data.get('head_node', None)
+        if args is not None and manifest is None:
+            self.onos_ip = None
+            self.radius_ip = None
+            self.head_node = platform.node()
+            self.log_level = args.log_level.upper()
+            self.onos_instances = args.onos_instances
+            self.async_mode = args.async_mode
+            self.shared_volume = args.shared_volume
+            self.olt = args.olt
+            self.start_switch = args.start_switch
+            self.image_prefix = args.prefix
+            self.onos_image = args.onos
+        else:
+            with open(self.manifest, 'r') as fd:
+                data = json.load(fd)
+            self.onos_ip = data.get('onos', None)
+            self.radius_ip = data.get('radius', None)
+            self.head_node = data.get('head_node', platform.node())
+            self.log_level = data.get('log_level', 'INFO').upper()
+            self.onos_instances = data.get('onos_instances', 1)
+            self.shared_volume = data.get('shared_volume', True)
+            self.async_mode = True if self.onos_instances > 1 else False
+            self.olt = data.get('olt', True)
+            self.start_switch = data.get('start_switch', self.olt)
+            self.image_prefix = data.get('image_prefix', '')
+            self.onos_image = data.get('onos_image', 'onosproject/onos:latest')
