diff --git a/src/test/setup/cord-test.py b/src/test/setup/cord-test.py
index 5992eba..acb1fd3 100755
--- a/src/test/setup/cord-test.py
+++ b/src/test/setup/cord-test.py
@@ -48,7 +48,9 @@
     basename = 'cord-tester'
     switch_on_olt = False
     IMAGE = 'cord-test/nose'
-    ALL_TESTS = ('tls', 'dhcp', 'dhcprelay','igmp', 'subscriber', 'cordSubscriber', 'vrouter', 'flows', 'proxyarp', 'acl')
+    ALL_TESTS = ('tls', 'dhcp', 'dhcprelay','igmp', 'subscriber',
+    'cordSubscriber', 'vrouter', 'flows', 'proxyarp', 'acl', 'xos', 'fabric',
+    'cbench', 'cluster')
 
     def __init__(self, tests, instance = 0, num_instances = 1, ctlr_ip = None,
                  name = '', image = IMAGE, prefix = '', tag = 'candidate',
@@ -713,7 +715,6 @@
             Container.dckr.kill(onos)
             Container.dckr.remove_container(onos, force=True)
         Onos.cleanup_runtime()
-
     return 0
 
 def listTests(args):
@@ -842,6 +843,62 @@
 
     return 0
 
+def xosContainers(args):
+    update_map = {  'xos-base' : False, 'xos-synchronizer-openstack' : False, 'openvpn' : False, 'postgresql' :False,
+                    'xos' : False, 'syndicate-ms': False, 'xos-synchronizer-vtr' : False, 'xos-synchronizer-vsg' : False,
+                    'xos-synchronizer-onos' : False, 'xos-synchronizer-fabric' : False, 'xos-synchronizer-vtn' : False,
+                    'xos-synchronizer-onboarding' : False, }
+
+    if args.xosAllContainers == True or args.xosBase == True:
+        #Start xos base container. Builds container if required
+        xosBase = Xos_base(prefix = Container.IMAGE_PREFIX, update = update_map['xos-base'])
+
+    if args.xosAllContainers == True or args.xosSynOpenstack == True:
+        #Start xos base container. Builds container if required
+        xosSynOpenstack = Xos_sync_openstack(prefix = Container.IMAGE_PREFIX, update = update_map['xos-synchronizer-openstack'])
+    if args.xosAllContainers == True or args.xosOpenvpn == True:
+        #Start xos base container. Builds container if required
+        xosOpenvpn = Xos_openvpn(prefix = Container.IMAGE_PREFIX, update = update_map['openvpn'])
+
+    if args.xosAllContainers == True or args.xosPostgresql == True:
+        #Start xos postgresql container. Builds container if required
+        xosPostgresql = Xos_postgresql(prefix = Container.IMAGE_PREFIX, update = update_map['postgresql'])
+
+    if args.xosAllContainers == True or args.xosSynchronizer == True:
+        #Start xos synchronizer container. Builds container if required
+        xosSynchronizer = Xos_synchronizer(prefix = Container.IMAGE_PREFIX, update = update_map['xos'])
+
+    if args.xosAllContainers == True or args.xosSyndicateMs == True:
+        #Start xos syndicateMs container. Builds container if required
+        xosSyndicateMs = Xos_syndicate_ss(prefix = Container.IMAGE_PREFIX, update = update_map['syndicate-ms'])
+
+    if args.xosAllContainers == True or args.xosSynVtr == True:
+        #Start xos synchronizer vtr container. Builds container if required
+        xosSynVtr = Xos_syn_vtr(prefix = Container.IMAGE_PREFIX, update = update_map['xos-synchronizer-vtr'])
+
+    if args.xosAllContainers == True or args.xosSynVsg == True:
+        #Start xos synchronizer vsg container. Builds container if required
+        xosSynVsg = Xos_syn_vsg(prefix = Container.IMAGE_PREFIX, update = update_map['xos-synchronizer-vsg'])
+
+    if args.xosAllContainers == True or args.xosSynOnos == True:
+        #Start xos synchronizer Onos container. Builds container if required
+        xosSynOnos = Xos_syn_onos(prefix = Container.IMAGE_PREFIX, update = update_map['xos-synchronizer-onos'])
+
+    if args.xosAllContainers == True or args.xosSynFabric == True:
+        #Start xos synchronizer fabric container. Builds container if required
+        xosSynFabric = Xos_syn_fabric(prefix = Container.IMAGE_PREFIX, update = update_map['xos-synchronizer-fabric'])
+
+    if args.xosAllContainers == True or args.xosSynVtn == True:
+        #Start xos synchronizer vtn container. Builds container if required
+        xosSynVtn = Xos_syn_vtn(prefix = Container.IMAGE_PREFIX, update = update_map['xos-synchronizer-vtn'])
+
+    if args.xosAllContainers == True or args.xosSynOnboarding == True:
+        #Start xos synchronizer Onboarding container. Builds container if required
+        xosSynOnboarding = Xos_syn_onboarding(prefix = Container.IMAGE_PREFIX, update = update_map['xos-synchronizer-onboarding'])
+
+    print('Done building xos containers')
+    return 0
+
 if __name__ == '__main__':
     parser = ArgumentParser(description='Cord Tester')
     subparser = parser.add_subparsers()
@@ -898,6 +955,22 @@
                             help='Specify number of test onos instances to spawn')
     parser_setup.set_defaults(func=setupCordTester)
 
