diff --git a/xos/admin.py b/xos/admin.py
deleted file mode 100644
index ae3c8ad..0000000
--- a/xos/admin.py
+++ /dev/null
@@ -1,128 +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.admin import ReadOnlyAwareAdmin, SliceInline
-from core.middleware import get_request
-from core.models import User
-
-from django import forms
-from django.contrib import admin
-
-from services.vmme.models import *
-
-class VMMEServiceForm(forms.ModelForm):
-
-    class Meta:
-        model = VMMEService
-        fields = '__all__'
-
-    def __init__(self, *args, **kwargs):
-        super(VMMEServiceForm, self).__init__(*args, **kwargs)
-
-    def save(self, commit=True):
-        return super(VMMEServiceForm, self).save(commit=commit)
-
-class VMMEServiceAdmin(ReadOnlyAwareAdmin):
-
-    model = VMMEService
-    verbose_name = "VMME Service"
-    verbose_name_plural = "VMME Services"
-    form = VMMEServiceForm
-    inlines = [SliceInline]
-
-    list_display = ('backend_status_icon', 'name', 'enabled')
-    list_display_links = ('backend_status_icon', 'name')
-
-    fieldsets = [(None, {
-        'fields': ['backend_status_text', 'name', 'enabled', 'versionNumber', 'description',],
-        'classes':['suit-tab suit-tab-general',],
-        })]
-
-    readonly_fields = ('backend_status_text', )
-    user_readonly_fields = ['name', 'enabled', 'versionNumber', 'description',]
-
-    extracontext_registered_admins = True
-
-    suit_form_tabs = (
-        ('general', 'VMME Service Details', ),
-        ('slices', 'Slices',),
-        )
-
-    suit_form_includes = (('mcordadmin.html',
-                           'top',
-                           'administration'),)
-
-    def get_queryset(self, request):
-        return VMMEService.get_service_objects_by_user(request.user)
-
-admin.site.register(VMMEService, VMMEServiceAdmin)
-
-class VMMETenantForm(forms.ModelForm):
-
-    class Meta:
-        model = VMMETenant
-        fields = '__all__'
-
-    creator = forms.ModelChoiceField(queryset=User.objects.all())
-
-    def __init__(self, *args, **kwargs):
-        super(VMMETenantForm, self).__init__(*args, **kwargs)
-
-        self.fields['kind'].widget.attrs['readonly'] = True
-        self.fields['kind'].initial = "vmme"
-
-        self.fields['provider_service'].queryset = VMMEService.get_service_objects().all()
-
-        if self.instance:
-            self.fields['creator'].initial = self.instance.creator
-            self.fields['tenant_message'].initial = self.instance.tenant_message
-            self.fields['image_name'].initial = self.instance.image_name
-
-        if (not self.instance) or (not self.instance.pk):
-            self.fields['creator'].initial = get_request().user
-            if VMMEService.get_service_objects().exists():
-                self.fields['provider_service'].initial = VMMEService.get_service_objects().all()[0]
-
-    def save(self, commit=True):
-        self.instance.creator = self.cleaned_data.get('creator')
-        self.instance.tenant_message = self.cleaned_data.get('tenant_message')
-        self.instance.image_name = self.cleaned_data.get('image_name')
-        return super(VMMETenantForm, self).save(commit=commit)
-
-
-class VMMETenantAdmin(ReadOnlyAwareAdmin):
-
-    verbose_name = "VMME Service Tenant"
-    verbose_name_plural = "VMME Service Tenants"
-
-    list_display = ('id', 'backend_status_icon', 'instance', 'tenant_message', 'image_name')
-    list_display_links = ('backend_status_icon', 'instance', 'tenant_message', 'id', 'image_name')
-
-    fieldsets = [(None, {
-        'fields': ['backend_status_text', 'kind', 'provider_service', 'instance', 'creator', 'tenant_message', 'image_name'],
-        'classes': ['suit-tab suit-tab-general'],
-        })]
-
-    readonly_fields = ('backend_status_text', 'instance',)
-
-    form = VMMETenantForm
-
-    suit_form_tabs = (('general', 'Details'),)
-
-    def get_queryset(self, request):
-        return VMMETenant.get_tenant_objects_by_user(request.user)
-
-admin.site.register(VMMETenant, VMMETenantAdmin)
diff --git a/xos/make_synchronizer_manifest.sh b/xos/make_synchronizer_manifest.sh
index 0b16750..4609e85 100755
--- a/xos/make_synchronizer_manifest.sh
+++ b/xos/make_synchronizer_manifest.sh
@@ -1,3 +1,4 @@
+#! /bin/bash
 
 # Copyright 2017-present Open Networking Foundation
 #
