diff --git a/xos/models.py b/xos/models.py
deleted file mode 100644
index 3f2b522..0000000
--- a/xos/models.py
+++ /dev/null
@@ -1,96 +0,0 @@
-# Copyright 2017-present Open Networking Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-from core.models.plcorebase import *
-from models_decl import VHSSService_decl
-from models_decl import VHSSVendor_decl
-from models_decl import VHSSTenant_decl
-
-from django.db import models
-from core.models import Service, PlCoreBase, Slice, Instance, Tenant, TenantWithContainer, Node, Image, User, Flavor, NetworkParameter, NetworkParameterType, Port, AddressPool
-from core.models.plcorebase import StrippedCharField
-import os
-from django.db import models, transaction
-from django.forms.models import model_to_dict
-from django.db.models import *
-from operator import itemgetter, attrgetter, methodcaller
-from core.models import Tag
-from core.models.service import LeastLoadedNodeScheduler
-import traceback
-from xos.exceptions import *
-from xos.config import Config
-
-class VHSSService(VHSSService_decl):
-   class Meta:
-        proxy = True 
-
-   def create_tenant(self, **kwargs):
-       t = VHSSTenant(kind="vEPC", provider_service=self, connect_method="na", **kwargs)
-       t.save()
-       return t
-
-class VHSSVendor(VHSSVendor_decl):
-   class Meta:
-       proxy = True
-
-class VHSSTenant(VHSSTenant_decl):
-   class Meta:
-        proxy = True 
-
-   def __init__(self, *args, **kwargs):
-       vhssservice = VHSSService.get_service_objects().all()
-       if vhssservice:
-           self._meta.get_field(
-                   "provider_service").default = vhssservice[0].id
-       super(VHSSTenant, self).__init__(*args, **kwargs)
-
-   @property
-   def image(self):
-       if not self.vhss_vendor:
-           return super(VHSSTenant, self).image
-       return self.vhss_vendor.image
-   
-   def save_instance(self, instance):
-       if self.vhss_vendor:
-           instance.flavor = self.vhss_vendor.flavor
-       super(VHSSTenant, self).save_instance(instance)
-
-   def save(self, *args, **kwargs):
-       if not self.creator:
-           if not getattr(self, "caller", None):
-               raise XOSProgrammingError("VHSSTenant's self.caller was not set")
-           self.creator = self.caller
-           if not self.creator:
-               raise XOSProgrammingError("VHSSTenant's self.creator was not set")
-
-       super(VHSSTenant, self).save(*args, **kwargs)
-       # This call needs to happen so that an instance is created for this
-       # tenant is created in the slice. One instance is created per tenant.
-       model_policy_vhsstenant(self.pk)
-
-   def delete(self, *args, **kwargs):
-       # Delete the instance that was created for this tenant
-       self.cleanup_container()
-       super(VHSSTenant, self).delete(*args, **kwargs)
-
-def model_policy_vhsstenant(pk):
-    # This section of code is atomic to prevent race conditions
-    with transaction.atomic():
-        # We find all of the tenants that are waiting to update
-        tenant = VHSSTenant.objects.select_for_update().filter(pk=pk)
-        if not tenant:
-            return
-        # Since this code is atomic it is safe to always use the first tenant
-        tenant = tenant[0]
-        tenant.manage_container()
diff --git a/xos/synchronizer/model_policies/model_policy_vhsstenant.py b/xos/synchronizer/model_policies/model_policy_vhsstenant.py
new file mode 100644
index 0000000..5520f58
--- /dev/null
+++ b/xos/synchronizer/model_policies/model_policy_vhsstenant.py
@@ -0,0 +1,148 @@
+
+# Copyright 2017-present Open Networking Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+from synchronizers.new_base.modelaccessor import *
+from synchronizers.new_base.model_policies.model_policy_tenantwithcontainer import TenantWithContainerPolicy, LeastLoadedNodeScheduler
+from synchronizers.new_base.exceptions import *
+
+class VHSSTenantPolicy(TenantWithContainerPolicy):
+    model_name = "VHSSTenant"
+
+    # Already defined in Super class
+    #def handle_create(self, service_instance):
+    #    return self.handle_update(service_instance)
+
+    def handle_update(self, service_instance):
+        if (service_instance. link_deleted_count >0) and (not service_instance.provided_links.exists()):
+            self.logger.info("The last provided link has been deleted -- self-destructing.")
+            self.handle_delete(service_instance)
+            if VHSSTenant.objects.filter(id=service_instance.id).exists():
+                service_instance.delete()
+            else:
+                self.logger.info("Tenant %s is already deleted" % service_instance)
+            return
+
+        self.manage_container(service_instance)
+
+    def handle_delete(self, service_instance):
+        if service_instance.instance and (not service_instance.instance.deleted):
+            all_service_instances_this_instance = VHSSTenant.objects.filter(instance_id=service_instance.instance.id)
+            other_service_instances_this_instance = [x for x in all_service_instances_this_instance if x.id != service_instance.id]
+            if (not other_service_instances_this_instance):
+                self.logger.info("VHSSTenant Instance %s is now unused -- deleting" % service_instance.instance)
+                self.delete_instance(service_instance, service_instance.instance)
+            else:
+                self.logger.info("VHSSTenant Instance %s has %d other service instances attached" %
+                (service_instance.instance, len(other_service_instances_this_instance)))
+
+    def get_service(self, service_instance):
+        service_name = service_instance.owner.leaf_model_name
+        service_class = globals()[service_name]
+        return service_class.objects.get(id=service_instance.owner.id)
+
+    def find_instance_for_instance_tag(self, instance_tag):
+        tags = Tag.objects.filter(name="instance_tag", value=instance_tag)
+        if tags:
+            return tags[0].content_object
+        return None
+
+    def find_or_make_instance_for_instance_tag(self, service_instance):
+        instance_tag = self.get_instance_tag(service_instance)
+        instance = self.find_instance_for_instance_tag(instance_tag)
+        if instance:
+            if instance.no_sync:
+                # if no_sync is still set, then perhaps we failed while saving it and need to retry.
+                self.save_instance(service_instance, instance)
+            return instance
+
+        desired_image = self.get_image(service_instance)
+        desired_flavor = self.get_flavor(service_instance)
+
+        slice = service_instance.owner.slices.first()
+
+        (node, parent) = LeastLoadedNodeScheduler(slice, label=None).pick()
+
+        assert (slice is not None)
+        assert (node is not None)
+        assert (desired_image is not None)
+        assert (service_instance.creator is not None)
+        assert (node.site_deployment.deployment is not None)
+        assert (desired_image is not None)
+
+        instance = Instance(slice=slice,
+                            node=node,
+                            image=desired_image,
+                            creator=service_instance.creator,
+                            deployment=node.site_deployment.deployment,
+                            flavor=desired_flavor,
+                            isolation=slice.default_isolation,
+                            parent=parent)
+
+        self.save_instance(service_instance, instance)
+
+        return instance
+
+    def manage_container(self, service_instance):
+        if service_instance.deleted:
+            return
+
+        if service_instance.instance:
+            # We're good.
+            return
+
+        instance = self.find_or_make_instance_for_instance_tag(service_instance)
+        service_instance.instance = instance
+        # TODO: possible for partial failure here?
+        service_instance.save()
+
+    def delete_instance(self, service_instance, instance):
+        # delete the `instance_tag` tags
+        tags = Tag.objects.filter(service_id=service_instance.owner.id, content_type=instance.self_content_type_id,
+                                  object_id=instance.id, name="instance_tag")
+        for tag in tags:
+            tag.delete()
+
+        instance.delete()
+
+    def save_instance(self, service_instance, instance):
+        instance.no_sync = True  # prevent instance from being synced until we're done with it
+        super(VHSSTenantPolicy, self).save_instance(instance)
+
+        try:
+            if instance.isolation in ["container", "container_vm"]:
+                raise Exception("Not supported")
+
+            instance_tag = self.get_instance_tag(service_instance)
+            if instance_tag:
+                tags = Tag.objects.filter(name="instance_tag", value=instance_tag)
+                if not tags:
+                    tag = Tag(service=service_instance.owner, content_type=instance.self_content_type_id,
+                              object_id=instance.id, name="instance_tag", value=str(instance_tag))
+                    tag.save()
+
+            instance.no_sync = False  # allow the synchronizer to run now
+            super(VHSSTenantPolicy, self).save_instance(instance)
+        except:
+            # need to clean up any failures here
+            raise
+
+    def get_instance_tag(self, service_instance):
+        return '%d' % service_instance.id
+
+    def get_image(self, service_instance):
+        return service_instance.vhss_vendor.image
+
+    def get_flavor(self, service_vendor):
+        return service_vendor.vhss_vendor.flavor
diff --git a/xos/synchronizer/run-from-api.sh b/xos/synchronizer/run-from-api.sh
index de2c7fa..ed1147f 100755
--- a/xos/synchronizer/run-from-api.sh
+++ b/xos/synchronizer/run-from-api.sh
@@ -12,5 +12,5 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-export XOS_DIR=/opt/xos
-python vhss-synchronizer.py  -C $XOS_DIR/synchronizers/vhss/vhss_from_api_config
+
+python vhss-synchronizer.py
\ No newline at end of file
diff --git a/xos/synchronizer/steps/sync_vhsstenant.py b/xos/synchronizer/steps/sync_vhsstenant.py
index d6bdd49..01433de 100644
--- a/xos/synchronizer/steps/sync_vhsstenant.py
+++ b/xos/synchronizer/steps/sync_vhsstenant.py
@@ -15,13 +15,14 @@
 import os
 import sys
 from django.db.models import Q, F
