diff --git a/xos/cord/models.py b/xos/cord/models.py
index 2f412c4..5a81109 100644
--- a/xos/cord/models.py
+++ b/xos/cord/models.py
@@ -2,7 +2,7 @@
 from core.models import Service, PlCoreBase, Slice, Sliver, Tenant, Node, Image, User, Flavor, Subscriber
 from core.models.plcorebase import StrippedCharField
 import os
-from django.db import models
+from django.db import models, transaction
 from django.forms.models import model_to_dict
 from django.db.models import Q
 from operator import itemgetter, attrgetter, methodcaller
@@ -381,14 +381,26 @@
                 raise XOSProgrammingError("VOLTTenant's self.creator was not set")
 
         super(VOLTTenant, self).save(*args, **kwargs)
-        self.manage_vcpe()
-        self.manage_subscriber()
-        self.cleanup_orphans()
+        model_policy_volt(self.pk)
+        #self.manage_vcpe()
+        #self.manage_subscriber()
+        #self.cleanup_orphans()
 
     def delete(self, *args, **kwargs):
         self.cleanup_vcpe()
         super(VOLTTenant, self).delete(*args, **kwargs)
 
+def model_policy_volt(pk):
+    # TODO: this should be made in to a real model_policy
+    with transaction.atomic():
+        volt = VOLTTenant.objects.select_for_update().filter(pk=pk)
+        if not volt:
+            return
+        volt = volt[0]
+        volt.manage_vcpe()
+        volt.manage_subscriber()
+        volt.cleanup_orphans()
+
 # -------------------------------------------
 # VCPE
 # -------------------------------------------
@@ -441,7 +453,7 @@
 
     @property
     def image(self):
-        LOOK_FOR_IMAGES=["ubuntu-vcpe3",        # ONOS demo machine -- preferred vcpe image
+        LOOK_FOR_IMAGES=["ubuntu-vcpe4",        # ONOS demo machine -- preferred vcpe image
                          "Ubuntu 14.04 LTS",    # portal
                          "Ubuntu-14.04-LTS",    # ONOS demo machine
                         ]
@@ -717,16 +729,29 @@
                 raise XOSProgrammingError("VCPETenant's self.creator was not set")
 
         super(VCPETenant, self).save(*args, **kwargs)
-        self.manage_sliver()
-        self.manage_vbng()
-        self.manage_bbs_account()
-        self.cleanup_orphans()
+        model_policy_vcpe(self.pk)
+        #self.manage_sliver()
+        #self.manage_vbng()
+        #self.manage_bbs_account()
+        #self.cleanup_orphans()
 
     def delete(self, *args, **kwargs):
         self.cleanup_vbng()
         self.cleanup_sliver()
         super(VCPETenant, self).delete(*args, **kwargs)
 
+def model_policy_vcpe(pk):
+    # TODO: this should be made in to a real model_policy
+    with transaction.atomic():
+        vcpe = VCPETenant.objects.select_for_update().filter(pk=pk)
+        if not vcpe:
+            return
+        vcpe = vcpe[0]
+        vcpe.manage_sliver()
+        vcpe.manage_vbng()
+        vcpe.manage_bbs_account()
+        vcpe.cleanup_orphans()
+
 #----------------------------------------------------------------------------
 # vBNG
 #----------------------------------------------------------------------------