@@ -13,6 +14,4 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-
-#! /bin/bash
 find synchronizer -type f | cut -b 14- > synchronizer/manifest 
diff --git a/xos/models.py b/xos/models.py
index bba7aac..7acdc6e 100644
--- a/xos/models.py
+++ b/xos/models.py
@@ -1,4 +1,3 @@
-
 # Copyright 2017-present Open Networking Foundation
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
@@ -13,69 +12,85 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
+from core.models.plcorebase import *
+from models_decl import VMMEService_decl
+from models_decl import VMMEVendor_decl
+from models_decl import VMMETenant_decl
 
-# models.py -  ExampleService Models
-
-from core.models import Service, TenantWithContainer, Image
+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 VMMEService(VMMEService_decl):
+   class Meta:
+        proxy = True 
 
-MCORD_KIND = "EPC"   #added from vBBU
+   def create_tenant(self, **kwargs):
+       t = VMMETenant(kind="vEPC", provider_service=self, connect_method="na", **kwargs)
+       t.save()
+       return t
 
-#these macros are currently not used, names hard-coded manually
-SERVICE_NAME = 'vmme'
-SERVICE_NAME_VERBOSE = 'VMME Service'
-SERVICE_NAME_VERBOSE_PLURAL = 'VMME Services'
-TENANT_NAME_VERBOSE = 'VMME Service Tenant'
-TENANT_NAME_VERBOSE_PLURAL = 'VMME Service Tenants'
+class VMMEVendor(VMMEVendor_decl):
+   class Meta:
+        proxy = True 
 
-class VMMEService(Service):
+class VMMETenant(VMMETenant_decl):
+   class Meta:
+        proxy = True 
 
-    KIND = MCORD_KIND
+   def __init__(self, *args, **kwargs):
+       vmmeservices = VMMEService.get_service_objects().all()
+       if vmmeservices:
+           self._meta.get_field("provider_service").default = vmmeservices[0].id
+       super(VMMETenant, self).__init__(*args, **kwargs)
 
-    class Meta:
-        proxy = True
-        app_label = "vmme"
-        verbose_name = "VMME Service"
+   @property
+   def image(self):
+       if not self.vmme_vendor:
+           return super(VMMETenant, self).image
+       return self.vmme_vendor.image
+   
+   def save_instance(self, instance):
+       if self.vmme_vendor:
+           instance.flavor = self.vmme_vendor.flavor
+       super(VMMETenant, self).save_instance(instance)
 
-class VMMETenant(TenantWithContainer):
+   def save(self, *args, **kwargs):
+       if not self.creator:
+           if not getattr(self, "caller", None):
+               raise XOSProgrammingError("VMMETenant's self.caller was not set")
+           self.creator = self.caller
+           if not self.creator:
+               raise XOSProgrammingError("VMMETenant's self.creator was not set")
 
