diff --git a/src/test/apps/cord-config-1.2-SNAPSHOT.oar b/src/test/apps/cord-config-1.2-SNAPSHOT.oar
new file mode 100644
index 0000000..c4993ba
--- /dev/null
+++ b/src/test/apps/cord-config-1.2-SNAPSHOT.oar
Binary files differ
diff --git a/src/test/apps/igmp-1.2-SNAPSHOT.oar b/src/test/apps/igmp-1.2-SNAPSHOT.oar
new file mode 100644
index 0000000..f73fa0a
--- /dev/null
+++ b/src/test/apps/igmp-1.2-SNAPSHOT.oar
Binary files differ
diff --git a/src/test/cordSubscriber/cordSubscriberTest.py b/src/test/cordSubscriber/cordSubscriberTest.py
index 7d72296..cce1fdd 100644
--- a/src/test/cordSubscriber/cordSubscriberTest.py
+++ b/src/test/cordSubscriber/cordSubscriberTest.py
@@ -391,11 +391,11 @@
       def onos_aaa_load(self):
             if self.aaa_loaded:
                   return
-            aaa_dict = {'apps' : { 'org.onosproject.aaa' : { 'AAA' : { 'radiusSecret': 'radius_password',
-                                                                       'radiusIp': '172.17.0.2' } } } }
+            aaa_dict = {'apps' : { 'org.opencord.aaa' : { 'AAA' : { 'radiusSecret': 'radius_password',
+                                                                    'radiusIp': '172.17.0.2' } } } }
             radius_ip = os.getenv('ONOS_AAA_IP') or '172.17.0.2'
-            aaa_dict['apps']['org.onosproject.aaa']['AAA']['radiusIp'] = radius_ip
-            self.onos_load_config('org.onosproject.aaa', aaa_dict)
+            aaa_dict['apps']['org.opencord.aaa']['AAA']['radiusIp'] = radius_ip
+            self.onos_load_config('org.opencord.aaa', aaa_dict)
             self.aaa_loaded = True
 
       def onos_dhcp_table_load(self, config = None):
diff --git a/src/test/netCondition/netConditionTest.py b/src/test/netCondition/netConditionTest.py
index 15156d7..28800e9 100644
--- a/src/test/netCondition/netConditionTest.py
+++ b/src/test/netCondition/netConditionTest.py
@@ -138,10 +138,10 @@
 -----END CERTIFICATE-----'''
 
     def onos_aaa_config(self):
-        aaa_dict = {'apps' : { 'org.onosproject.aaa' : { 'AAA' : { 'radiusSecret': 'radius_password',
-                                                                   'radiusIp': '172.17.0.2' } } } }
+        aaa_dict = {'apps' : { 'org.opencord.aaa' : { 'AAA' : { 'radiusSecret': 'radius_password',
+                                                                'radiusIp': '172.17.0.2' } } } }
         radius_ip = os.getenv('ONOS_AAA_IP') or '172.17.0.2'
-        aaa_dict['apps']['org.onosproject.aaa']['AAA']['radiusIp'] = radius_ip
+        aaa_dict['apps']['org.opencord.aaa']['AAA']['radiusIp'] = radius_ip
         self.onos_ctrl.activate()
         time.sleep(2)
         self.onos_load_tls_config(aaa_dict)
diff --git a/src/test/subscriber/subscriberTest.py b/src/test/subscriber/subscriberTest.py
index c5a792d..a79a3a4 100644
--- a/src/test/subscriber/subscriberTest.py
+++ b/src/test/subscriber/subscriberTest.py
@@ -272,11 +272,11 @@
       def onos_aaa_load(self):
             if self.aaa_loaded:
                   return
-            aaa_dict = {'apps' : { 'org.onosproject.aaa' : { 'AAA' : { 'radiusSecret': 'radius_password',
-                                                                       'radiusIp': '172.17.0.2' } } } }
+            aaa_dict = {'apps' : { 'org.opencord.aaa' : { 'AAA' : { 'radiusSecret': 'radius_password',
+                                                                    'radiusIp': '172.17.0.2' } } } }
             radius_ip = os.getenv('ONOS_AAA_IP') or '172.17.0.2'
-            aaa_dict['apps']['org.onosproject.aaa']['AAA']['radiusIp'] = radius_ip
-            self.onos_load_config('org.onosproject.aaa', aaa_dict)
+            aaa_dict['apps']['org.opencord.aaa']['AAA']['radiusIp'] = radius_ip
+            self.onos_load_config('org.opencord.aaa', aaa_dict)
             self.aaa_loaded = True
 
       def onos_dhcp_table_load(self, config = None):
diff --git a/src/test/utils/Cluster.py b/src/test/utils/Cluster.py
index 21120a4..b55d4e2 100644
--- a/src/test/utils/Cluster.py
+++ b/src/test/utils/Cluster.py
@@ -299,10 +299,10 @@
 
     def onos_aaa_config(self,controller=None):
 	log.info('controller in onos_aaa_config is %s'%controller)
-        aaa_dict = {'apps' : { 'org.onosproject.aaa' : { 'AAA' : { 'radiusSecret': 'radius_password',
-                                                                   'radiusIp': '172.17.0.2' } } } }
+        aaa_dict = {'apps' : { 'org.opencord.aaa' : { 'AAA' : { 'radiusSecret': 'radius_password',
+                                                                'radiusIp': '172.17.0.2' } } } }
         radius_ip = os.getenv('ONOS_AAA_IP') or '172.17.0.2'
-        aaa_dict['apps']['org.onosproject.aaa']['AAA']['radiusIp'] = radius_ip
+        aaa_dict['apps']['org.opencord.aaa']['AAA']['radiusIp'] = radius_ip
         self.onos_ctrl.activate()
         time.sleep(2)
         self.onos_load_config(aaa_dict,controller=controller)
@@ -1805,11 +1805,11 @@
 	    log.info('controller ip in cluster.py onos_aaa_load is %s'%controller)
             if self.aaa_loaded:
                   return
-            aaa_dict = {'apps' : { 'org.onosproject.aaa' : { 'AAA' : { 'radiusSecret': 'radius_password',
-                                                                       'radiusIp': '172.17.0.2' } } } }
+            aaa_dict = {'apps' : { 'org.opencord.aaa' : { 'AAA' : { 'radiusSecret': 'radius_password',
+                                                                    'radiusIp': '172.17.0.2' } } } }
             radius_ip = os.getenv('ONOS_AAA_IP') or '172.17.0.2'
-            aaa_dict['apps']['org.onosproject.aaa']['AAA']['radiusIp'] = radius_ip
-            self.onos_load_config('org.onosproject.aaa', aaa_dict,controller=controller)
+            aaa_dict['apps']['org.opencord.aaa']['AAA']['radiusIp'] = radius_ip
+            self.onos_load_config('org.opencord.aaa', aaa_dict,controller=controller)
             self.aaa_loaded = True
 
       def onos_dhcp_table_load(self, config = None,controller=None):
@@ -2543,4 +2543,3 @@
                 log.info('Getting dhcp client IP %s from server %s for mac %s with lease time %s. That is not 700.' %
                          (cip, sip, mac, lval) )
                 assert_not_equal(lval, 700)
-
diff --git a/src/test/utils/CordContainer.py b/src/test/utils/CordContainer.py
index 10616eb..6339cf0 100644
--- a/src/test/utils/CordContainer.py
+++ b/src/test/utils/CordContainer.py
@@ -542,10 +542,9 @@
     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'),
+    onos_cord_apps = ( ('cord-config', '1.2-SNAPSHOT'),
                        ('aaa', '1.2-SNAPSHOT'),
-                       ('igmp', '1.1-SNAPSHOT'),
-                       #('vtn', '1.1-SNAPSHOT'),
+                       ('igmp', '1.2-SNAPSHOT'),
                        )
     ports = [] #[ 8181, 8101, 9876, 6653, 6633, 2000, 2620, 5005 ]
     setup_dir = os.path.join(os.path.dirname(os.path.realpath(__file__)), '..', 'setup')
