diff --git a/xos/synchronizer/model_policies/model_policy_voltserviceinstance.py b/xos/synchronizer/model_policies/model_policy_voltserviceinstance.py
index e807441..0255d74 100644
--- a/xos/synchronizer/model_policies/model_policy_voltserviceinstance.py
+++ b/xos/synchronizer/model_policies/model_policy_voltserviceinstance.py
@@ -48,18 +48,32 @@
             return link.provider_service_instance.leaf_model
         return None
 
-    def create_vsg(self, tenant):
-        vsgServices = VSGService.objects.all()
-        if not vsgServices:
-            raise XOSConfigurationError("No VSG Services available")
+    def create_eastbound_instance(self, si):
 
-        self.logger.info("MODEL_POLICY: VOLTServiceInstance %s creating vsg" % tenant)
+        chain = si.subscribed_links.all()
 
-        cur_vsg = VSGServiceInstance(owner=vsgServices[0])
-        cur_vsg.creator = tenant.creator
-        cur_vsg.save()
-        link = ServiceInstanceLink(provider_service_instance=cur_vsg, subscriber_service_instance=tenant)
-        link.save()
+        # Already has a chain
+        if len(chain) > 0 and not si.is_new:
+            self.logger.debug("MODEL_POLICY: Subscriber %s is already part of a chain" % si.id)
+            return
+
+        # if it does not have a chain,
+        # Find links to the next element in the service chain
+        # and create one
+
+        links = si.owner.subscribed_dependencies.all()
+
+        for link in links:
+            si_class = link.provider_service.get_service_instance_class_name()
+            self.logger.info("MODEL_POLICY: VOLTServiceInstance %s creating %s" % (si, si_class))
+
+            eastbound_si_class = model_accessor.get_model_class(si_class)
+            eastbound_si = eastbound_si_class()
+            eastbound_si.creator = si.creator
+            eastbound_si.owner_id = link.provider_service_id
+            eastbound_si.save()
+            link = ServiceInstanceLink(provider_service_instance=eastbound_si, subscriber_service_instance=si)
+            link.save()
 
     def manage_vsg(self, tenant):
         # Each VOLT object owns exactly one VCPE object
@@ -81,7 +95,7 @@
                 cur_vsg = None
 
         if cur_vsg is None:
-            self.create_vsg(tenant)
+            self.create_eastbound_instance(tenant)
 
     def cleanup_orphans(self, tenant):
         # ensure vOLT only has one vCPE
diff --git a/xos/synchronizer/model_policies/test_model_policy_voltserviceinstance.py b/xos/synchronizer/model_policies/test_model_policy_voltserviceinstance.py
index a8dfaea..b0c867b 100644
--- a/xos/synchronizer/model_policies/test_model_policy_voltserviceinstance.py
+++ b/xos/synchronizer/model_policies/test_model_policy_voltserviceinstance.py
@@ -88,7 +88,7 @@
 
     def test_manage_vsg(self):
         with patch.object(VOLTServiceInstancePolicy, "get_current_vsg") as get_current_vsg, \
-                patch.object(VOLTServiceInstancePolicy, "create_vsg") as create_vsg, \
+                patch.object(VOLTServiceInstancePolicy, "create_eastbound_instance") as create_vsg, \
                 patch.object(VSGService.objects, "get_items") as vsg_items:
 
             vsg_items.return_value = [self.vsg_service]
@@ -114,25 +114,34 @@
         self.assertEqual(vsg, None)
 
     def test_create_vsg(self):
-        with patch.object(VSGService.objects, "get_items") as vsg_items, \
-                patch.object(ServiceInstanceLink, "save", autospec=True) as save_link, \
+        # with patch.object(model_accessor, "get_model_class") as mock_model_accessor, \
+        with patch.object(ServiceInstanceLink, "save", autospec=True) as save_link, \
                 patch.object(VSGServiceInstance, "save", autospec=True) as save_vsg:
 
-            vsg_items.return_value = [self.vsg_service]
-            self.policy.create_vsg(self.tenant)
+            # mock_model_accessor.return_value = VSGServiceInstance
+
+            link = Mock()
+            link.provider_service.get_service_instance_class_name.return_value = "VSGServiceInstance"
+
+            si = Mock()
+            si.creator = 1
+            si.subscribed_links.all.return_value = []
+            si.owner.subscribed_dependencies.all.return_value = [link]
+
+            self.policy.create_eastbound_instance(si)
 
             # Should have created a vsg
 
             self.assertEqual(save_vsg.call_count, 1)
             vsg = save_vsg.call_args[0][0]
-            self.assertEqual(vsg.creator, self.tenant.creator)
+            self.assertEqual(vsg.creator, si.creator)
 
             # Should have created a link from OLT to vsg
 
             self.assertEqual(save_link.call_count, 1)
             link = save_link.call_args[0][0]
             self.assertEqual(link.provider_service_instance, vsg)
-            self.assertEqual(link.subscriber_service_instance, self.tenant)
+            self.assertEqual(link.subscriber_service_instance, si)
 
     def test_handle_delete(self):
         self.policy.handle_delete(self.tenant)
diff --git a/xos/synchronizer/volt_config.yaml b/xos/synchronizer/volt_config.yaml
index 0dc7e6f..12003cb 100644
--- a/xos/synchronizer/volt_config.yaml
+++ b/xos/synchronizer/volt_config.yaml
@@ -21,8 +21,6 @@
 required_models:
   - VOLTService
   - VOLTServiceInstance
-  - VSGService
-  - VSGServiceInstance
   - ServiceInstanceLink
 dependency_graph: "/opt/xos/synchronizers/volt/model-deps"
 model_policies_dir: "/opt/xos/synchronizers/volt/model_policies"
