diff --git a/xos/cord/models.py b/xos/cord/models.py
index 59397a0..3dc4a67 100644
--- a/xos/cord/models.py
+++ b/xos/cord/models.py
@@ -73,9 +73,16 @@
                           "cdn_enable": False,
                           "users": [] }
 
+    sync_attributes = ("firewall_enable",
+                       "firewall_rules",
+                       "url_filter_enable",
+                       "url_filter_rules",
+                       "cdn_enable",)
+
     def __init__(self, *args, **kwargs):
         super(CordSubscriberRoot, self).__init__(*args, **kwargs)
         self.cached_volt = None
+        self._initial_url_filter_enable = self.url_filter_enable
 
     @property
     def volt(self):
@@ -210,6 +217,13 @@
     def services(self, value):
         pass
 
+    def save(self, *args, **kwargs):
+        super(CordSubscriberRoot, self).save(*args, **kwargs)
+        if (self.volt) and (self.volt.vcpe): # and (self._initial_url_filter_enabled != self.url_filter_enable):
+            # 1) trigger manage_bbs_account to run
+            # 2) trigger vcpe observer to wake up
+            self.volt.vcpe.save()
+
 # -------------------------------------------
 # VOLT
 # -------------------------------------------
@@ -319,6 +333,25 @@
             vcpe.caller = self.creator
             vcpe.save()
 
+    def manage_subscriber(self):
+        if (self.subscriber_root is None):
+            # The vOLT is not connected to a Subscriber, so either find an
+            # existing subscriber with the same SSID, or autogenerate a new
+            # subscriber.
+            #
+            # TODO: This probably goes away when we rethink the ONOS-to-XOS
+            # vOLT API.
+
+            subs = CordSubscriberRoot.get_tenant_objects().filter(service_specific_id = self.service_specific_id)
+            if subs:
+                sub = subs[0]
+            else:
+                sub = CordSubscriberRoot(service_specific_id = self.service_specific_id,
+                                         name = "autogenerated-for-vOLT-%s" % self.id)
+                sub.save()
+            self.subscriber_root = sub
+            self.save()
+
     def cleanup_vcpe(self):
         if self.vcpe:
             # print "XXX cleanup vcpe", self.vcpe
@@ -335,6 +368,11 @@
     def save(self, *args, **kwargs):
         self.validate_unique_service_specific_id()
 
+        if (self.subscriber_root is not None):
+            subs = self.subscriber_root.get_subscribed_tenants(VOLTTenant)
+            if (subs) and (self not in subs):
+                raise XOSDuplicateKey("Subscriber should only be linked to one vOLT")
+
         if not self.creator:
             if not getattr(self, "caller", None):
                 # caller must be set when creating a vCPE since it creates a slice
@@ -345,6 +383,7 @@
 
         super(VOLTTenant, self).save(*args, **kwargs)
         self.manage_vcpe()
+        self.manage_subscriber()
         self.cleanup_orphans()
 
     def delete(self, *args, **kwargs):
@@ -499,6 +538,14 @@
 
     # *** to be moved to CordSubscriberRoot
 
+    # TODO:
+    #    1) delete the stuff in this section
+    #    2) remove the associated fields from sync_attributes and default_attributes
+    #    3) in core/xoslib/methods/cordsubscriber.py, rename CordSubscriberNew to CordSubscriber
+    #    4) in observers/vcpe/steps/sync_vcpetenant, remove the stuff marked 'legacy'
+    #    5) update manage_bbs_account
+    #    6) come up with a way to auto-create Subscriber from vOLT, for backward compatibility
+
     @property
     def firewall_enable(self):
         return self.get_attribute("firewall_enable", self.default_attributes["firewall_enable"])
@@ -796,10 +843,7 @@
             if not self.bbs_account:
                 # make sure we use the proxied VCPEService object, not the generic Service object
                 vcpe_service = VCPEService.objects.get(id=self.provider_service.id)
-                if self.service_specific_id=="SYNCME":
-                    self.bbs_account = "bbs01@onlab.us"
-                else:
-                    self.bbs_account = vcpe_service.allocate_bbs_account()
+                self.bbs_account = vcpe_service.allocate_bbs_account()
                 super(VCPETenant, self).save()
         else:
             if self.bbs_account:
