diff --git a/xos/admin.py b/xos/admin.py
deleted file mode 100644
index 853cd00..0000000
--- a/xos/admin.py
+++ /dev/null
@@ -1,230 +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 django.contrib import admin
-
-from services.vrouter.models import *
-from django import forms
-from django.utils.safestring import mark_safe
-from django.contrib.auth.admin import UserAdmin
-from django.contrib.admin.widgets import FilteredSelectMultiple
-from django.contrib.auth.forms import ReadOnlyPasswordHashField
-from django.contrib.auth.signals import user_logged_in
-from django.utils import timezone
-from django.contrib.contenttypes import generic
-from suit.widgets import LinkedSelect
-from core.models import AddressPool
-from core.admin import ServiceAppAdmin, SliceInline, ServiceAttrAsTabInline, ReadOnlyAwareAdmin, XOSTabularInline, ServicePrivilegeInline, AddressPoolInline, SubscriberLinkInline, ProviderLinkInline, ProviderDependencyInline,SubscriberDependencyInline
-from core.middleware import get_request
-
-from functools import update_wrapper
-from django.contrib.admin.views.main import ChangeList
-from django.core.urlresolvers import reverse
-from django.contrib.admin.utils import quote
-
-
-class VRouterPortInline(XOSTabularInline):
-    model = VRouterPort
-    fields = ['openflow_id']
-    suit_classes = 'suit-tab suit-tab-vrouter_ports'
-    extra = 0
-
-
-class VRouterInterfaceInline(XOSTabularInline):
-    model = VRouterInterface
-    fields = ['name', 'mac', 'vlan']
-    suit_classes = 'suit-tab suit-tab-vrouter_interfaces'
-    extra = 0
-
-
-class VRouterIpInline(XOSTabularInline):
-    model = VRouterIp
-    fields = ['ip']
-    suit_classes = 'suit-tab suit-tab-vrouter_ips'
-    extra = 0
-
-
-class VRouterServiceForm(forms.ModelForm):
-    def __init__(self, *args, **kwargs):
-        super(VRouterServiceForm, self).__init__(*args, **kwargs)
-
-    def save(self, commit=True):
-        return super(VRouterServiceForm, self).save(commit=commit)
-
-    class Meta:
-        model = VRouterService
-        fields = '__all__'
-
-
-class VRouterServiceAdmin(ReadOnlyAwareAdmin):
-    model = VRouterService
-    verbose_name = "vRouter Service"
-    verbose_name_plural = "vRouter Service"
-    list_display = ("backend_status_icon", "name", "enabled")
-    list_display_links = ('backend_status_icon', 'name', )
-    fieldsets = [(None, {
-        'fields': [
-            'backend_status_text',
-            'name',
-            'enabled',
-            'versionNumber',
-            'description',
-            'view_url',
-            'icon_url',
-            'rest_hostname',
-            'rest_port',
-            'rest_user',
-            'rest_pass',
-        ],
-        'classes':['suit-tab suit-tab-general']})]
-
-    # NOTE make rest_* params editable
-    readonly_fields = (
-        'backend_status_text',
-        'rest_hostname',
-        'rest_port',
-        'rest_user',
-        'rest_pass'
-    )
-    inlines = [SliceInline, ServiceAttrAsTabInline, ServicePrivilegeInline, AddressPoolInline, ProviderDependencyInline,SubscriberDependencyInline]
-    form = VRouterServiceForm
-
-    extracontext_registered_admins = True
-
-    user_readonly_fields = ["name", "enabled", "versionNumber", "description"]
-
-    suit_form_tabs = (
-        ('general', 'vRouter Service Details'),
-        ('administration', 'Administration'),
-        ('addresspools', 'Addresses'),
-        # ('tools', 'Tools'),
-        ('slices', 'Slices'),
-        ('serviceattrs', 'Additional Attributes'),
-        ('servicetenants', 'Dependencies'),
-        ('serviceprivileges', 'Privileges'),
-    )
-
-    suit_form_includes = ('vrouteradmin.html', 'top', 'administration')  # ('hpctools.html', 'top', 'tools') )
-
-    def get_queryset(self, request):
-        return VRouterService.select_by_user(request.user)
-
-
-class VRouterTenantForm(forms.ModelForm):
-    gateway_ip = forms.CharField(required=False)
-    gateway_mac = forms.CharField(required=False)
-    cidr = forms.CharField(required=False)
-
-    def __init__(self,*args,**kwargs):
-        super (VRouterTenantForm,self ).__init__(*args,**kwargs)
-        self.fields['owner'].queryset = VRouterService.objects.all()
-        if self.instance:
-            # fields for the attributes
-            self.fields['gateway_ip'].initial = self.instance.gateway_ip
-            self.fields['gateway_mac'].initial = self.instance.gateway_mac
-            self.fields['cidr'].initial = self.instance.cidr
-        if (not self.instance) or (not self.instance.pk):
-            # default fields for an 'add' form
-            if VRouterService.objects.exists():
-               self.fields["owner"].initial = VRouterService.objects.first()
-
-    def save(self, commit=True):
-        return super(VRouterTenantForm, self).save(commit=commit)
-
-    class Meta:
-        model = VRouterTenant
-        fields = '__all__'
-
-
-class VRouterTenantAdmin(ReadOnlyAwareAdmin):
-    list_display = ('backend_status_icon', 'id', 'public_ip')
-    list_display_links = ('backend_status_icon', 'id')
-    fieldsets = [(None, {
-        'fields': [
-            'backend_status_text', 'owner',
-            'address_pool', 'public_ip', 'public_mac', 'gateway_ip', 'gateway_mac', 'cidr'],
-        'classes':['suit-tab suit-tab-general']
-    })]
-    readonly_fields = ('backend_status_text', 'service_specific_attribute', 'gateway_ip', 'gateway_mac', 'cidr')
-    inlines = (ProviderLinkInline, SubscriberLinkInline)
-    form = VRouterTenantForm
-
-    suit_form_tabs = (('general', 'Details'), ('servicelinks','Links'),)
-
-    def get_queryset(self, request):
-        return VRouterTenant.select_by_user(request.user)
-
-
-class VRouterDeviceAdmin(ReadOnlyAwareAdmin):
-    list_display = ('name', 'openflow_id', 'config_key', 'driver')
-    fieldsets = [(None, {
-        'fields': ['name', 'openflow_id', 'vrouter_service', 'config_key', 'driver'],
-        'classes':['suit-tab suit-tab-general']
-    })]
-    inlines = [VRouterPortInline]
-
-    suit_form_tabs = (
-        ('general', 'Device Details'),
-        ('vrouter_ports', 'Ports'),
-    )
-
-
-class VRouterPortAdmin(ReadOnlyAwareAdmin):
-    list_display = ('name', 'openflow_id', 'vrouter_device')
-    fieldsets = [(None, {
-        'fields': ['name', 'openflow_id', 'vrouter_service', 'vrouter_device'],
-        'classes':['suit-tab suit-tab-general']
-    })]
-    inlines = [VRouterInterfaceInline]
-
-    suit_form_tabs = (
-        ('general', 'Ports Details'),
-        ('vrouter_interfaces', 'Interfaces'),
-    )
-
-
-class VRouterInterfaceAdmin(ReadOnlyAwareAdmin):
-    list_display = ('name', 'mac', 'vlan')
-    fieldsets = [(None, {
-        'fields': ['name', 'vrouter_port', 'mac', 'vlan'],
-        'classes':['suit-tab suit-tab-general']
-    })]
-    inlines = [VRouterIpInline]
-
-    suit_form_tabs = (
-        ('general', 'Interfaces Details'),
-        ('vrouter_ips', 'Ips'),
-    )
-
-
-class VRouterIpAdmin(ReadOnlyAwareAdmin):
-    list_display = ('name', 'ip', 'vrouter_interface')
-    fieldsets = [(None, {'fields': ['name', 'ip', 'vrouter_interface']})]
-
-
-class VRouterAppAdmin(ReadOnlyAwareAdmin):
-    list_display = ('name', 'control_plane_connect_point', 'ospf_enabled')
-    fieldsets = [(None, {'fields': ['name', 'vrouter_service', 'control_plane_connect_point', 'ospf_enabled']})]
-
-
-admin.site.register(VRouterService, VRouterServiceAdmin)
-admin.site.register(VRouterTenant, VRouterTenantAdmin)
-admin.site.register(VRouterDevice, VRouterDeviceAdmin)
-admin.site.register(VRouterPort, VRouterPortAdmin)
-admin.site.register(VRouterInterface, VRouterInterfaceAdmin)
-admin.site.register(VRouterIp, VRouterIpAdmin)
-admin.site.register(VRouterApp, VRouterAppAdmin)
-
diff --git a/xos/macros.m4 b/xos/macros.m4
deleted file mode 100644
index 391aafd..0000000
--- a/xos/macros.m4
+++ /dev/null
@@ -1,100 +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.
-
-
-# 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/models.py b/xos/synchronizer/models/models.py
similarity index 100%
rename from xos/models.py
rename to xos/synchronizer/models/models.py
diff --git a/xos/vrouter.xproto b/xos/synchronizer/models/vrouter.xproto
similarity index 100%
rename from xos/vrouter.xproto
rename to xos/synchronizer/models/vrouter.xproto
diff --git a/xos/synchronizer/vrouter_config.yaml b/xos/synchronizer/vrouter_config.yaml
index 050503a..7fe4f18 100644
--- a/xos/synchronizer/vrouter_config.yaml
+++ b/xos/synchronizer/vrouter_config.yaml
@@ -14,10 +14,16 @@
 # limitations under the License.
 
 
-name: vrouter-synchronizer
+name: vrouter
 accessor:
   username: xosadmin@opencord.org
   password: "@/opt/xos/services/vrouter/credentials/xosadmin@opencord.org"
+required_models:
+  - VRouterService
+  - VRouterDevice
+  - VRouterApp
+  - VRouterPort
 dependency_graph: "/opt/xos/synchronizers/vrouter/model-deps"
 steps_dir: "/opt/xos/synchronizers/vrouter/steps"
-sys_dir: "/opt/xos/synchronizers/vrouter/sys"
\ No newline at end of file
+sys_dir: "/opt/xos/synchronizers/vrouter/sys"
+models_dir: "/opt/xos/synchronizers/vrouter/models"
diff --git a/xos/templates/vrouteradmin.html b/xos/templates/vrouteradmin.html
deleted file mode 100644
index fed8bb4..0000000
--- a/xos/templates/vrouteradmin.html
+++ /dev/null
@@ -1,40 +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="row">
-  <div class="col-sm-4">
-    <a href="/admin/vrouter/vroutertenant/" class="btn btn-primary">vRouter Tenants</a>
-  </div>
-  <div class="col-sm-4">
-    <a href="/admin/vrouter/vrouterapps/" class="btn btn-primary">vRouter Apps</a>
-  </div>
-  <div class="col-sm-4">
-    <a href="/admin/vrouter/vrouterdevices/" class="btn btn-primary">vRouter Devices</a>
-  </div>
-</div>
-<div class="row">
-  <div class="col-sm-4">
-    <a href="/admin/vrouter/vrouterports/" class="btn btn-primary">vRouter Ports</a>
-  </div>
-  <div class="col-sm-4">
-    <a href="/admin/vrouter/vrouterinterfaces/" class="btn btn-primary">vRouter Interfaces</a>
-  </div>
-  <div class="col-sm-4">
-    <a href="/admin/vrouter/vrouterips/" class="btn btn-primary">vRouter Ips</a>
-  </div>
-</div>
\ No newline at end of file
diff --git a/xos/tosca/resources/vrouterservice.py b/xos/tosca/resources/vrouterservice.py
deleted file mode 100644
index 2d64d00..0000000
--- a/xos/tosca/resources/vrouterservice.py
+++ /dev/null
@@ -1,106 +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 service import XOSService
-from services.vrouter.models import *
-
-
-class XOSVRouterService(XOSService):
-    provides = "tosca.nodes.VRouterService"
-    xos_model = VRouterService
-    copyin_props = ["view_url", "icon_url", "enabled", "published", "public_key", "versionNumber",
-                    "rest_hostname", "rest_port", "rest_user", "rest_pass"]
-
-
-class XOSVRouterDevice(XOSService):
-    provides = "tosca.nodes.VRouterDevice"
-    xos_model = VRouterDevice
-    copyin_props = ['openflow_id', 'config_key', 'driver']
-
-    def get_xos_args(self):
-        args = super(XOSVRouterDevice, self).get_xos_args()
-
-        serviceName = self.get_requirement("tosca.relationships.MemberOfService", throw_exception=False)
-        if serviceName:
-            service = self.get_xos_object(Service, name=serviceName)
-            args["vrouter_service_id"] = service.id
-        return args
-
-
-class XOSVRouterPort(XOSService):
-    provides = "tosca.nodes.VRouterPort"
-    xos_model = VRouterPort
-    copyin_props = ['openflow_id']
-
-    def get_xos_args(self):
-        args = super(XOSVRouterPort, self).get_xos_args()
-
-        deviceName = self.get_requirement("tosca.relationships.PortOfDevice", throw_exception=False)
-        if deviceName:
-            device = self.get_xos_object(VRouterDevice, name=deviceName)
-            args["vrouter_device"] = device
-
-        serviceName = self.get_requirement("tosca.relationships.MemberOfService", throw_exception=False)
-        if serviceName:
-            service = self.get_xos_object(Service, name=serviceName)
-            args["vrouter_service_id"] = service.id
-
-        return args
-
-
-class XOSVRouterInterface(XOSService):
-    provides = "tosca.nodes.VRouterInterface"
-    xos_model = VRouterInterface
-    copyin_props = ['name', 'mac', 'vlan']
-
-    def get_xos_args(self):
-        args = super(XOSVRouterInterface, self).get_xos_args()
-
-        portName = self.get_requirement("tosca.relationships.InterfaceOfPort", throw_exception=False)
-        if portName:
-            port = self.get_xos_object(VRouterPort, name=portName)
-            args["vrouter_port"] = port
-        return args
-
-
-class XOSVRouterIp(XOSService):
-    provides = "tosca.nodes.VRouterIp"
-    xos_model = VRouterIp
-    copyin_props = ['ip']
-
-    def get_xos_args(self):
-        args = super(XOSVRouterIp, self).get_xos_args()
-
-        interfaceName = self.get_requirement("tosca.relationships.IpOfInterface", throw_exception=False)
-        if interfaceName:
-            interface = self.get_xos_object(VRouterInterface, name=interfaceName)
-            args["vrouter_interface"] = interface
-        return args
-
-
-class XOSVRouterApp(XOSService):
-    provides = "tosca.nodes.VRouterApp"
-    xos_model = VRouterApp
-    copyin_props = ['name', 'control_plane_connect_point', 'ospf_enabled']
-
-    def get_xos_args(self):
-        args = super(XOSVRouterApp, self).get_xos_args()
-
-        serviceName = self.get_requirement("tosca.relationships.MemberOfService", throw_exception=True)
-        if serviceName:
-            service = self.get_xos_object(Service, name=serviceName)
-            args["vrouter_service_id"] = service.id
-        return args
diff --git a/xos/tosca/sample.yaml b/xos/tosca/sample.yaml
deleted file mode 100644
index a9a8901..0000000
--- a/xos/tosca/sample.yaml
+++ /dev/null
@@ -1,90 +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.
-
-
-tosca_definitions_version: tosca_simple_yaml_1_0
-
-description: Just enough Tosca to get the vSG slice running on the CORD POD
-
-imports:
-   - custom_types/xos.yaml
-   - custom_types/vrouter.yaml
-
-topology_template:
-  node_templates:
-
-    service#vRouterSample:
-      type: tosca.nodes.VRouterService
-      properties:
-          view_url: /admin/vrouter/vrouterservice/$id$/
-          rest_hostname: 10.0.2.2
-          rest_port: 8181
-          rest_user: onos
-          rest_pass: rocks
-    
-    device#switch:
-      type: tosca.nodes.VRouterDevice
-      properties:
-        openflow_id: of:000000000001
-        driver: softrouter
-        # config_key: basic
-      requirements:
-        - service#vRouterSample:
-            node: service#vRouterSample
-            relationship: tosca.relationships.MemberOfService
-
-    port#sample_port:
-      type: tosca.nodes.VRouterPort
-      properties:
-        openflow_id: of:000000000001/1
-      requirements:
-        - device#switch:
-            node: device#switch
-            relationship: tosca.relationships.PortOfDevice
-        - service#vRouterSample:
-            node: service#vRouterSample
-            relationship: tosca.relationships.MemberOfService
-
-    interface#b1-1:
-      type: tosca.nodes.VRouterInterface
-      properties:
-        name: b1-1
-        mac: 00:00:00:00:00:01
-        vlan: 100
-      requirements:
-        - port#sample_port:
-            node: port#sample_port
-            relationship: tosca.relationships.InterfaceOfPort
-
-    vrouter_ips:
-      type: tosca.nodes.VRouterIp
-      properties:
-        ip: 10.0.4.2/24
-      requirements:
-        - interface#b1-1:
-            node: interface#b1-1
-            relationship: tosca.relationships.IpOfInterface
-
-    app#vrouterApp:
-      type: tosca.nodes.VRouterApp
-      properties:
-        name: org.onosproject.router
-        # can we use a relation to specify the connect point port?
-        control_plane_connect_point: of:00000000000000b1/5
-        ospf_enabled: true
-      requirements:
-          - service#vRouterSample:
-              node: service#vRouterSample
-              relationship: tosca.relationships.MemberOfService
diff --git a/xos/vrouter-onboard.yaml b/xos/vrouter-onboard.yaml
index 7795600..97f3901 100644
--- a/xos/vrouter-onboard.yaml
+++ b/xos/vrouter-onboard.yaml
@@ -27,13 +27,6 @@
       type: tosca.nodes.ServiceController
       properties:
           base_url: file:///opt/xos_services/vrouter/xos/