-from synchronizers.new_base.SyncInstanceUsingAnsible import SyncInstanceUsingAnsible
 from synchronizers.new_base.modelaccessor import *
+from synchronizers.new_base.SyncInstanceUsingAnsible import SyncInstanceUsingAnsible
 
 parentdir = os.path.join(os.path.dirname(__file__), "..")
 sys.path.insert(0, parentdir)
 
 class SyncVHSSTenant(SyncInstanceUsingAnsible):
+
     provides = [VHSSTenant]
 
     observes = VHSSTenant
@@ -32,18 +33,7 @@
 
     service_key_name = "/opt/xos/configurations/mcord/mcord_private_key"
 
-    #Gets the attributes that are used by the Ansible template but are not
-    #part of the set of default attributes.
-
     def __init__(self, *args, **kwargs):
         super(SyncVHSSTenant, self).__init__(*args, **kwargs)
 
-    def fetch_pending(self, deleted):
-        if (not deleted):
-            objs = VHSSTenant.get_tenant_objects().filter(
-                Q(enacted__lt=F('updated')) | Q(enacted=None), Q(lazy_blocked=False))
-        else:
-            objs = VHSSTenant.get_deleted_tenant_objects()
-
-        return objs
 
diff --git a/xos/synchronizer/steps/vhsstenant_playbook.yaml b/xos/synchronizer/steps/vhsstenant_playbook.yaml
index 83c8bbd..e0a34b2 100644
--- a/xos/synchronizer/steps/vhsstenant_playbook.yaml
+++ b/xos/synchronizer/steps/vhsstenant_playbook.yaml
@@ -15,7 +15,7 @@
 ---
 # vhsstenant_playbook
 