+    parser_xos = subparser.add_parser('xos', help='Building xos into cord tester environment')
+    parser_xos.add_argument('-x', '--xosAllContainers', action='store_true',help='Provision all containers of XOS for CORD')
+    parser_xos.add_argument('-xb', '--xosBase',action='store_true',help='Provision xos base container')
+    parser_xos.add_argument('-xsos', '--xosSyncOpenstack',action='store_true',help='Provision xos synchronizer openstack container')
+    parser_xos.add_argument('-xo', '--xosOpenvpn',action='store_true',help='Provision xos openvpn container')
+    parser_xos.add_argument('-xp', '--xosPostgresql',action='store_true',help='Provision xos postgresql')
+    parser_xos.add_argument('-xs', '--xosSynchronizer',action='store_true',help='Provision xos synchronizer')
+    parser_xos.add_argument('-xsm', '--xosSyndicateMs',action='store_true',help='Provision xos syndicate-ms')
+    parser_xos.add_argument('-xsvtr', '--xosSyncVtr',action='store_true',help='Provision xos synchronizer vtr container')
+    parser_xos.add_argument('-xsvsg', '--xosSyncVsg',action='store_true',help='Provision xos synchronizer vsg container')
+    parser_xos.add_argument('-xsonos', '--xosSyncOnos',action='store_true',help='Provision xos synchronizer onos container')
+    parser_xos.add_argument('-xsfabric', '--xosSyncFabric',action='store_true',help='Provision xos synchronizer fabric container')
+    parser_xos.add_argument('-xsvtn', '--xosSyncVtn',action='store_true',help='Provision xos synchronizer vtn container')
+    parser_xos.add_argument('-xsonb', '--xosSyncOnboarding',action='store_true',help='Provision xos synchronizer onboarding container')
+    parser_xos.set_defaults(func=xosContainers)
+
     parser_list = subparser.add_parser('list', help='List test cases')
     parser_list.add_argument('-t', '--test', default='all', help='Specify test type to list test cases. '
                              'Eg: -t tls to list tls test cases.'
@@ -906,8 +979,8 @@
     parser_list.set_defaults(func=listTests)
 
     parser_build = subparser.add_parser('build', help='Build cord test container images')
-    parser_build.add_argument('image', choices=['quagga', 'radius', 'test', 'all'])
-    parser_build.add_argument('-p', '--prefix', default='', type=str, help='Provide container image prefix')
+    parser_build.add_argument('image', choices=['quagga', 'radius', 'test','all'])
+    parser_build.add_argument('-p', '--prefix', default='xosproject', type=str, help='Provide container image prefix')
     parser_build.set_defaults(func=buildImages)
 
     parser_metrics = subparser.add_parser('metrics', help='Info of container')