-          # The following will concatenate with base_url automatically, if
-          # base_url is non-null.
-          xproto: ./
-          admin: admin.py
-          admin_template: templates/vrouteradmin.html
-          tosca_custom_types: vrouter.yaml
-          tosca_resource: tosca/resources/vrouterservice.py
 
 
 
diff --git a/xos/vrouter.m4 b/xos/vrouter.m4
deleted file mode 100644
index fd4ccf4..0000000
--- a/xos/vrouter.m4
+++ /dev/null
@@ -1,136 +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.
-
-
-tosca_definitions_version: tosca_simple_yaml_1_0
-
-# compile this with "m4 vrouter.m4 > vrouter.yaml"
-
-# include macros
-include(macros.m4)
-
-node_types:
-    
-    tosca.nodes.VRouterService:
-        derived_from: tosca.nodes.Root
-        description: >
-            CORD: The vRouter Service.
-        capabilities:
-            xos_base_service_caps
-        properties:
-            xos_base_props
-            xos_base_service_props
-            rest_hostname:
-                type: string
-                required: false
-            rest_port:
-                type: string
-                required: false
-            rest_user:
-                type: string
-                required: false
-            rest_pass:
-                type: string
-                required: false
-
-    tosca.nodes.VRouterDevice:
-        derived_from: tosca.nodes.Root
-        description: >
-            CORD: The vRouter Device.
-        capabilities:
-            xos_base_service_caps
-        properties:
-            xos_base_props
-            openflow_id:
-                type: string
-                required: true
-            config_key:
-                type: string
-                required: false
-            driver:
-                type: string
-                required: true
-
-    tosca.nodes.VRouterPort:
-        derived_from: tosca.nodes.Root
-        description: >
-            CORD: The vRouter Port.
-        capabilities:
-            xos_base_service_caps
-        properties:
-            xos_base_props
-            openflow_id:
-                type: string
-                required: true
-
-    tosca.nodes.VRouterInterface:
-        derived_from: tosca.nodes.Root
-        description: >
-            CORD: The vRouter Interface.
-        capabilities:
-            xos_base_service_caps
-        properties:
-            xos_base_props
-            name:
-                type: string
-                required: true
-            mac:
-                type: string
-                required: true
-            vlan:
-                type: string
-                required: false
-
-    tosca.nodes.VRouterIp:
-        derived_from: tosca.nodes.Root
-        description: >
-            CORD: The vRouter Ip.
-        capabilities:
-            xos_base_service_caps
-        properties:
-            xos_base_props
-            ip:
-                type: string
-                required: true
-
-    tosca.nodes.VRouterApp:
-        derived_from: tosca.nodes.Root
-        description: >
-            CORD: The vRouter ONOS App Config.
-        capabilities:
-            xos_base_service_caps
-        properties:
-            xos_base_props
-            name:
-                type: string
-                required: true
-            control_plane_connect_point:
-                type: string
-                required: true
-            ospf_enabled:
-                type: boolean
-                required: true
-
-    tosca.relationships.PortOfDevice:
-            derived_from: tosca.relationships.Root
-            valid_target_types: [ tosca.capabilities.xos.VRouterPort ]
-
-    tosca.relationships.InterfaceOfPort:
-            derived_from: tosca.relationships.Root
-            valid_target_types: [ tosca.capabilities.xos.VRouterInterface ]
-
-    tosca.relationships.IpOfInterface:
-            derived_from: tosca.relationships.Root
-            valid_target_types: [ tosca.capabilities.xos.VRouterIp ]
\ No newline at end of file
diff --git a/xos/vrouter.yaml b/xos/vrouter.yaml
deleted file mode 100644
index 9e38417..0000000
--- a/xos/vrouter.yaml
+++ /dev/null
@@ -1,289 +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.
-
-
-tosca_definitions_version: tosca_simple_yaml_1_0
-
-# compile this with "m4 vrouter.m4 > vrouter.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.VRouterService:
-        derived_from: tosca.nodes.Root
-        description: >
-            CORD: The vRouter 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.
-            rest_hostname:
-                type: string
-                required: false
-            rest_port:
-                type: string
-                required: false
-            rest_user:
-                type: string
-                required: false
-            rest_pass:
-                type: string
-                required: false
-
-    tosca.nodes.VRouterDevice:
-        derived_from: tosca.nodes.Root
-        description: >
-            CORD: The vRouter Device.
-        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
-            openflow_id:
-                type: string
-                required: true
-            config_key:
-                type: string
-                required: false
-            driver:
-                type: string
-                required: true
-
-    tosca.nodes.VRouterPort:
-        derived_from: tosca.nodes.Root
-        description: >
-            CORD: The vRouter Port.
-        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
-            openflow_id:
-                type: string
-                required: true
-
-    tosca.nodes.VRouterInterface:
-        derived_from: tosca.nodes.Root
-        description: >
-            CORD: The vRouter Interface.
-        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
-            name:
-                type: string
-                required: true
-            mac:
-                type: string
-                required: true
-            vlan:
-                type: string
-                required: false
-
-    tosca.nodes.VRouterIp:
-        derived_from: tosca.nodes.Root
-        description: >
-            CORD: The vRouter Ip.
-        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
-            ip:
-                type: string
-                required: true
-
-    tosca.nodes.VRouterApp:
-        derived_from: tosca.nodes.Root
-        description: >
-            CORD: The vRouter ONOS App Config.
-        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
-            name:
-                type: string
-                required: true
-            control_plane_connect_point:
-                type: string
-                required: true
-            ospf_enabled:
-                type: boolean
-                required: true
-
-    tosca.relationships.PortOfDevice:
-            derived_from: tosca.relationships.Root
-            valid_target_types: [ tosca.capabilities.xos.VRouterPort ]
-
-    tosca.relationships.InterfaceOfPort:
-            derived_from: tosca.relationships.Root
-            valid_target_types: [ tosca.capabilities.xos.VRouterInterface ]
-
-    tosca.relationships.IpOfInterface:
-            derived_from: tosca.relationships.Root
-            valid_target_types: [ tosca.capabilities.xos.VRouterIp ]
\ No newline at end of file