-- hosts: "{{ instance_name }}"
+- hosts: {{ instance_name }}
   gather_facts: False
   connection: ssh
   user: ubuntu
diff --git a/xos/synchronizer/vhss-synchronizer.py b/xos/synchronizer/vhss-synchronizer.py
index bae8953..2d1bb00 100755
--- a/xos/synchronizer/vhss-synchronizer.py
+++ b/xos/synchronizer/vhss-synchronizer.py
@@ -14,15 +14,18 @@
 
 #!/usr/bin/env python
 
-# Runs the standard XOS synchronizer
+# This imports and runs ../../xos-observer.py
 
 import importlib
 import os
 import sys
 
-synchronizer_path = os.path.join(os.path.dirname(
-    os.path.realpath(__file__)), "../../synchronizers/new_base")
-sys.path.append(synchronizer_path)
+from xosconfig import Config
+config_file = os.path.abspath(os.path.dirname(os.path.realpath(__file__)) + '/vhss_config.yaml')
+
+Config.init(config_file, 'synchronizer-config-schema.yaml')
+observer_path = os.path.join(os.path.dirname(os.path.realpath(__file__)), "../../synchronizers/new_base")
+
+sys.path.append(observer_path)
 mod = importlib.import_module("xos-synchronizer")
 mod.main()
-
diff --git a/xos/synchronizer/vhss_config.yaml b/xos/synchronizer/vhss_config.yaml
new file mode 100644
index 0000000..0123b0d
--- /dev/null
+++ b/xos/synchronizer/vhss_config.yaml
@@ -0,0 +1,23 @@
+# Copyright 2017-present Open Networking Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
+name: vhss-synchronizer
+accessor:
+  username: xosadmin@opencord.org
+  password: "@/opt/xos/services/vhss/credentials/xosadmin@opencord.org"
+dependency_graph: "/opt/xos/synchronizers/vhss/model-deps"
+steps_dir: "/opt/xos/synchronizers/vhss/steps"
+sys_dir: "/opt/xos/synchronizers/vhss/sys"
+model_policies_dir: "/opt/xos/synchronizers/vhss/model_policies"
diff --git a/xos/tosca/resources/vhsstenant.py b/xos/tosca/resources/vhsstenant.py
index 074c423..2d572c0 100644
--- a/xos/tosca/resources/vhsstenant.py
+++ b/xos/tosca/resources/vhsstenant.py
@@ -13,29 +13,34 @@
 # limitations under the License.
 
 from xosresource import XOSResource
-from core.models import Tenant, Service
+from core.models import ServiceInstance, Service
 from services.vhss.models import VHSSTenant
 
 class XOSVHSSTenant(XOSResource):
     provides = "tosca.nodes.VHSSTenant"
     xos_model = VHSSTenant
