diff --git a/xos/configurations/frontend/Makefile b/xos/configurations/frontend/Makefile
index f372662..ee2739c 100644
--- a/xos/configurations/frontend/Makefile
+++ b/xos/configurations/frontend/Makefile
@@ -36,7 +36,7 @@
 mock-cord-pod:
 	echo "make sure to add '../vtn/files/xos_vtn_config:/opt/xos/xos_configuration/xos_vtn_config:ro' to volumes section of docker-compose.yml"
 	sudo docker-compose run xos python /opt/xos/tosca/run.py padmin@vicci.org /opt/xos/configurations/common/fixtures.yaml
-	sudo docker-compose run xos python /opt/xos/tosca/run.py padmin@vicci.org /opt/xos/configurations/cord-pod/mgmt-net.yaml"
-	sudo docker-compose run xos bash -c "echo somekey > /opt/xos/synchronizers/vcpe/vcpe_public_key; python /opt/xos/tosca/run.py padmin@vicci.org /opt/xos/configurations/cord-pod/cord-vtn-vsg.yaml
+	sudo docker-compose run xos python /opt/xos/tosca/run.py padmin@vicci.org /opt/xos/configurations/cord-pod/mgmt-net.yaml
+	sudo docker-compose run xos bash -c "echo somekey > /opt/xos/synchronizers/vcpe/vcpe_public_key; python /opt/xos/tosca/run.py padmin@vicci.org /opt/xos/configurations/cord-pod/cord-vtn-vsg.yaml"
 	sudo docker exec frontend_xos_1 cp /opt/xos/configurations/cord/xos_cord_config /opt/xos/xos_configuration/
 	sudo docker exec frontend_xos_1 touch /opt/xos/xos/settings.py
diff --git a/xos/services/cord/models.py b/xos/services/cord/models.py
index bca422c..6e7a917 100644
--- a/xos/services/cord/models.py
+++ b/xos/services/cord/models.py
@@ -877,8 +877,8 @@
 
     def delete(self, *args, **kwargs):
         self.cleanup_vbng()
+        self.cleanup_vrouter()
         self.cleanup_container()
-        self.cleanup_wan_container_ip()
         super(VSGTenant, self).delete(*args, **kwargs)
 
 def model_policy_vcpe(pk):
diff --git a/xos/services/vrouter/admin.py b/xos/services/vrouter/admin.py
index 046b897..0731fe6 100644
--- a/xos/services/vrouter/admin.py
+++ b/xos/services/vrouter/admin.py
@@ -10,6 +10,7 @@
 from django.utils import timezone
 from django.contrib.contenttypes import generic
 from suit.widgets import LinkedSelect
+from core.models import AddressPool
 from core.admin import ServiceAppAdmin,SliceInline,ServiceAttrAsTabInline, ReadOnlyAwareAdmin, XOSTabularInline, ServicePrivilegeInline, TenantRootTenantInline, TenantRootPrivilegeInline
 from core.middleware import get_request
 
@@ -63,7 +64,7 @@
     public_mac = forms.CharField(required=True)
     gateway_ip = forms.CharField(required=False)
     gateway_mac = forms.CharField(required=False)
-    address_pool_name = forms.CharField(required=True)
+    address_pool = forms.ModelChoiceField(queryset=AddressPool.objects.all(),required=False)
 
     def __init__(self,*args,**kwargs):
         super (VRouterTenantForm,self ).__init__(*args,**kwargs)
@@ -71,7 +72,7 @@
         self.fields['provider_service'].queryset = VRouterService.get_service_objects().all()
         if self.instance:
             # fields for the attributes
-            self.fields['address_pool_name'].initial = self.instance.address_pool_name
+            self.fields['address_pool'].initial = self.instance.address_pool
             self.fields['public_ip'].initial = self.instance.public_ip
             self.fields['public_mac'].initial = self.instance.public_mac
             self.fields['gateway_ip'].initial = self.instance.gateway_ip
@@ -85,7 +86,7 @@
     def save(self, commit=True):
         self.instance.public_ip = self.cleaned_data.get("public_ip")
         self.instance.public_mac = self.cleaned_data.get("public_mac")
-        self.instance.address_pool_name = self.cleaned_data.get("address_pool_name")
+        self.instance.address_pool = self.cleaned_data.get("address_pool")
         return super(VRouterTenantForm, self).save(commit=commit)
 
     class Meta:
@@ -95,7 +96,7 @@
     list_display = ('backend_status_icon', 'id', 'subscriber_tenant' )
     list_display_links = ('backend_status_icon', 'id')
     fieldsets = [ (None, {'fields': ['backend_status_text', 'kind', 'provider_service', 'subscriber_tenant', 'service_specific_id', # 'service_specific_attribute',
-                                     'address_pool_name', 'public_ip', 'public_mac', 'gateway_ip', 'gateway_mac'],
+                                     'address_pool', 'public_ip', 'public_mac', 'gateway_ip', 'gateway_mac'],
                           'classes':['suit-tab suit-tab-general']})]
     readonly_fields = ('backend_status_text', 'service_specific_attribute', 'gateway_ip', 'gateway_mac')
     form = VRouterTenantForm
diff --git a/xos/services/vrouter/models.py b/xos/services/vrouter/models.py
index ab9c90e..ec65a91 100644
--- a/xos/services/vrouter/models.py
+++ b/xos/services/vrouter/models.py
@@ -23,7 +23,7 @@
     KIND = VROUTER_KIND
 
     class Meta:
-        app_label = "cord"
+        app_label = "vrouter"
         verbose_name = "vRouter Service"
         proxy = True
 
@@ -58,7 +58,7 @@
         t = VRouterTenant(**kwargs)
         t.public_ip = ip
         t.public_mac = self.ip_to_mac(ip)
-        t.address_pool_name = ap.name
+        t.address_pool_id = ap.id
         t.save()
 
         return t
@@ -73,14 +73,51 @@
 
     simple_attributes = ( ("public_ip", None),
                           ("public_mac", None),
-                          ("address_pool_name", None),
+                          ("address_pool_id", None),
                           )
 
     @property
     def gateway_ip(self):
+        if not self.address_pool:
+            return None
         return self.address_pool.gateway_ip
 
     @property
     def gateway_mac(self):
+        if not self.address_pool:
+            return None
         return self.address_pool.gateway_mac
 
+    @property
+    def address_pool(self):
+        if getattr(self, "cached_address_pool", None):
+            return self.cached_address_pool
+        if not self.address_pool_id:
+            return None
+        aps=AddressPool.objects.filter(id=self.address_pool_id)
+        if not aps:
+            return None
+        ap=aps[0]
+        self.cached_address_pool = ap
+        return ap
+
+    @address_pool.setter
+    def address_pool(self, value):
+        if value:
+            value = value.id
+        if (value != self.get_attribute("address_pool_id", None)):
+            self.cached_address_pool=None
+        self.set_attribute("address_pool_id", value)
+
+    def cleanup_addresspool(self):
+        if self.address_pool_id:
+            ap = AddressPool.objects.filter(id=self.address_pool_id)
+            if ap:
+                ap[0].put_address(addr)
+
+    def delete(self, *args, **kwargs):
+        self.cleanup_addresspool()
+        super(VRouterTenant, self).delete(*args, **kwargs)
+
+VRouterTenant.setup_simple_attributes()
+
