diff --git a/src/test/utils/CordContainer.py b/src/test/utils/CordContainer.py
index 29d1d8c..df9a196 100644
--- a/src/test/utils/CordContainer.py
+++ b/src/test/utils/CordContainer.py
@@ -296,6 +296,7 @@
     onos_config_dir_guest = '/root/onos/config'
     onos_config_dir = os.path.join(onos_cord_dir, 'config')
     docker_yaml = os.path.join(onos_cord_dir, 'docker-compose.yml')
+    onos_cfg_save_loc = os.path.join(onos_cord_dir, 'network-cfg.json.saved')
 
     def __init__(self, onos_ip, conf, boot_delay = 60):
         self.onos_ip = onos_ip
@@ -330,6 +331,11 @@
         self.xos_onos_name = '{}_{}_1'.format(cord_conf_dir_basename, image)
         ##Create an container instance of xos onos
         self.xos_onos = Container(self.xos_onos_name, image, tag = '')
+        #fetch the current config of onos cord instance
+        try:
+            self.last_cfg = OnosCtrl.get_config(controller = onos_ip)
+        except:
+            self.last_cfg = None
 
     def start(self, restart = False, network_cfg = None):
         if restart is True:
@@ -338,6 +344,11 @@
                 print('Killing container %s' %self.name)
                 self.kill()
             if self.xos_onos.exists():
+                if self.last_cfg is not None:
+                    #save the current network config of onos cord instance
+                    json_data = json.dumps(self.last_cfg, indent=4)
+                    with open(self.onos_cfg_save_loc, 'w') as f:
+                        f.write(json_data)
                 print('Killing container %s' %self.xos_onos.name)
                 self.xos_onos.kill()
 
@@ -357,6 +368,45 @@
         build_cmd = 'cd {} && docker-compose build'.format(self.onos_cord_dir)
         os.system(build_cmd)
 
+    @classmethod
+    def restore_onos_cord(cls, onos_cord, onos_ip):
+        #bring down the onos cord wrapper container
+        #if there is no saved config, there is nothing to restore as it was never restarted
+        if not os.access(cls.onos_cfg_save_loc, os.F_OK):
+            return
+        if not onos_cord or not os.access(onos_cord, os.F_OK):
+            return
+
+        print('Stopping the existing ONOS cord wrapper instance at %s' %(cls.onos_cord_dir))
+        cmd = 'cd {} && docker-compose down'.format(cls.onos_cord_dir)
+        try:
+            os.system(cmd)
+        except:pass
+
+        print('Starting the ONOS cord instance at %s' %(onos_cord))
+        #bring back up the onos cord container
+        cmd = 'cd {} && docker-compose up -d'.format(onos_cord)
+        try:
+            os.system(cmd)
+            time.sleep(30)
+        except:
+            pass
+
+        #now restore back the old config
+        print('Restoring back the saved ONOS cord config at %s for ONOS cord instance' %(cls.onos_cfg_save_loc))
+        with open(cls.onos_cfg_save_loc, 'r') as f:
+            config = json.load(f)
+            try:
+                OnosCtrl.config(config, controller = onos_ip)
+                os.unlink(cls.onos_cfg_save_loc)
+            except: pass
+
+        print('Cleaning up the ONOS cord wrapper directory at %s' %(cls.onos_cord_dir))
+        try:
+            os.system('rm -rf {}'.format(cls.onos_cord_dir))
+        except:
+            pass
+
 class OnosCordStopWrapper(Container):
     onos_cord_dir = os.path.join(os.getenv('HOME'), 'cord-tester-cord')
     docker_yaml = os.path.join(onos_cord_dir, 'docker-compose.yml')
diff --git a/src/test/utils/OnosCtrl.py b/src/test/utils/OnosCtrl.py
index 6401a18..bd931a7 100644
--- a/src/test/utils/OnosCtrl.py
+++ b/src/test/utils/OnosCtrl.py
@@ -60,16 +60,24 @@
         if config is not None:
             json_data = json.dumps(config)
 	    if controller is None:
-	        print('default Onos config url is %s'%cls.cfg_url)
                 resp = requests.post(cls.cfg_url, auth = cls.auth, data = json_data)
 	    else:
 		cfg_url = 'http://%s:8181/onos/v1/network/configuration/' %(controller)
-		print('non-default Onos config url is %s'%cfg_url)
 	        resp = requests.post(cfg_url, auth = cls.auth, data = json_data)
             return resp.ok, resp.status_code
         return False, 400
 
     @classmethod
+    def get_config(cls, controller=None):
+	if controller is None:
+            controller = cls.controller
+	cfg_url = 'http://%s:8181/onos/v1/network/configuration/' %(controller)
+	resp = requests.get(cfg_url, auth = cls.auth)
+        if resp.ok:
+            return resp.json()
+        return None
+
+    @classmethod
     def delete(cls, config, controller=None):
         if config:
             json_data = json.dumps(config)
@@ -78,7 +86,6 @@
                 resp = requests.delete(cls.cfg_url, auth = cls.auth, data = json_data)
 	    else:
 		cfg_url = 'http://%s:8181/onos/v1/network/configuration/' %(controller)
-		print('non-default Onos config url is %s'%cfg_url)
 	        resp = requests.delete(cfg_url, auth = cls.auth, data = json_data)
             return resp.ok, resp.status_code
         return False, 400
diff --git a/src/test/utils/TestManifest.py b/src/test/utils/TestManifest.py
index fdd35ee..792926a 100644
--- a/src/test/utils/TestManifest.py
+++ b/src/test/utils/TestManifest.py
@@ -35,15 +35,26 @@
             self.start_switch = args.start_switch
             self.image_prefix = args.prefix
             self.onos_image = args.onos
+            self.test_controller = args.test_controller
+            if self.test_controller:
+                ips = self.test_controller.split('/')
+                self.onos_ip = ips[0]
+                if len(ips) > 1:
+                    self.radius_ip = ips[1]
+            self.onos_cord = args.onos_cord if args.onos_cord else None
             self.docker_network = args.network if args.network else None
             self.iterations = None
-            self.server = '{}:{}'.format(CORD_TEST_HOST, CORD_TEST_PORT)
+            self.server = args.server
             self.jvm_heap_size = args.jvm_heap_size if args.jvm_heap_size else None
         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.test_controller = '' if self.onos_ip is None else self.onos_ip
+            if self.onos_ip and self.radius_ip:
+                self.test_controller = '{}/{}'.format(self.onos_ip, self.radius_ip)
+            self.onos_cord = data.get('onos_cord', 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)