-    name_field = "service_specific_id"
+    name_field = None
     copyin_props = ()
 
     def get_xos_args(self, throw_exception=True):
         args = super(XOSVHSSTenant, self).get_xos_args()
 
-        provider_name = self.get_requirement("tosca.relationships.TenantOfService", throw_exception=True)
+        provider_name = self.get_requirement("tosca.relationships.TenantOfService", throw_exception=throw_exception)
         if provider_name:
-            args["provider_service"] = self.get_xos_object(Service, throw_exception=True, name=provider_name)
+            args["owner"] = self.get_xos_object(Service, throw_exception=throw_exception, name=provider_name)
 
         return args
 
     def get_existing_objs(self):
         args = self.get_xos_args(throw_exception=False)
-        return VHSSTenant.get_tenant_objects().filter(provider_service=args["provider_service"], service_specific_id=args["service_specific_id"])
+        owner = args.get("provider", None)
+        if owner:
+            return [ self.get_xos_object(owner=owner) ]
         return []
 
+    def postprocess(self, obj):
+        pass
+
     def can_delete(self, obj):
         return super(XOSVHSSTenant, self).can_delete(obj)
 
diff --git a/xos/tosca/resources/vhssvendor.py b/xos/tosca/resources/vhssvendor.py
index cc01d06..7ba8024 100644
--- a/xos/tosca/resources/vhssvendor.py
+++ b/xos/tosca/resources/vhssvendor.py
@@ -13,7 +13,7 @@
 # limitations under the License.
 
 from xosresource import XOSResource
-from core.models import Tenant
+from core.models import ServiceInstance
 from services.vhss.models import VHSSVendor
 
 class XOSVHSSVendor(XOSResource):
@@ -27,7 +27,7 @@
 
         tenant_name = self.get_requirement("tosca.relationships.VendorOfTenant", throw_exception=throw_exception)
         if tenant_name:
-            args["provider_tenant"] = self.get_xos_object(Tenant, throw_exception=throw_exception, name=tenant_name)
+            args["provider_tenant"] = self.get_xos_object(ServiceInstance, throw_exception=throw_exception, name=tenant_name)
 
         return args
 
diff --git a/xos/vhss-onboard.yaml b/xos/vhss-onboard.yaml
index e2ecde4..c43f59c 100644
--- a/xos/vhss-onboard.yaml
+++ b/xos/vhss-onboard.yaml
@@ -17,7 +17,7 @@
 description: Onboard the vHSS service
 
 imports:
-   - custom_types/xos.yaml
+  - custom_types/xos.yaml
 
 topology_template:
   node_templates:
@@ -28,10 +28,10 @@
           # The following will concatenate with base_url automatically, if
           # base_url is non-null.
           xproto: ./
+          tosca_custom_types: tosca/custom_types/vhss.yaml
           synchronizer: synchronizer/manifest
           synchronizer_run: vhss-synchronizer.py
-          tosca_custom_types: tosca/custom_types/vhss.yaml
-          tosca_resource: tosca/resources/vhssservice.py, tosca/resources/vhsstenant.py, tosca/resources/vhssvendor.py
+          tosca_resource: tosca/resources/vhsstenant.py, tosca/resources/vhssservice.py, tosca/resources/vhssvendor.py
           private_key: file:///opt/xos/key_import/mcord_rsa
           public_key: file:///opt/xos/key_import/mcord_rsa.pub
 
diff --git a/xos/vhss.xproto b/xos/vhss.xproto
index c68dbf1..49afe59 100644
--- a/xos/vhss.xproto
+++ b/xos/vhss.xproto
@@ -1,16 +1,12 @@
 option name = "vHSS";
-option verbose_name = "Virtual Home Subscriber Server";
 option app_label = "vhss";
 option kind = "vEPC";
-option legacy = "True";
 
 message VHSSService (Service){
-    option name = "VHSSService";
     option verbose_name = "Virtual Home Subscriber Server Service";
 }
 
-message VHSSVendor (PlCoreBase){
-    option name = "VHSSVendor";
+message VHSSVendor (XOSBase){
     option verbose_name = "Virtual Home Subscriber Server Vendor";
     required string name = 1 [help_text = "vendor name", max_length = 32, null = False, db_index = False, blank = False]; 
     required manytoone image->Image:+ = 2 [help_text = "select image for this vendor", db_index = True, null = False, blank = False];
@@ -18,7 +14,6 @@
 }
 
 message VHSSTenant (TenantWithContainer){
-    option name = "VHSSTenant";
     option verbose_name = "Virtual Home Subscriber Server Tenant";
     optional manytoone vhss_vendor->VHSSVendor:vendor_tenants = 1 [help_text = "select vendor of choice, leave blank for slice default", db_index = True, null = True, blank = True];
 }
