diff --git a/src/test/setup/cord-test.py b/src/test/setup/cord-test.py
index 66dd299..2259284 100755
--- a/src/test/setup/cord-test.py
+++ b/src/test/setup/cord-test.py
@@ -623,7 +623,7 @@
         if not synchronizer:
             print('Specify synchronizer to use for the ONOS cord instance. Eg: vtn, fabric, cord')
             sys.exit(1)
-        onos_cord = OnosCord(onos_ip, onos_cord_loc, service_profile, synchronizer)
+        onos_cord = OnosCord(onos_ip, onos_cord_loc, service_profile, synchronizer, skip = test_manifest.skip_onos_restart)
 
     try:
         test_server = cord_test_server_start(daemonize = False, cord_test_host = test_host, cord_test_port = test_port,
@@ -914,7 +914,7 @@
         if not synchronizer:
             print('Specify synchronizer to use for the ONOS cord instance. Eg: vtn, fabric, cord')
             sys.exit(1)
-        onos_cord = OnosCord(onos_ip, onos_cord_loc, service_profile, synchronizer)
+        onos_cord = OnosCord(onos_ip, onos_cord_loc, service_profile, synchronizer, skip = test_manifest.skip_onos_restart)
 
     Container.IMAGE_PREFIX = test_manifest.image_prefix
     #don't spawn onos if the user had started it externally
@@ -982,17 +982,18 @@
 
     ctlr_addr = ','.join(onos_ips)
     print('Onos IP %s' %ctlr_addr)
-    if onos_ip is not None:
-        print('Installing ONOS cord apps')
-        try:
-            Onos.install_cord_apps(onos_ip = onos_ip)
-        except: pass
+    if not test_manifest.skip_onos_restart:
+        if onos_ip is not None:
+            print('Installing ONOS cord apps')
+            try:
+                Onos.install_cord_apps(onos_ip = onos_ip)
+            except: pass
 
-    print('Installing cord tester ONOS app %s' %args.app)
-    try:
-        for ip in onos_ips:
-            OnosCtrl.install_app(args.app, onos_ip = ip)
-    except: pass
+        print('Installing cord tester ONOS app %s' %args.app)
+        try:
+            for ip in onos_ips:
+                OnosCtrl.install_app(args.app, onos_ip = ip)
+        except: pass
 
     if voltha_loc:
         #start voltha
@@ -1137,7 +1138,7 @@
     if args.onos_cord:
         #try restoring the onos cord instance
         try:
-            onos_cord = OnosCord(args.onos_ip, args.onos_cord, args.service_profile, args.synchronizer, start = False)
+            onos_cord = OnosCord(args.onos_ip, args.onos_cord, args.service_profile, args.synchronizer, start = False, skip = test_manifest.skip_onos_restart)
             onos_cord.restore(force = True)
         except Exception as e:
             print(e)
@@ -1368,6 +1369,8 @@
     parser_run.add_argument('-expose-port', '--expose-port', action='store_true',
                             help='Start ONOS by exposing the controller ports to the host.'
                             'Add +1 for every other onos/cluster instance when running more than 1 ONOS instances')
+    parser_run.add_argument('-skip-onos-restart', '--skip-onos-restart', action='store_true',
+                            help = 'Skips restarting/configuring of onoscord')
     parser_run.set_defaults(func=runTest)
 
     parser_setup = subparser.add_parser('setup', help='Setup cord tester environment')
@@ -1422,6 +1425,8 @@
     parser_setup.add_argument('-expose-port', '--expose-port', action='store_true',
                               help='Start ONOS by exposing the controller ports to the host.'
                               'Add +1 for every other onos/cluster instance when running more than 1 ONOS instances')
+    parser_setup.add_argument('-skip-onos-restart', '--skip-onos-restart', action='store_true',
+                            help = 'Skips restarting/configuring of onoscord')
     parser_setup.set_defaults(func=setupCordTester)
 
     parser_xos = subparser.add_parser('xos', help='Building xos into cord tester environment')
@@ -1475,6 +1480,8 @@
     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.add_argument('-skip-onos-restart', '--skip-onos-restart', action='store_true',
+                            help = 'Skips restarting/configuring of onoscord')
     parser_cleanup.set_defaults(func=cleanupTests)
 
     c = Client(**(kwargs_from_env()))
diff --git a/src/test/setup/manifest-onf-cord.json b/src/test/setup/manifest-onf-cord.json
new file mode 100644
index 0000000..b8445e2
--- /dev/null
+++ b/src/test/setup/manifest-onf-cord.json
@@ -0,0 +1,15 @@
+{
+    "onos_instances": 1,
+    "olt": true,
+    "start_switch": true,
+    "onos_image": "onosproject/onos:latest",
+    "onos" : "172.21.0.2",
+    "onos_cord" : "/opt/onos_cord",
+    "service_profile" : "rcord",
+    "synchronizer" : "vtn",
+    "docker_network" : "onoscord_default",
+    "log_level" : "INFO",
+    "jvm_heap_size" : "1G",
+    "karaf_version" : "3.0.8",
+    "skip_onos_restart": "true"
+}
diff --git a/src/test/setup/olt_config.json b/src/test/setup/olt_config.json
index e744293..35ab577 100644
--- a/src/test/setup/olt_config.json
+++ b/src/test/setup/olt_config.json
@@ -8,13 +8,13 @@
           "port" : "fabric", "type" : "reserved", "s_tag" : 222, "c_tag" : 111
         },
         {
-          "port" : "fabric", "type" : "dhcp", "s_tag" : 304, "c_tag" : 304
+          "port" : "fabric", "type" : "reserved", "s_tag" : 333, "c_tag" : 888
         },
         {
-          "port" : "fabric", "type" : "dhcp", "s_tag" : 304, "c_tag" : 305
+          "port" : "fabric", "type" : "reserved", "s_tag" : 555, "c_tag" : 999
         },
         {
-          "port" : "fabric", "type" : "dhcp", "s_tag" : 304, "c_tag" : 306
+          "port" : "fabric", "type" : "reserved", "s_tag" : 666, "c_tag" : 661
         },
         {
           "port" : "fabric", "type" : "dhcp", "s_tag" : 304, "c_tag" : 307
diff --git a/src/test/utils/CordContainer.py b/src/test/utils/CordContainer.py
index 4e9cc25..30a9bff 100644
--- a/src/test/utils/CordContainer.py
+++ b/src/test/utils/CordContainer.py
@@ -345,65 +345,66 @@
     old_service_profile = '/opt/cord/orchestration/service-profile/cord-pod'
     cord_profile = '/opt/cord_profile'
 
-    def __init__(self, onos_ip, conf, service_profile, synchronizer, start = True, boot_delay = 5):
-        if not os.access(conf, os.F_OK):
-            raise Exception('ONOS cord configuration location %s is invalid' %conf)
-        self.old_cord = False
-        if os.access(self.old_service_profile, os.F_OK):
-            self.old_cord = True
-        self.onos_ip = onos_ip
-        self.onos_cord_dir = conf
-        self.boot_delay = boot_delay
-        self.synchronizer = synchronizer
-        self.service_profile = service_profile
-        self.docker_yaml = os.path.join(conf, 'docker-compose.yml')
-        self.docker_yaml_saved = os.path.join(conf, 'docker-compose.yml.saved')
-        self.onos_config_dir = os.path.join(conf, 'config')
-        self.onos_cfg_save_loc = os.path.join(conf, 'network-cfg.json.saved')
-        instance_active = False
-        #if we have a wrapper onos instance already active, back out
-        if os.access(self.onos_config_dir, os.F_OK) or os.access(self.docker_yaml_saved, os.F_OK):
-            instance_active = True
-        else:
-            if start is True:
-                os.mkdir(self.onos_config_dir)
-                shutil.copy(self.docker_yaml, self.docker_yaml_saved)
+    def __init__(self, onos_ip, conf, service_profile, synchronizer, start = True, boot_delay = 5, skip = False):
+        if not skip:
+            if not os.access(conf, os.F_OK):
+                raise Exception('ONOS cord configuration location %s is invalid' %conf)
+            self.old_cord = False
+            if os.access(self.old_service_profile, os.F_OK):
+                self.old_cord = True
+            self.onos_ip = onos_ip
+            self.onos_cord_dir = conf
+            self.boot_delay = boot_delay
+            self.synchronizer = synchronizer
+            self.service_profile = service_profile
+            self.docker_yaml = os.path.join(conf, 'docker-compose.yml')
+            self.docker_yaml_saved = os.path.join(conf, 'docker-compose.yml.saved')
+            self.onos_config_dir = os.path.join(conf, 'config')
+            self.onos_cfg_save_loc = os.path.join(conf, 'network-cfg.json.saved')
+            instance_active = False
+            #if we have a wrapper onos instance already active, back out
+            if os.access(self.onos_config_dir, os.F_OK) or os.access(self.docker_yaml_saved, os.F_OK):
+                instance_active = True
+            else:
+                if start is True:
+                    os.mkdir(self.onos_config_dir)
+                    shutil.copy(self.docker_yaml, self.docker_yaml_saved)
 
-        self.start_wrapper = instance_active is False and start is True
-        ##update the docker yaml with the config volume
-        with open(self.docker_yaml, 'r') as f:
-            yaml_config = yaml.load(f)
-            image = yaml_config['services'].keys()[0]
-            cord_conf_dir_basename = os.path.basename(self.onos_cord_dir.replace('-', '').replace('_', ''))
-            xos_onos_name = '{}_{}_1'.format(cord_conf_dir_basename, image)
-            if not yaml_config['services'][image].has_key('volumes'):
-                yaml_config['services'][image]['volumes'] = []
-            volumes = yaml_config['services'][image]['volumes']
-            config_volumes = filter(lambda e: e.find(self.onos_config_dir_guest) >= 0, volumes)
-            if not config_volumes:
-                config_volume = '{}:{}'.format(self.onos_config_dir, self.onos_config_dir_guest)
-                volumes.append(config_volume)
-                if self.start_wrapper:
-                    docker_yaml_changed = '{}-changed'.format(self.docker_yaml)
-                    with open(docker_yaml_changed, 'w') as wf:
-                        yaml.dump(yaml_config, wf)
-                    os.rename(docker_yaml_changed, self.docker_yaml)
-            self.volumes = volumes
+            self.start_wrapper = instance_active is False and start is True
+            ##update the docker yaml with the config volume
+            with open(self.docker_yaml, 'r') as f:
+                yaml_config = yaml.load(f)
+                image = yaml_config['services'].keys()[0]
+                cord_conf_dir_basename = os.path.basename(self.onos_cord_dir.replace('-', '').replace('_', ''))
+                xos_onos_name = '{}_{}_1'.format(cord_conf_dir_basename, image)
+                if not yaml_config['services'][image].has_key('volumes'):
+                    yaml_config['services'][image]['volumes'] = []
+                volumes = yaml_config['services'][image]['volumes']
+                config_volumes = filter(lambda e: e.find(self.onos_config_dir_guest) >= 0, volumes)
+                if not config_volumes:
+                    config_volume = '{}:{}'.format(self.onos_config_dir, self.onos_config_dir_guest)
+                    volumes.append(config_volume)
+                    if self.start_wrapper:
+                        docker_yaml_changed = '{}-changed'.format(self.docker_yaml)
+                        with open(docker_yaml_changed, 'w') as wf:
+                            yaml.dump(yaml_config, wf)
+                        os.rename(docker_yaml_changed, self.docker_yaml)
+                self.volumes = volumes
 
-        ##Create an container instance of xos onos
-        super(OnosCord, self).__init__(xos_onos_name, image, tag = '', quagga_config = Onos.QUAGGA_CONFIG)
-        self.last_cfg = None
-        if self.start_wrapper:
-            #fetch the current config of onos cord instance and save it
-            try:
-                self.last_cfg = OnosCtrl.get_config(controller = onos_ip)
-                json_data = json.dumps(self.last_cfg, indent=4)
-                with open(self.onos_cfg_save_loc, 'w') as f:
-                    f.write(json_data)
-            except:
-                pass
-            #start the container back with the shared onos config volume
-            self.start()
+            ##Create an container instance of xos onos
+            super(OnosCord, self).__init__(xos_onos_name, image, tag = '', quagga_config = Onos.QUAGGA_CONFIG)
+            self.last_cfg = None
+            if self.start_wrapper:
+                #fetch the current config of onos cord instance and save it
+                try:
+                    self.last_cfg = OnosCtrl.get_config(controller = onos_ip)
+                    json_data = json.dumps(self.last_cfg, indent=4)
+                    with open(self.onos_cfg_save_loc, 'w') as f:
+                        f.write(json_data)
+                except:
+                    pass
+                #start the container back with the shared onos config volume
+                self.start()
 
     def cliEnter(self):
         retries = 0
diff --git a/src/test/utils/TestManifest.py b/src/test/utils/TestManifest.py
index 17bc370..c112221 100644
--- a/src/test/utils/TestManifest.py
+++ b/src/test/utils/TestManifest.py
@@ -71,6 +71,7 @@
             self.voltha_enable = args.voltha_enable
             self.voltha_container_mode = args.voltha_container_mode
             self.expose_port = args.expose_port
+            self.skip_onos_restart = args.skip_onos_restart
         else:
             with open(self.manifest, 'r') as fd:
                 data = json.load(fd)
@@ -107,3 +108,4 @@
             self.expose_port = data.get('expose_port', False)
             if self.voltha_enable and self.voltha_container_mode:
                 self.expose_port = True
+            self.skip_onos_restart = data.get('skip_onos_restart', False)