-    KIND = 'vmme'
-    class Meta:
-        verbose_name = "VMME Service Tenant"
+       super(VMMETenant, 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_vmmetenant(self.pk)
 
-    tenant_message = models.CharField(max_length=254, help_text="vMME message")
-    image_name = models.CharField(max_length=254, help_text="Name of VM image")
-
-    def __init__(self, *args, **kwargs):
-        vmme_services = VMMEService.get_service_objects().all()
-        if vmme_services:
-            self._meta.get_field('provider_service').default = vmme_services[0].id
-        super(VMMETenant, self).__init__(*args, **kwargs)
-
-    def save(self, *args, **kwargs):
-        super(VMMETenant, self).save(*args, **kwargs)
-        model_policy_vmmetenant(self.pk) #defined below
-
-    def delete(self, *args, **kwargs):
-        self.cleanup_container()
-        super(VMMETenant, self).delete(*args, **kwargs)
-
-    @property
-    def image(self):
-        img = self.image_name.strip()
-        if img.lower() != "default":
-            return Image.objects.get(name=img)
-        else: 
-            return super(VMMETenant, self).image
-
-        
+   def delete(self, *args, **kwargs):
+       # Delete the instance that was created for this tenant
+       self.cleanup_container()
+       super(VMMETenant, self).delete(*args, **kwargs)
 
 def model_policy_vmmetenant(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 = VMMETenant.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/Dockerfile.synchronizer b/xos/synchronizer/Dockerfile.synchronizer
new file mode 100644
index 0000000..18e8c19
--- /dev/null
+++ b/xos/synchronizer/Dockerfile.synchronizer
@@ -0,0 +1,53 @@
+# 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.
+
+# xosproject/vmme-synchronizer
+FROM xosproject/xos-synchronizer-base:candidate
+
+COPY . /opt/xos/synchronizers/vmme
+
+ENTRYPOINT []
+
+WORKDIR "/opt/xos/synchronizers/vmme"
+
+# Label image
+ARG org_label_schema_schema_version=1.0
+ARG org_label_schema_name=vmme-synchronizer
+ARG org_label_schema_version=unknown
+ARG org_label_schema_vcs_url=unknown
+ARG org_label_schema_vcs_ref=unknown
+ARG org_label_schema_build_date=unknown
+ARG org_opencord_vcs_commit_date=unknown
+ARG org_opencord_component_chameleon_version=unknown
+ARG org_opencord_component_chameleon_vcs_url=unknown
+ARG org_opencord_component_chameleon_vcs_ref=unknown
+ARG org_opencord_component_xos_version=unknown
+ARG org_opencord_component_xos_vcs_url=unknown
+ARG org_opencord_component_xos_vcs_ref=unknown
+
+LABEL org.label-schema.schema-version=$org_label_schema_schema_version \
+      org.label-schema.name=$org_label_schema_name \
+      org.label-schema.version=$org_label_schema_version \
+      org.label-schema.vcs-url=$org_label_schema_vcs_url \
+      org.label-schema.vcs-ref=$org_label_schema_vcs_ref \
+      org.label-schema.build-date=$org_label_schema_build_date \
+      org.opencord.vcs-commit-date=$org_opencord_vcs_commit_date \
+      org.opencord.component.chameleon.version=$org_opencord_component_chameleon_version \
+      org.opencord.component.chameleon.vcs-url=$org_opencord_component_chameleon_vcs_url \
+      org.opencord.component.chameleon.vcs-ref=$org_opencord_component_chameleon_vcs_ref \
+      org.opencord.component.xos.version=$org_opencord_component_xos_version \
+      org.opencord.component.xos.vcs-url=$org_opencord_component_xos_vcs_url \
+      org.opencord.component.xos.vcs-ref=$org_opencord_component_xos_vcs_ref
+
+CMD bash -c "cd /opt/xos/synchronizers/vmme; ./run-from-api.sh"
diff --git a/xos/synchronizer/manifest b/xos/synchronizer/manifest
deleted file mode 100644
index c6a7454..0000000
--- a/xos/synchronizer/manifest
+++ /dev/null
@@ -1,8 +0,0 @@
-manifest
-model-deps
-run.sh
-steps/sync_vmmetenant.py
-steps/vmmetenant_playbook.yaml
-stop.sh
-vmme-synchronizer.py
-vmmeservice_config
diff --git a/xos/synchronizer/run.sh b/xos/synchronizer/run-from-api.sh
old mode 100644
new mode 100755
similarity index 90%
rename from xos/synchronizer/run.sh
rename to xos/synchronizer/run-from-api.sh
index c532ac3..6196692
--- a/xos/synchronizer/run.sh
+++ b/xos/synchronizer/run-from-api.sh
@@ -1,4 +1,3 @@
-
 # Copyright 2017-present Open Networking Foundation
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
@@ -13,7 +12,5 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-
-# Runs the XOS observer using vmmeservice_config
 export XOS_DIR=/opt/xos
-python vmme-synchronizer.py  -C $XOS_DIR/synchronizers/vmme/vmmeservice_config
+python vmme-synchronizer.py  -C $XOS_DIR/synchronizers/vmme/vmme_from_api_config
diff --git a/xos/synchronizer/steps/sync_vmmetenant.py b/xos/synchronizer/steps/sync_vmmetenant.py
index 91d4380..b8a704f 100644
--- a/xos/synchronizer/steps/sync_vmmetenant.py
+++ b/xos/synchronizer/steps/sync_vmmetenant.py
@@ -1,4 +1,3 @@
-
 # Copyright 2017-present Open Networking Foundation
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
@@ -13,12 +12,12 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-
 import os
 import sys
 from django.db.models import Q, F
-from services.vmme.models import VMMEService, VMMETenant
-from synchronizers.base.SyncInstanceUsingAnsible import SyncInstanceUsingAnsible
+#from services.vmme.models import VMMEService, VMMETenant
+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)
@@ -33,7 +32,7 @@
 
     template_name = "vmmetenant_playbook.yaml"
 
-    service_key_name = "/opt/xos/synchronizers/vmme/vmme_private_key"
+    service_key_name = "/opt/xos/configurations/mcord/mcord_private_key"
 
     def __init__(self, *args, **kwargs):
         super(SyncVMMETenant, self).__init__(*args, **kwargs)
@@ -49,22 +48,3 @@
 
         return objs
 
-    def get_vmmeservice(self, o):
-        if not o.provider_service:
-            return None
-
-        vmmeservice = VMMEService.get_service_objects().filter(id=o.provider_service.id)
-
-        if not vmmeservice:
-            return None
-
-        return vmmeservice[0]
-
-    # Gets the attributes that are used by the Ansible template but are not
-    # part of the set of default attributes.
-    def get_extra_attributes(self, o):
-        fields = {}
-        fields['tenant_message'] = o.tenant_message
-        fields['image_name'] = o.image_name
-        return fields
-
diff --git a/xos/synchronizer/steps/vmmetenant_playbook.yaml b/xos/synchronizer/steps/vmmetenant_playbook.yaml
index 6828701..05c13c1 100644
--- a/xos/synchronizer/steps/vmmetenant_playbook.yaml
+++ b/xos/synchronizer/steps/vmmetenant_playbook.yaml
@@ -1,4 +1,3 @@
-
 # Copyright 2017-present Open Networking Foundation
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
@@ -13,14 +12,12 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-
---- 
+---
 - hosts: {{ instance_name }} 
   gather_facts: False 
   connection: ssh 
   user: ubuntu 
   sudo: yes 
   tasks: 
+  vars:
  
- # - name: write message
- #   shell: echo "{{ tenant_message }}" > /var/tmp/index.html
diff --git a/xos/synchronizer/stop.sh b/xos/synchronizer/stop.sh
deleted file mode 100644
index a39ed46..0000000
--- a/xos/synchronizer/stop.sh
+++ /dev/null
@@ -1,18 +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.
-
-
-# Kill the observer
-pkill -9 -f vmme-synchronizer.py
diff --git a/xos/synchronizer/vmme-synchronizer.py b/xos/synchronizer/vmme-synchronizer.py
old mode 100644
new mode 100755
index 9c09a71..7f94bc7
--- a/xos/synchronizer/vmme-synchronizer.py
+++ b/xos/synchronizer/vmme-synchronizer.py
@@ -1,4 +1,3 @@
-
 # Copyright 2017-present Open Networking Foundation
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
@@ -13,17 +12,16 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-
 #!/usr/bin/env python
 
-# This imports and runs ../../xos-observer.py
 # Runs the standard XOS observer
 
 import importlib
 import os
 import sys
+
 observer_path = os.path.join(os.path.dirname(
-    os.path.realpath(__file__)), "../../synchronizers/base")
+    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/vmme_from_api_config b/xos/synchronizer/vmme_from_api_config
new file mode 100644
index 0000000..e53d5e3
--- /dev/null
+++ b/xos/synchronizer/vmme_from_api_config
@@ -0,0 +1,20 @@
+# Sets options for the synchronizer
+[observer]
+name=vmme
+dependency_graph=/opt/xos/synchronizers/vmme/model-deps
+steps_dir=/opt/xos/synchronizers/vmme/steps
+sys_dir=/opt/xos/synchronizers/vmme/sys
+#logfile=/var/log/xos_backend.log
+log_file=console
+log_level=debug
+pretend=False
+backoff_disabled=True
+save_ansible_output=True
+proxy_ssh=True
+proxy_ssh_key=/opt/cord_profile/node_key
+proxy_ssh_user=root
+accessor_kind=api
+accessor_password=@/opt/xos/services/vmme/credentials/xosadmin@opencord.org
+
+[networking]
+use_vtn=True
diff --git a/xos/synchronizer/vmmeservice_config b/xos/synchronizer/vmmeservice_config
deleted file mode 100644
index c1c6454..0000000
--- a/xos/synchronizer/vmmeservice_config
+++ /dev/null
@@ -1,28 +0,0 @@
-# Required by XOS
-[db]
-name=xos
-user=postgres
-password=password
-host=xos_db
-port=5432
-
-# Required by XOS
-[api]
-nova_enabled=True
-
-
-# Sets options for the synchronizer
-[observer]
-name=vmmeservice
-dependency_graph=/opt/xos/synchronizers/vmme/model-deps
-steps_dir=/opt/xos/synchronizers/vmme/steps
-sys_dir=/opt/xos/synchronizers/vmme/sys
-logfile=/var/log/xos_backend.log
-pretend=False
-backoff_disabled=True
-save_ansible_output=True
-proxy_ssh=True
-proxy_ssh_key=/root/setup/id_rsa
-proxy_ssh_user=root
-[networking]
-use_vtn=True
diff --git a/xos/templates/mcordadmin.html b/xos/templates/mcordadmin.html
deleted file mode 100644
index a86ddd1..0000000
--- a/xos/templates/mcordadmin.html
+++ /dev/null
@@ -1,27 +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.
--->
-
-
-<div class = "left-nav">
-  <ul>
-    <li>
-      <a href="/admin/mcordservice/vmmecomponent/">
-        MCORD Service Components
-      </a>
-    </li>
-  </ul>
-</div>
diff --git a/xos/tosca/custom_types/macros.m4 b/xos/tosca/custom_types/macros.m4
new file mode 100644
index 0000000..cd4ff96
--- /dev/null
+++ b/xos/tosca/custom_types/macros.m4
@@ -0,0 +1,98 @@
+# 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.
+
+# Note: Tosca derived_from isn't working the way I think it should, it's not
+#    inheriting from the parent template. Until we get that figured out, use
+#    m4 macros do our inheritance
+
+define(xos_base_props,
+            no-delete:
+                type: boolean
+                default: false
+                description: Do not allow Tosca to delete this object
+            no-create:
+                type: boolean
+                default: false
+                description: Do not allow Tosca to create this object
+            no-update:
+                type: boolean
+                default: false
+                description: Do not allow Tosca to update this object
+            replaces:
+                type: string
+                required: false
+                descrption: Replaces/renames this object)
+# Service
+define(xos_base_service_caps,
+            scalable:
+                type: tosca.capabilities.Scalable
+            service:
+                type: tosca.capabilities.xos.Service)
+define(xos_base_service_props,
+            kind:
+                type: string
+                default: generic
+                description: Type of service.
+            view_url:
+                type: string
+                required: false
+                description: URL to follow when icon is clicked in the Service Directory.
+            icon_url:
+                type: string
+                required: false
+                description: ICON to display in the Service Directory.
+            enabled:
+                type: boolean
+                default: true
+            published:
+                type: boolean
+                default: true
+                description: If True then display this Service in the Service Directory.
+            public_key:
+                type: string
+                required: false
+                description: Public key to install into Instances to allows Services to SSH into them.
+            private_key_fn:
+                type: string
+                required: false
+                description: Location of private key file
+            versionNumber:
+                type: string
+                required: false
+                description: Version number of Service.)
+# Subscriber
+define(xos_base_subscriber_caps,
+            subscriber:
+                type: tosca.capabilities.xos.Subscriber)
+define(xos_base_subscriber_props,
+            kind:
+                type: string
+                default: generic
+                description: Kind of subscriber
+            service_specific_id:
+                type: string
+                required: false
+                description: Service specific ID opaque to XOS but meaningful to service)
+define(xos_base_tenant_props,
+            kind:
+                type: string
+                default: generic
+                description: Kind of tenant
+            service_specific_id:
+                type: string
+                required: false
+                description: Service specific ID opaque to XOS but meaningful to service)
+
+# end m4 macros
+
diff --git a/xos/tosca/custom_types/vmme.m4 b/xos/tosca/custom_types/vmme.m4
new file mode 100644
index 0000000..ade37a8
--- /dev/null
+++ b/xos/tosca/custom_types/vmme.m4
@@ -0,0 +1,53 @@
+# 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.
+
+tosca_definitions_version: tosca_simple_yaml_1_0
+
+# compile this with "m4 vmme.m4 > vmme.yaml"
+
+# include macros
+include(macros.m4)
+
+node_types:
+    tosca.nodes.VMMEService:
+        derived_from: tosca.nodes.Root
+        description: >
+            VMME Service
+        capabilities:
+            xos_base_service_caps
+        properties:
+            xos_base_props
+            xos_base_service_props
+                
+    tosca.nodes.VMMETenant:
+        derived_from: tosca.nodes.Root
+        description: >
+            VMME Tenant
+        properties:
+            xos_base_tenant_props
+
+    tosca.nodes.VMMEVendor:
+        derived_from: tosca.nodes.Root
+        description: >
+            VMME Vendor
+        properties:
+            xos_base_props
+            name:
+                type: string
+                required: true
+
+    tosca.relationships.VendorOfTenant:
+           derived_from: tosca.relationships.Root
+           valid_target_types: [ tosca.capabilities.xos.VMMETenant ]
+
diff --git a/xos/tosca/custom_types/vmme.yaml b/xos/tosca/custom_types/vmme.yaml
new file mode 100644
index 0000000..1a5765a
--- /dev/null
+++ b/xos/tosca/custom_types/vmme.yaml
@@ -0,0 +1,138 @@
+# 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.
+
+tosca_definitions_version: tosca_simple_yaml_1_0
+
+# compile this with "m4 vmme.m4 > vmme.yaml"
+
+# include macros
+# Note: Tosca derived_from isn't working the way I think it should, it's not
+#    inheriting from the parent template. Until we get that figured out, use
+#    m4 macros do our inheritance
+
+
+# Service
+
+
+# Subscriber
+
+
+
+
+# end m4 macros
+
+
+
+node_types:
+    tosca.nodes.VMMEService:
+        derived_from: tosca.nodes.Root
+        description: >
+            VMME Service
+        capabilities:
+            scalable:
+                type: tosca.capabilities.Scalable
+            service:
+                type: tosca.capabilities.xos.Service
+        properties:
+            no-delete:
+                type: boolean
+                default: false
+                description: Do not allow Tosca to delete this object
+            no-create:
+                type: boolean
+                default: false
+                description: Do not allow Tosca to create this object
+            no-update:
+                type: boolean
+                default: false
+                description: Do not allow Tosca to update this object
+            replaces:
+                type: string
+                required: false
+                descrption: Replaces/renames this object
+            kind:
+                type: string
+                default: generic
+                description: Type of service.
+            view_url:
+                type: string
+                required: false
+                description: URL to follow when icon is clicked in the Service Directory.
+            icon_url:
+                type: string
+                required: false
+                description: ICON to display in the Service Directory.
+            enabled:
+                type: boolean
+                default: true
+            published:
+                type: boolean
+                default: true
+                description: If True then display this Service in the Service Directory.
+            public_key:
+                type: string
+                required: false
+                description: Public key to install into Instances to allows Services to SSH into them.
+            private_key_fn:
+                type: string
+                required: false
+                description: Location of private key file
+            versionNumber:
+                type: string
+                required: false
+                description: Version number of Service.
+                
+    tosca.nodes.VMMETenant:
+        derived_from: tosca.nodes.Root
+        description: >
+            VMME Tenant
+        properties:
+            kind:
+                type: string
+                default: generic
+                description: Kind of tenant
+            service_specific_id:
+                type: string
+                required: false
+                description: Service specific ID opaque to XOS but meaningful to service
+
+    tosca.nodes.VMMEVendor:
+        derived_from: tosca.nodes.Root
+        description: >
+            VMME Vendor
+        properties:
+            no-delete:
+                type: boolean
+                default: false
+                description: Do not allow Tosca to delete this object
+            no-create:
+                type: boolean
+                default: false
+                description: Do not allow Tosca to create this object
+            no-update:
+                type: boolean
+                default: false
+                description: Do not allow Tosca to update this object
+            replaces:
+                type: string
+                required: false
+                descrption: Replaces/renames this object
+            name:
+                type: string
+                required: true
+
+    tosca.relationships.VendorOfTenant:
+           derived_from: tosca.relationships.Root
+           valid_target_types: [ tosca.capabilities.xos.VMMETenant ]
+
diff --git a/xos/tosca/resources/vmmeservice.py b/xos/tosca/resources/vmmeservice.py
index 0a6801b..23cc7d3 100644
--- a/xos/tosca/resources/vmmeservice.py
+++ b/xos/tosca/resources/vmmeservice.py
@@ -1,4 +1,3 @@
-
 # Copyright 2017-present Open Networking Foundation
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
@@ -13,11 +12,11 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-
-from services.vmme.models import VMMEService
 from service import XOSService
+from services.vmme.models import VMMEService
 
 class XOSVMMEService(XOSService):
 	provides = "tosca.nodes.VMMEService"
 	xos_model = VMMEService
-	copyin_props = ["view_url", "icon_url", "enabled", "published", "public_key", "private_key_fn", "versionNumber"]
\ No newline at end of file
+	copyin_props = ["view_url", "icon_url", "enabled", "published", "public_key", "private_key_fn", "versionNumber"]
+
diff --git a/xos/tosca/resources/vmmetenant.py b/xos/tosca/resources/vmmetenant.py
index 4ced038..e1e9451 100644
--- a/xos/tosca/resources/vmmetenant.py
+++ b/xos/tosca/resources/vmmetenant.py
@@ -1,4 +1,3 @@
-
 # Copyright 2017-present Open Networking Foundation
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
@@ -13,22 +12,22 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-
-from services.vmme.models import VMMETenant, VMMEService
 from xosresource import XOSResource
+from core.models import Tenant, Service
+from services.vmme.models import VMMETenant
 
 class XOSVMMETenant(XOSResource):
     provides = "tosca.nodes.VMMETenant"
     xos_model = VMMETenant
-    copyin_props = ["tenant_message", "image_name"]  
-    name_field = None  
+    name_field = None 
+    copyin_props = () 
 
     def get_xos_args(self, throw_exception=True):
         args = super(XOSVMMETenant, self).get_xos_args()
 
-        provider_name = self.get_requirement("tosca.relationships.MemberOfService", throw_exception=throw_exception)
+        provider_name = self.get_requirement("tosca.relationships.TenantOfService", throw_exception=throw_exception)
         if provider_name:
-            args["provider_service"] = self.get_xos_object(VMMEService, throw_exception=throw_exception, name=provider_name)
+            args["provider_service"] = self.get_xos_object(Service, throw_exception=throw_exception, name=provider_name)
 
         return args
 
@@ -44,3 +43,4 @@
 
     def can_delete(self, obj):
         return super(XOSVMMETenant, self).can_delete(obj)
+
diff --git a/xos/tosca/resources/vmmevendor.py b/xos/tosca/resources/vmmevendor.py
new file mode 100644
index 0000000..3997db7
--- /dev/null
+++ b/xos/tosca/resources/vmmevendor.py
@@ -0,0 +1,45 @@
+# 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 xosresource import XOSResource
+from core.models import Tenant
+from services.vmme.models import VMMEVendor
+
+class XOSVMMEVendor(XOSResource):
+    provides = "tosca.nodes.VMMEVendor"
+    xos_model = VMMEVendor
+    name_field = None
+    copyin_props = ( "name",)
+
+    def get_xos_args(self, throw_exception=True):
+        args = super(XOSVMMEVendor, self).get_xos_args()
+
+        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)
+
+        return args
+
+    def get_existing_objs(self):
+        args = self.get_xos_args(throw_exception=False)
+        provider_tenant = args.get("provider", None)
+        if provider_tenant:
+            return [ self.get_xos_object(provider_tenant=provider_tenant) ]
+        return []
+
+    def postprocess(self, obj):
+        pass
+
+    def can_delete(self, obj):
+        return super(XOSVMMEVendor, self).can_delete(obj)
diff --git a/xos/vmme-onboard.yaml b/xos/vmme-onboard.yaml
index 1239483..56e6df9 100644
--- a/xos/vmme-onboard.yaml
+++ b/xos/vmme-onboard.yaml
@@ -1,4 +1,3 @@
-
 # Copyright 2017-present Open Networking Foundation
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
@@ -13,7 +12,6 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-
 tosca_definitions_version: tosca_simple_yaml_1_0
 
 description: Onboard the vMME service
