diff --git a/src/test/cli/onosclidriver.py b/src/test/cli/onosclidriver.py
index cc3d8c0..d9c6011 100644
--- a/src/test/cli/onosclidriver.py
+++ b/src/test/cli/onosclidriver.py
@@ -48,8 +48,11 @@
         self.name = None
         self.home = None
         self.handle = None
-        self.controller = os.getenv('ONOS_CONTROLLER_IP') or 'localhost'
-        self.controller = self.controller.split(',')[0]
+	if controller is not None:
+            self.controller = controller
+	else:
+            self.controller = os.getenv('ONOS_CONTROLLER_IP') or 'localhost'
+            self.controller = self.controller.split(',')[0]
         super( CLI, self ).__init__()
         if connect == True:
             self.connect_cli()
diff --git a/src/test/setup/cord-test.py b/src/test/setup/cord-test.py
index 6fc35a8..6ced05b 100755
--- a/src/test/setup/cord-test.py
+++ b/src/test/setup/cord-test.py
@@ -389,6 +389,7 @@
             radius_ip = None
 
     Container.IMAGE_PREFIX = args.prefix
+    cluster_mode = True if args.onos_instances > 1 else False
     if onos_ip is None:
         image_names = args.onos.rsplit(':', 1)
         onos_cnt['image'] = image_names[0]
@@ -405,6 +406,23 @@
         onos = Onos(image = Onos.IMAGE,
                     tag = Onos.TAG, boot_delay = 60)
         onos_ip = onos.ip()
+    onos_ips = [ onos_ip ]
+    num_onos_instances = args.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)
+            onos = Onos(name = name, image = Onos.IMAGE, tag = Onos.TAG, boot_delay = 60, cluster = cluster_mode)
+            onos_instances.append(onos)
+            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
+        Onos.setup_cluster(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:
@@ -413,10 +431,12 @@
             Onos.install_cord_apps(onos_ip = onos_ip)
         except: pass
 
-    print('Installing cord tester ONOS app %s' %args.app)
-    try:
-        OnosCtrl.install_app(args.app, onos_ip = onos_ip)
-    except: pass
+    if not cluster_mode:
+        print('Installing cord tester ONOS app %s' %args.app)
+        try:
+	    for ip in onos_ips:
+                OnosCtrl.install_app(args.app, onos_ip = onos_ip)
+        except: pass
 
     if radius_ip is None:
         ##Start Radius container
@@ -435,7 +455,7 @@
         maas_api_key = 'UNKNOWN'
 
     ssh_key_file = set_ssh_key_file(args.identity_file)
-    test_cnt_env = { 'ONOS_CONTROLLER_IP' : onos_ip,
+    test_cnt_env = { 'ONOS_CONTROLLER_IP' : ctlr_addr,
                      'ONOS_AAA_IP' : radius_ip if radius_ip is not None else '',
                      'QUAGGA_IP': test_host,
                      'CORD_TEST_HOST' : test_host,
@@ -472,7 +492,7 @@
     for container in range(num_test_containers):
         test_cnt = CordTester(tests_parallel[test_slice_start:test_slice_end],
                               instance = container, num_instances = num_test_containers,
-                              ctlr_ip = onos_ip,
+                              ctlr_ip = ctlr_addr,
                               name = args.container,
                               image = nose_cnt['image'],
                               prefix = Container.IMAGE_PREFIX,
@@ -494,10 +514,13 @@
 
     status = 0
     if len(test_containers) > 1:
-        thread_pool = ThreadPool(len(test_containers), queue_size = 1, wait_timeout=1)
-        for test_cnt in test_containers:
-            thread_pool.addTask(test_cnt.run_tests)
-        thread_pool.cleanUpThreads()
+	if True:
+	    status = test_containers[0].run_tests()
+	else:
+            thread_pool = ThreadPool(len(test_containers), queue_size = 1, wait_timeout=1)
+            for test_cnt in test_containers:
+                thread_pool.addTask(test_cnt.run_tests)
+                thread_pool.cleanUpThreads()
     else:
         if test_containers:
             status = test_containers[0].run_tests()
@@ -505,7 +528,7 @@
     ##Run the linear tests
     if tests_not_parallel:
         test_cnt = CordTester(tests_not_parallel,
-                              ctlr_ip = onos_ip,
+                              ctlr_ip = ctlr_addr,
                               name = args.container,
                               image = nose_cnt['image'],
                               prefix = Container.IMAGE_PREFIX,
@@ -520,7 +543,7 @@
                 test_cnt.start_switch()
         if test_cnt.create and test_cnt.olt:
             test_cnt.setup_intfs(port_num = port_num)
-        status = test_cnt.run_tests()
+        test_cnt.run_tests()
 
     if test_server:
         cord_test_server_stop(test_server)
@@ -910,6 +933,8 @@
     parser_run.add_argument('-d', '--no-switch', action='store_true', help='Dont start test switch.')
     parser_run.add_argument('-i', '--identity-file', default=identity_file_default,
                             type=str, help='ssh identity file to access compute nodes from test container')
+    parser_run.add_argument('-j', '--onos-instances', default=1, type=int,
+                            help='Specify number to test onos instances to form cluster')
     parser_run.set_defaults(func=runTest)
 
 
diff --git a/src/test/utils/OnosFlowCtrl.py b/src/test/utils/OnosFlowCtrl.py
index aa5437e..844bc3c 100644
--- a/src/test/utils/OnosFlowCtrl.py
+++ b/src/test/utils/OnosFlowCtrl.py
@@ -53,7 +53,8 @@
 		  ipv6_target="",
 		  ipv6_sll="",
 		  ipv6_tll="",
-		  ipv6_extension=""):
+		  ipv6_extension="",
+		  controller=None):
         self.deviceId = deviceId
         self.appId = appId
         self.ingressPort = ingressPort
@@ -81,10 +82,13 @@
 	self.ipv6_sll = ipv6_sll
 	self.ipv6_tll = ipv6_tll
 	self.ipv6_extension = ipv6_extension
+	if controller is not None:
+		self.controller=controller
+		self.cfg_url = 'http://%s:8181/onos/v1/flows/' %(self.controller)
 
     @classmethod
-    def get_flows(cls, device_id):
-        return OnosCtrl.get_flows(device_id)
+    def get_flows(cls, device_id,controller=None):
+        return OnosCtrl.get_flows(device_id,controller=controller)
 
     def addFlow(self):
         """
@@ -257,7 +261,7 @@
         return True
 
     def findFlow(self, deviceId, **criterias):
-        flows = self.get_flows(deviceId)
+        flows = self.get_flows(deviceId,controller=self.controller)
         match_keys = criterias.keys()
         matches = len(match_keys)
         num_matched = 0
