diff --git a/src/test/setup/cord-test.py b/src/test/setup/cord-test.py
index b0b2f2f..369de0a 100755
--- a/src/test/setup/cord-test.py
+++ b/src/test/setup/cord-test.py
@@ -409,6 +409,7 @@
 
     Container.IMAGE_PREFIX = test_manifest.image_prefix
     Onos.MAX_INSTANCES = test_manifest.onos_instances
+    Onos.JVM_HEAP_SIZE = test_manifest.jvm_heap_size
     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 ]
@@ -671,6 +672,7 @@
     Onos.PREFIX = test_manifest.image_prefix
     Onos.TAG = onos_cnt['tag']
     Onos.MAX_INSTANCES = test_manifest.onos_instances
+    Onos.JVM_HEAP_SIZE = test_manifest.jvm_heap_size
     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 ]
@@ -1033,9 +1035,9 @@
                             choices=['DEBUG','TRACE','ERROR','WARN','INFO'],
                             type=str,
                             help='Specify the log level for the test cases')
+    parser_run.add_argument('-jvm-heap-size', '--jvm-heap-size', default='', type=str, help='ONOS JVM heap size')
     parser_run.set_defaults(func=runTest)
 
-
     parser_setup = subparser.add_parser('setup', help='Setup cord tester environment')
     parser_setup.add_argument('-o', '--onos', default=onos_image_default, type=str, help='ONOS container image')
     parser_setup.add_argument('-r', '--server', default=cord_test_server_address, type=str,
@@ -1067,6 +1069,7 @@
     parser_setup.add_argument('-async', '--async-mode', action='store_true',
                               help='Start ONOS cluster instances in async mode')
     parser_setup.add_argument('-f', '--foreground', action='store_true', help='Run in foreground')
+    parser_setup.add_argument('-jvm-heap-size', '--jvm-heap-size', default='', type=str, help='ONOS JVM heap size')
     parser_setup.set_defaults(func=setupCordTester)
 
     parser_xos = subparser.add_parser('xos', help='Building xos into cord tester environment')
diff --git a/src/test/setup/manifest.json b/src/test/setup/manifest.json
index 8ac08e3..862662d 100644
--- a/src/test/setup/manifest.json
+++ b/src/test/setup/manifest.json
@@ -3,5 +3,6 @@
     "olt": true,
     "start_switch": true,
     "onos_image": "onosproject/onos:latest",
-    "log_level" : "INFO"
+    "log_level" : "INFO",
+    "jvm_heap_size" : "1G"
 }
diff --git a/src/test/utils/CordContainer.py b/src/test/utils/CordContainer.py
index 80d8f75..2c57823 100644
--- a/src/test/utils/CordContainer.py
+++ b/src/test/utils/CordContainer.py
@@ -234,9 +234,25 @@
     def restart(self, timeout =10):
         return self.dckr.restart(self.name, timeout)
 
-def get_mem(instances = 1):
+def get_mem(jvm_heap_size = None, instances = 1):
     if instances <= 0:
         instances = 1
+    heap_size = jvm_heap_size
+    heap_size_i = 0
+    #sanitize the heap size config
+    if heap_size is not None:
+        if not heap_size.isdigit():
+            try:
+                heap_size_i = int(heap_size[:-1])
+                suffix = heap_size[-1]
+                if suffix == 'M':
+                    heap_size_i /= 1024 #convert to gigs
+            except:
+                ##invalid suffix length probably. Fall back to default
+                heap_size = None
+        else:
+            heap_size_i = int(heap_size)
+
     with open('/proc/meminfo', 'r') as fd:
         meminfo = fd.readlines()
         mem = 0
@@ -246,7 +262,14 @@
 
         mem = max(mem/1024/1024/2/instances, 1)
         mem = min(mem, 16)
-        return str(mem) + 'G'
+
+    if heap_size_i:
+        #we take the minimum of the provided heap size and max allowed heap size
+        heap_size_i = min(heap_size_i, mem)
+    else:
+        heap_size_i = mem
+
+    return '{}G'.format(heap_size_i)
 
 class OnosCord(Container):
     """Use this when running the cord tester agent on the onos compute node"""