@@ -26,14 +24,14 @@
     servicecontroller#vmme:
       type: tosca.nodes.ServiceController
       properties:
-          base_url: file:///opt/xos_services/vMME/xos/
+          base_url: file:///opt/xos_services/vmme/xos/
           # The following will concatenate with base_url automatically, if
           # base_url is non-null.
-          models: models.py
-          admin: admin.py
-          admin_template: templates/mcordadmin.html  
+          xproto: ./
+          tosca_custom_types: tosca/custom_types/vmme.yaml
           synchronizer: synchronizer/manifest  
           synchronizer_run: vmme-synchronizer.py
-          tosca_resource: tosca/resources/vmmetenant.py, tosca/resources/vmmeservice.py 
-          private_key: file:///opt/xos/key_import/vMME_rsa
-          public_key: file:///opt/xos/key_import/vMME_rsa.pub
+          tosca_resource: tosca/resources/vmmetenant.py, tosca/resources/vmmeservice.py, tosca/resources/vmmevendor.py 
+          private_key: file:///opt/xos/key_import/mcord_rsa
+          public_key: file:///opt/xos/key_import/mcord_rsa.pub
+
diff --git a/xos/vmme.xproto b/xos/vmme.xproto
new file mode 100644
index 0000000..7ebd4c6
--- /dev/null
+++ b/xos/vmme.xproto
@@ -0,0 +1,25 @@
+option name = "vMME";
+option verbose_name = "Virtual Mobility Management Entity";
+option app_label = "vmme";
+option kind = "vEPC";
+option legacy = "True";
+
+message VMMEService (Service){
+    option name = "VMMEService";
+    option verbose_name = "Virtual Mobility Management Entity Service";
+}
+
+message VMMEVendor (PlCoreBase){
+    option name = "VMMEVendor";
+    option verbose_name = "Virtual Mobility Management Entity 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];
+    required manytoone flavor->Flavor:+ = 3 [help_text = "select openstack flavor for vendor image", db_index = True, null = False, blank = False];
+}
+
+message VMMETenant (TenantWithContainer){
+    option name = "VMMETenant";
+    option verbose_name = "Virtual Mobility Management Entity Tenant";
+    optional manytoone vmme_vendor->VMMEVendor:vendor_tenants = 1 [help_text = "select vendor of choice, leave blank for slice default", db_index = True, null = True, blank = True]; 
+}
+