@@ -333,11 +356,13 @@
 class Onos(Container):
     QUAGGA_CONFIG = [ { 'bridge' : 'quagga-br', 'ip': '10.10.0.4', 'mask' : 16 }, ]
     MAX_INSTANCES = 3
+    JVM_HEAP_SIZE = None
     SYSTEM_MEMORY = (get_mem(),) * 2
     INSTANCE_MEMORY = (get_mem(instances=MAX_INSTANCES),) * 2
-    JAVA_OPTS = '-Xms{} -Xmx{} -XX:+UseConcMarkSweepGC -XX:+CMSIncrementalMode'.format(*SYSTEM_MEMORY)#-XX:+PrintGCDetails -XX:+PrintGCTimeStamps'
-    JAVA_OPTS_CLUSTER = '-Xms{} -Xmx{} -XX:+UseConcMarkSweepGC -XX:+CMSIncrementalMode'.format(*INSTANCE_MEMORY)
-    env = { 'ONOS_APPS' : 'drivers,openflow,proxyarp,vrouter', 'JAVA_OPTS' : JAVA_OPTS }
+    JAVA_OPTS_FORMAT = '-Xms{} -Xmx{} -XX:+UseConcMarkSweepGC -XX:+CMSIncrementalMode'
+    JAVA_OPTS_DEFAULT = JAVA_OPTS_FORMAT.format(*SYSTEM_MEMORY) #-XX:+PrintGCDetails -XX:+PrintGCTimeStamps'
+    JAVA_OPTS_CLUSTER_DEFAULT = JAVA_OPTS_FORMAT.format(*INSTANCE_MEMORY)
+    env = { 'ONOS_APPS' : 'drivers,openflow,proxyarp,vrouter', 'JAVA_OPTS' : JAVA_OPTS_DEFAULT }
     onos_cord_apps = ( ('cord-config', '1.1-SNAPSHOT'),
                        ('aaa', '1.1-SNAPSHOT'),
                        ('igmp', '1.1-SNAPSHOT'),
@@ -426,15 +451,10 @@
         super(Onos, self).__init__(name, image, prefix = prefix, tag = tag, quagga_config = quagga_config)
         self.boot_delay = boot_delay
         self.data_map = None
+        instance_memory = (get_mem(jvm_heap_size = Onos.JVM_HEAP_SIZE, instances = Onos.MAX_INSTANCES),) * 2
+        self.env['JAVA_OPTS'] = self.JAVA_OPTS_FORMAT.format(*instance_memory)
         if cluster is True:
             self.ports = []
-            if Onos.MAX_INSTANCES <= 3:
-                java_opts = self.JAVA_OPTS_CLUSTER
-            else:
-                instance_memory = (get_mem(instances=Onos.MAX_INSTANCES),) * 2
-                java_opts = '-Xms{} -Xmx{} -XX:+UseConcMarkSweepGC -XX:+CMSIncrementalMode'.format(*instance_memory)
-
-            self.env['JAVA_OPTS'] = java_opts
             if data_volume is not None:
                 self.data_map = self.get_data_map(data_volume, self.guest_data_dir)
                 self.host_guest_map = self.host_guest_map + self.data_map
diff --git a/src/test/utils/TestManifest.py b/src/test/utils/TestManifest.py
index b56300d..78b01e1 100644
--- a/src/test/utils/TestManifest.py
+++ b/src/test/utils/TestManifest.py
@@ -37,6 +37,7 @@
             self.onos_image = args.onos
             self.iterations = None
             self.server = '{}:{}'.format(CORD_TEST_HOST, CORD_TEST_PORT)
+            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)
@@ -53,3 +54,4 @@
             self.onos_image = data.get('onos_image', 'onosproject/onos:latest')
             self.server = data.get('test_server', '{}:{}'.format(CORD_TEST_HOST, CORD_TEST_PORT))
             self.iterations = data.get('iterations', None)
+            self.jvm_heap_size = data.get('jvm_heap_size', None)
