diff --git a/Dockerfile.synchronizer b/Dockerfile.synchronizer
index 378cc09..3585653 100644
--- a/Dockerfile.synchronizer
+++ b/Dockerfile.synchronizer
@@ -13,6 +13,7 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
+# docker build -t xosproject/volt-synchronizer:candidate -f Dockerfile.synchronizer .
 
 # xosproject/vrouter-synchronizer
 FROM xosproject/xos-synchronizer-base:candidate
diff --git a/README.md b/README.md
index 1a0bdf2..e231cd3 100644
--- a/README.md
+++ b/README.md
@@ -1,168 +1,7 @@
 # VRouter sample configuration via TOSCA
 
-The VRouter service can be configured via TOSCA using a similar recipe to define `devices, ports, interfaces and ips`:
-```
-service#vrouter:
-      type: tosca.nodes.VRouterService
-      properties:
-          view_url: /admin/vrouter/
-          no-delete: true
-          no-create: true
-          rest_hostname: onos-fabric
-          rest_port: 8181
-          rest_user: onos
-          rest_pass: rocks
-    
-    device#of:00000000000000b1:
-      type: tosca.nodes.VRouterDevice
-      properties:
-        openflow_id: of:00000000000000b1
-        driver: softrouter
-        # config_key: basic
-      requirements:
-        - service#vrouter:
-            node: service#vrouter
-            relationship: tosca.relationships.MemberOfService
+The repository contains the synchronizers to configure the ONOS vRouter component.
 
-    # Port 1
-    port#port1/1:
-      type: tosca.nodes.VRouterPort
-      properties:
-        openflow_id: of:00000000000000b1/1
-      requirements:
-        - device#of:00000000000000b1:
-            node: device#of:00000000000000b1
-            relationship: tosca.relationships.PortOfDevice
-        - service#vrouter:
-            node: service#vrouter
-            relationship: tosca.relationships.MemberOfService
+The code assumes that the vRouter service depends on the fabric service, which depends on the ONOS service.
 
-    interface#b1-1:
-      type: tosca.nodes.VRouterInterface
-      properties:
-        name: b1-1
-        mac: 00:00:00:00:00:01
-      requirements:
-        - port#port1/1:
-            node: port#port1/1
-            relationship: tosca.relationships.InterfaceOfPort
-
-    ips#10.0.1.2/24:
-      type: tosca.nodes.VRouterIp
-      properties:
-        ip: 10.0.1.2/24
-      requirements:
-        - interface#b1-1:
-            node: interface#b1-1
-            relationship: tosca.relationships.IpOfInterface
-
-    # Port 2
-    port#port1/2:
-      type: tosca.nodes.VRouterPort
-      properties:
-        openflow_id: of:00000000000000b1/2
-      requirements:
-        - device#of:00000000000000b1:
-            node: device#of:00000000000000b1
-            relationship: tosca.relationships.PortOfDevice
-        - service#vrouter:
-            node: service#vrouter
-            relationship: tosca.relationships.MemberOfService
-
-    interface#b1-2:
-      type: tosca.nodes.VRouterInterface
-      properties:
-        name: b1-2
-        mac: 00:00:00:00:00:01
-      requirements:
-        - port#port1/2:
-            node: port#port1/2
-            relationship: tosca.relationships.InterfaceOfPort
-
-    ips#10.0.2.2/24:
-      type: tosca.nodes.VRouterIp
-      properties:
-        ip: 10.0.2.2/24
-      requirements:
-        - interface#b1-1:
-            node: interface#b1-2
-            relationship: tosca.relationships.IpOfInterface
-
-    # Port 3
-    port#port1/3:
-      type: tosca.nodes.VRouterPort
-      properties:
-        openflow_id: of:00000000000000b1/3
-      requirements:
-        - device#of:00000000000000b1:
-            node: device#of:00000000000000b1
-            relationship: tosca.relationships.PortOfDevice
-        - service#vrouter:
-            node: service#vrouter
-            relationship: tosca.relationships.MemberOfService
-
-    interface#b1-3:
-      type: tosca.nodes.VRouterInterface
-      properties:
-        name: b1-3
-        mac: 00:00:00:00:00:01
-      requirements:
-        - port#port1/3:
-            node: port#port1/3
-            relationship: tosca.relationships.InterfaceOfPort
-
-    ips#10.0.3.2/24:
-      type: tosca.nodes.VRouterIp
-      properties:
-        ip: 10.0.3.2/24
-      requirements:
-        - interface#b1-1:
-            node: interface#b1-3
-            relationship: tosca.relationships.IpOfInterface
-
-    # Port 4
-    port#port1/4:
-      type: tosca.nodes.VRouterPort
-      properties:
-        openflow_id: of:00000000000000b1/4
-      requirements:
-        - device#of:00000000000000b1:
-            node: device#of:00000000000000b1
-            relationship: tosca.relationships.PortOfDevice
-        - service#vrouter:
-            node: service#vrouter
-            relationship: tosca.relationships.MemberOfService
-
-    interface#b1-4:
-      type: tosca.nodes.VRouterInterface
-      properties:
-        name: b1-4
-        mac: 00:00:00:00:00:01
-        vlan: 100
-      requirements:
-        - port#port1/4:
-            node: port#port1/4
-            relationship: tosca.relationships.InterfaceOfPort
-
-    ips#10.0.4.2/24:
-      type: tosca.nodes.VRouterIp
-      properties:
-        ip: 10.0.4.2/24
-      requirements:
-        - interface#b1-1:
-            node: interface#b1-4
-            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#vrouter:
-              node: service#vrouter
-              relationship: tosca.relationships.MemberOfService
-```
-
+For example, ONOS_Fabric -> Fabric -> vRouter
diff --git a/samples/vrouter.yaml b/samples/vrouter.yaml
new file mode 100644
index 0000000..78ccf00
--- /dev/null
+++ b/samples/vrouter.yaml
@@ -0,0 +1,38 @@
+# 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.
+
+# curl -H "xos-username: admin@opencord.org" -H "xos-password: letmein" -X POST --data-binary @vrouter.yaml http://192.168.99.100:30007/run
+
+tosca_definitions_version: tosca_simple_yaml_1_0
+imports:
+  - custom_types/vrouterserviceinstance.yaml
+  - custom_types/vrouterstaticroute.yaml
+description: Creates a vrouter and pushes a static route
+topology_template:
+  node_templates:
+    vrouter#my_vrouter:
+      type: tosca.nodes.VRouterServiceInstance
+      properties:
+        name: my_vrouter
+
+    # Add a static route to the vRouter
+    route#my_route:
+      type: tosca.nodes.VRouterStaticRoute
+      properties:
+        prefix: "0.0.0.0/0"
+        next_hop: "192.168.0.254"
+      requirements:
+        - vrouter:
+            node: vrouter#my_vrouter
+            relationship: tosca.relationships.BelongsToOne
diff --git a/xos/synchronizer/curl_sample.md b/xos/synchronizer/curl_sample.md
deleted file mode 100644
index 4675fd8..0000000
--- a/xos/synchronizer/curl_sample.md
+++ /dev/null
@@ -1,13 +0,0 @@
-# vRouter App
-
-## Configure vRouter App in ONOS
-`curl -H "Content-Type: application/json" -X POST -d '{"controlPlaneConnectPoint":"of:001/1", "ospfEnabled": "true", "interfaces": ["b1-1"]}' --user onos:rocks http://onos-fabric:8181/onos/v1/network/configuration/apps/org.onosproject.router/router/`
-
-## Delete vRotuer App config
-`curl -X DELETE --user onos:rocks http://onos-fabric:8181/onos/v1/network/configuration/apps/org.onosproject.router/router/`
-
-## Check vRotuer App config
-`curl --user onos:rocks http://onos-fabric:8181/onos/v1/network/configuration/apps/org.onosproject.router/router/`
-
-## Add Port
-`curl --user onos:rocks -H "Content-Type: application/json" -X POST -d {"of:000000000001/1": {"interfaces": [{"ips": ["10.0.4.2/24"], "mac": "00:00:00:00:00:01", "vlan": "100", "name": "b1-1"}]}} http://onos-fabric:8181/onos/v1/network/configuration/ports/`
\ No newline at end of file
diff --git a/xos/synchronizer/model-deps b/xos/synchronizer/model-deps
index 9e26dfe..0967ef4 100644
--- a/xos/synchronizer/model-deps
+++ b/xos/synchronizer/model-deps
@@ -1 +1 @@
-{}
\ No newline at end of file
+{}
diff --git a/xos/synchronizer/models/models.py b/xos/synchronizer/models/models.py
deleted file mode 100644
index 3acc198..0000000
--- a/xos/synchronizer/models/models.py
+++ /dev/null
@@ -1,155 +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.db import models
-from core.models import Service, XOSBase, Slice, Instance, ServiceInstance, Node, Image, User, Flavor, NetworkParameter, NetworkParameterType, Port, AddressPool
-from core.models.xosbase 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
-import traceback
-from xos.exceptions import *
-from models_decl import *
-
-
-class ConfigurationError(Exception):
-    pass
-
-
-class VRouterService (VRouterService_decl):
-    class Meta:
-        proxy = True
-
-    def ip_to_mac(self, ip):
-        (a, b, c, d) = ip.split('.')
-        return "02:42:%02x:%02x:%02x:%02x" % (int(a), int(b), int(c), int(d))
-
-    def get_gateways(self):
-        gateways = []
-        aps = self.addresspools.all()
-        for ap in aps:
-            gateways.append({"gateway_ip": ap.gateway_ip, "gateway_mac": ap.gateway_mac})
-
-        return gateways
-
-    def get_address_pool(self, name):
-        ap = AddressPool.objects.filter(name=name, service=self)
-        if not ap:
-            raise Exception("vRouter unable to find addresspool %s" % name)
-        return ap[0]
-
-    def get_tenant(self, **kwargs):
-        address_pool_name = kwargs.pop("address_pool_name")
-
-        ap = self.get_address_pool(address_pool_name)
-
-        ip = ap.get_address()
-        if not ip:
-            raise Exception("AddressPool '%s' has run out of addresses." % ap.name)
-
-        t = VRouterTenant(owner=self, **kwargs)
-        t.public_ip = ip
-        t.public_mac = self.ip_to_mac(ip)
-        t.address_pool_id = ap.id
-        t.save()
-
-        return t
-
-
-class VRouterDevice (VRouterDevice_decl):
-
-    class Meta:
-        proxy = True
-    pass
-
-class VRouterPort (VRouterPort_decl):
-
-    class Meta:
-        proxy = True
-    pass
-
-class VRouterApp (VRouterApp_decl):
-
-    class Meta:
-        proxy = True
-    def _get_interfaces(self):
-        app_interfaces = []
-        devices = VRouterDevice.objects.filter(vrouter_service=self.vrouter_service)
-        for device in devices:
-            ports = VRouterPort.objects.filter(vrouter_device=device.id)
-            for port in ports:
-                interfaces = VRouterInterface.objects.filter(vrouter_port=port.id)
-                for iface in interfaces:
-                    app_interfaces.append(iface.name)
-        return app_interfaces
-
-class VRouterInterface (VRouterInterface_decl):
-
-    class Meta:
-        proxy = True
-    pass
-
-class VRouterIp (VRouterIp_decl):
-
-    class Meta:
-        proxy = True
-    pass
-
-class VRouterTenant (VRouterTenant_decl):
-
-    class Meta:
-        proxy = True
-    @property
-    def gateway_ip(self):
-        if not self.address_pool:
-            return None
-        return self.address_pool.gateway_ip
-
-    @property
-    def gateway_mac(self):
-        if not self.address_pool:
-            return None
-        return self.address_pool.gateway_mac
-
-    @property
-    def cidr(self):
-        if not self.address_pool:
-            return None
-        return self.address_pool.cidr
-
-    @property
-    def netbits(self):
-        # return number of bits in the network portion of the cidr
-        if self.cidr:
-            parts = self.cidr.split("/")
-            if len(parts) == 2:
-                return int(parts[1].strip())
-        return None
-
-    def cleanup_addresspool(self):
-        if self.address_pool:
-            ap = self.address_pool
-            if ap:
-                ap.put_address(self.public_ip)
-                self.public_ip = None
-
-    def delete(self, *args, **kwargs):
-        self.cleanup_addresspool()
-        super(VRouterTenant, self).delete(*args, **kwargs)
-
diff --git a/xos/synchronizer/models/vrouter.xproto b/xos/synchronizer/models/vrouter.xproto
index 0a68a63..006ecb9 100644
--- a/xos/synchronizer/models/vrouter.xproto
+++ b/xos/synchronizer/models/vrouter.xproto
@@ -1,67 +1,23 @@
 option kind="vROUTER";
 option name="vrouter";
-option legacy="True";
 option app_label = "vrouter";
 
-message VRouterService (Service){
-     option verbose_name="vRouter Service";
-
-     optional string rest_hostname = 1 [db_index = False, max_length = 255, null = True, content_type = "stripped", blank = True];
-     required int32 rest_port = 2 [default = 8181, null = False, db_index = False, blank = False];
-     required string rest_user = 3 [default = "onos", max_length = 255, content_type = "stripped", blank = False, null = False, db_index = False];
-     required string rest_pass = 4 [default = "rocks", max_length = 255, content_type = "stripped", blank = False, null = False, db_index = False];
+message VRouterService (Service) {
+    option verbose_name = "vRouter Service";
 }
 
-message VRouterDevice (XOSBase){
-     option verbose_name="vRouter Device";
+message VRouterServiceInstance (ServiceInstance) {
+    option verbose_name = "vRouter Service Instance";
+    option owner_class_name = "VRouterService";
 
-     optional string name = 1 [help_text = "device friendly name", max_length = 20, null = True, db_index = False, blank = True];
-     required string openflow_id = 2 [help_text = "device identifier in ONOS", max_length = 20, null = False, db_index = False, blank = False];
-     required string config_key = 3 [default = "basic", max_length = 32, blank = False, help_text = "configuration key", null = False, db_index = False];
-     required string driver = 4 [help_text = "driver type", max_length = 32, null = False, db_index = False, blank = False];
-     required manytoone vrouter_service->VRouterService:devices = 5 [db_index = True, null = False, blank = False];
+    // TODO - to be added to select interfaces the vrouter attaches to (use _decl)
+    // required manytoone interface->PortInterface:vrouters = 1 [help_text = "The fabric port interface to which the router is connected to", db_index = False, null = False, blank = False];
 }
 
-message VRouterPort (XOSBase){
-     option verbose_name="vRouter Port";
+message VRouterStaticRoute (XOSBase) {
+    option verbose_name = "vRouter static route";
 
-     optional string name = 1 [help_text = "port friendly name", max_length = 20, null = True, db_index = False, blank = True];
-     required string openflow_id = 2 [help_text = "port identifier in ONOS", max_length = 21, null = False, db_index = False, blank = False];
-     required manytoone vrouter_device->VRouterDevice:ports = 3 [db_index = True, null = False, blank = False];
-     required manytoone vrouter_service->VRouterService:device_ports = 4 [db_index = True, null = False, blank = False];
-}
-
-message VRouterApp (XOSBase){
-     option verbose_name="vRouter App";
-
-     required manytoone vrouter_service->VRouterService:apps = 1 [db_index = True, null = False, blank = False];
-     required string name = 2 [help_text = "application name", max_length = 50, null = False, db_index = False, blank = False];
-     required string control_plane_connect_point = 3 [help_text = "port identifier in ONOS", max_length = 21, null = False, db_index = False, blank = False];
-     required bool ospf_enabled = 4 [help_text = "ospf enabled", default = True, null = False, db_index = False, blank = True];
-}
-
-message VRouterInterface (XOSBase) {
-     option verbose_name="vRouter Interface";
-
-     required manytoone vrouter_port->VRouterPort:interfaces = 1 [db_index = True, null = False, blank = False];
-     required string name = 2 [help_text = "interface name", max_length = 10, null = False, db_index = False, blank = False];
-     required string mac = 3 [help_text = "interface mac", max_length = 17, null = False, db_index = False, blank = False];
-     optional string vlan = 4 [help_text = "interface vlan id", max_length = 10, null = True, db_index = False, blank = True];
-}
-
-message VRouterIp (XOSBase){
-     option verbose_name="vRouter Ip";
-
-     optional string name = 1 [help_text = "ip friendly name", max_length = 20, null = True, db_index = False, blank = True];
-     required manytoone vrouter_interface->VRouterInterface:ips = 2 [db_index = True, null = False, blank = False];
-     required string ip = 3 [help_text = "interface ips", max_length = 19, null = False, db_index = False, blank = False];
-}
-
-message VRouterTenant (ServiceInstance){
-     option verbose_name="vRouter Tenant";
-     option owner_class_name="VRouterService";
-
-     optional string public_ip = 1 [db_index = False, max_length = 30, null = True, content_type = "stripped", blank = True];
-     optional string public_mac = 2 [db_index = False, max_length = 30, null = True, content_type = "stripped", blank = True];
-     optional manytoone address_pool->AddressPool:vrouter_tenants = 3 [db_index = True, null = True, blank = True];
+    required manytoone vrouter->VRouterServiceInstance:static_routes = 1 [help_text = "The static route to be configured in ONOS", db_index = False, null = False, blank = False];
+    required string prefix = 2 [help_text = "The destination prefix and netmask (xxx.yyy.www.zzz/nm)", max_length = 20, null = False, tosca_key = True, db_index = False, unique = True, blank = False];
+    required string next_hop = 5 [help_text = "The next-hop for the route", max_length = 17, null = False, db_index = False, blank = False];
 }
diff --git a/xos/synchronizer/steps/helpers.py b/xos/synchronizer/steps/helpers.py
new file mode 100644
index 0000000..63585aa
--- /dev/null
+++ b/xos/synchronizer/steps/helpers.py
@@ -0,0 +1,30 @@
+# 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.
+
+class Helpers():
+    @staticmethod
+    def format_url(url):
+        if 'http' in url:
+            return url
+        else:
+            return 'http://%s' % url
+
+    @staticmethod
+    def get_onos_info(onos_service):
+        return {
+            'url': Helpers.format_url(onos_service.rest_hostname),
+            'port': onos_service.rest_port,
+            'user': onos_service.rest_username,
+            'pass': onos_service.rest_password
+        }
diff --git a/xos/synchronizer/steps/sync_routes.py b/xos/synchronizer/steps/sync_routes.py
new file mode 100644
index 0000000..5086933
--- /dev/null
+++ b/xos/synchronizer/steps/sync_routes.py
@@ -0,0 +1,83 @@
+
+# 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.
+
+import requests
+from requests.auth import HTTPBasicAuth
+from synchronizers.new_base.syncstep import SyncStep, DeferredException
+from synchronizers.new_base.modelaccessor import VRouterStaticRoute
+
+from helpers import Helpers
+from multistructlog import create_logger
+from xosconfig import Config
+
+log = create_logger(Config().get('logging'))
+
+class SyncRoutes(SyncStep):
+    provides = [VRouterStaticRoute]
+    observes = VRouterStaticRoute
+
+    # Get fabric service info
+    def get_onos_fabric_service(self, model):
+        vrouter_service = model.vrouter.owner
+        fabric_service = vrouter_service.subscriber_services[0]
+        onos_fabric_service = fabric_service.subscriber_services[0]
+
+        return onos_fabric_service
+
+    def sync_record(self, model):
+        onos_fabric_service = self.get_onos_fabric_service(model)
+
+        onos = Helpers.get_onos_info(onos_fabric_service.leaf_model)
+        onos_basic_auth = HTTPBasicAuth(onos['user'], onos['pass'])
+
+        data = {
+          "prefix": model.prefix,
+          "nextHop": model.next_hop
+        }
+
+        url = '%s:%s/onos/routeservice/routes' % (onos['url'], onos['port'])
+        request = requests.post(url, json=data, auth=onos_basic_auth)
+
+        if request.status_code != 204:
+            log.error("Request failed", response=request.text)
+            raise Exception("Failed to add static route %s via %s in ONOS" % (model.prefix, model.next_hop))
+        else:
+            try:
+                print request.json()
+            except Exception:
+                print request.text
+
+    def delete_record(self, model):
+        onos_fabric_service = self.get_onos_fabric_service(model)
+
+        onos = Helpers.get_onos_info(onos_fabric_service.leaf_model)
+        onos_basic_auth = HTTPBasicAuth(onos['user'], onos['pass'])
+
+        data = {
+          "prefix": model.prefix,
+          "nextHop": model.next_hop
+        }
+
+        url = '%s:%s/onos/routeservice/routes' % (onos['url'], onos['port'])
+        request = requests.delete(url, json=data, auth=onos_basic_auth)
+
+        if request.status_code != 204:
+            log.error("Request failed", response=request.text)
+            raise Exception("Failed to delete static route %s via %s in ONOS" % (model.prefix, model.next_hop))
+        else:
+            try:
+                print request.json()
+            except Exception:
+                print request.text
diff --git a/xos/synchronizer/steps/sync_vrouterapp.py b/xos/synchronizer/steps/sync_vrouterapp.py
deleted file mode 100644
index 6c83700..0000000
--- a/xos/synchronizer/steps/sync_vrouterapp.py
+++ /dev/null
@@ -1,85 +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.
-
-
-import os
-import sys
-import requests
-import json
-from synchronizers.new_base.syncstep import SyncStep
-from synchronizers.new_base.modelaccessor import *
-from xos.logger import Logger, logging
-
-from requests.auth import HTTPBasicAuth
-logger = Logger(level=logging.INFO)
-
-
-class SyncVRouterApp(SyncStep):
-    provides = [VRouterApp]
-
-    observes = VRouterApp
-
-    requested_interval = 0
-
-    def __init__(self, *args, **kwargs):
-        super(SyncVRouterApp, self).__init__(*args, **kwargs)
-
-    def get_onos_fabric_addr(self, app):
-        vrouter_service = VRouterService.objects.get(id=app.vrouter_service_id)
-
-        return "http://%s:%s/onos/v1/network/configuration/" % (vrouter_service.rest_hostname, vrouter_service.rest_port)
-
-    def get_onos_fabric_auth(self, app):
-        vrouter_service = VRouterService.objects.get(id=app.vrouter_service_id)
-
-        return HTTPBasicAuth(vrouter_service.rest_user, vrouter_service.rest_pass)
-
-    def sync_record(self, app):
-
-        logger.info("Sync'ing Edited vRouterApps: %s" % app.name)
-
-        onos_addr = self.get_onos_fabric_addr(app)
-
-        data = {}
-        data["controlPlaneConnectPoint"] = app.control_plane_connect_point
-        data["ospfEnabled"] = app.ospf_enabled
-        data["interfaces"] = app.interfaces
-
-        url = onos_addr + "apps/" + app.name + "/router/"
-
-        print "POST %s for app %s" % (url, app.name)
-
-        # XXX fixme - hardcoded auth
-        auth = self.get_onos_fabric_auth(app)
-        r = requests.post(url, data=json.dumps(data), auth=auth)
-        if (r.status_code != 200):
-            print r
-            raise Exception("Received error from vrouter app update (%d)" % r.status_code)
-
-    def delete_record(self, app):
-
-        logger.info("Sync'ing Deleted vRouterApps: %s" % app.name)
-
-        onos_addr = self.get_onos_fabric_addr()
-
-        url = onos_addr + "apps/" + app.name + "/"
-
-        print "DELETE %s for app %s" % (url, app.name)
-
-        auth = self.get_onos_fabric_auth(app)
-        r = requests.delete(url, auth=auth)
-        if (r.status_code != 204):
-            print r
-            raise Exception("Received error from vrouter app deletion (%d)" % r.status_code)
\ No newline at end of file
diff --git a/xos/synchronizer/steps/sync_vrouterdevice.py b/xos/synchronizer/steps/sync_vrouterdevice.py
deleted file mode 100644
index 179ec91..0000000
--- a/xos/synchronizer/steps/sync_vrouterdevice.py
+++ /dev/null
@@ -1,82 +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.
-
-
-import os
-import sys
-import requests
-import json
-from synchronizers.new_base.syncstep import SyncStep
-from synchronizers.new_base.modelaccessor import *
-from xos.logger import Logger, logging
-
-from requests.auth import HTTPBasicAuth
-logger = Logger(level=logging.INFO)
-
-
-class SyncVRouterDevice(SyncStep):
-    provides = [VRouterDevice]
-
-    observes = VRouterDevice
-
-    requested_interval = 0
-
-    def __init__(self, *args, **kwargs):
-        super(SyncVRouterDevice, self).__init__(*args, **kwargs)
-
-    def get_onos_fabric_addr(self, app):
-        vrouter_service = VRouterService.objects.get(id=app.vrouter_service_id)
-
-        return "http://%s:%s/onos/v1/network/configuration/" % (vrouter_service.rest_hostname, vrouter_service.rest_port)
-
-    def get_onos_fabric_auth(self, app):
-        vrouter_service = VRouterService.objects.get(id=app.vrouter_service_id)
-
-        return HTTPBasicAuth(vrouter_service.rest_user, vrouter_service.rest_pass)
-
-    def sync_record(self, device):
-
-        logger.info("Sync'ing Edited vRouterDevice: %s" % device.name)
-
-        onos_addr = self.get_onos_fabric_addr(device)
-
-        data = {}
-        data["driver"] = device.driver
-
-        url = onos_addr + "devices/" + device.openflow_id + "/" + device.config_key + "/"
-
-        print "POST %s for device %s" % (url, device.name)
-
-        auth = self.get_onos_fabric_auth(device)
-        r = requests.post(url, data=json.dumps(data), auth=auth)
-        if (r.status_code != 200):
-            print r
-            raise Exception("Received error from vrouter device update (%d)" % r.status_code)
-
-    def delete_record(self, device):
-
-        logger.info("Sync'ing Deleted vRouterDevice: %s" % device.name)
-
-        onos_addr = self.get_onos_fabric_addr()
-
-        url = onos_addr + "devices/" + device.openflow_id + "/"
-
-        print "DELETE %s for device %s" % (url, device.name)
-
-        auth = self.get_onos_fabric_auth(device)
-        r = requests.delete(url, auth=auth)
-        if (r.status_code != 204):
-            print r
-            raise Exception("Received error from vrouter device deletion (%d)" % r.status_code)
\ No newline at end of file
diff --git a/xos/synchronizer/steps/sync_vrouterports.py b/xos/synchronizer/steps/sync_vrouterports.py
deleted file mode 100644
index fe8eb1c..0000000
--- a/xos/synchronizer/steps/sync_vrouterports.py
+++ /dev/null
@@ -1,105 +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.
-
-
-import os
-import sys
-import requests
-import json
-import urllib
-from synchronizers.new_base.syncstep import SyncStep
-from synchronizers.new_base.modelaccessor import *
-from xos.logger import Logger, logging
-
-from requests.auth import HTTPBasicAuth
-logger = Logger(level=logging.INFO)
-
-
-class SyncVRouterPort(SyncStep):
-    provides = [VRouterPort]
-
-    observes = VRouterPort
-
-    requested_interval = 0
-
-    def __init__(self, *args, **kwargs):
-        super(SyncVRouterPort, self).__init__(*args, **kwargs)
-
-    def get_onos_fabric_addr(self, app):
-        vrouter_service = VRouterService.objects.get(id=app.vrouter_service_id)
-
-        return "http://%s:%s/onos/v1/network/configuration/" % (vrouter_service.rest_hostname, vrouter_service.rest_port)
-
-    def get_onos_fabric_auth(self, app):
-        vrouter_service = VRouterService.objects.get(id=app.vrouter_service_id)
-
-        return HTTPBasicAuth(vrouter_service.rest_user, vrouter_service.rest_pass)
-
-    def sync_record(self, port):
-
-        logger.info("Sync'ing Edited vRouterPort: %s" % port.name)
-
-        # NOTE port is now related to service,
-        # probably it makes more sense to relate them to a device (and device is related to service)
-        onos_addr = self.get_onos_fabric_addr(port)
-
-        # NOTE
-        # from a port read all interfaces
-        # from interfaces read all ips
-
-        ifaces = []
-        for interface in port.interfaces.all():
-            iface = {
-                'name': interface.name,
-                'mac': interface.mac,
-                'vlan': interface.vlan,
-                'ips': []
-            }
-
-            for ip in interface.ips.all():
-                iface["ips"].append(ip.ip)
-
-            ifaces.append(iface)
-
-        data = {}
-        data[port.openflow_id] = {
-            'interfaces': ifaces
-        }
-
-        url = onos_addr + "ports/"
-
-        print "POST %s for port %s" % (url, port.name)
-
-        auth = self.get_onos_fabric_auth(port)
-        r = requests.post(url, data=json.dumps(data), auth=auth)
-        if (r.status_code != 200):
-            print r
-            raise Exception("Received error from vrouter port update (%d)" % r.status_code)
-
-    def delete_record(self, port):
-
-        logger.info("Sync'ing Deleted vRouterPort: %s" % port.name)
-
-        onos_addr = self.get_onos_fabric_addr()
-
-        url = onos_addr + "ports/" + urllib.quote(port.openflow_id, safe='') + "/"
-
-        print "DELETE %s for port %s" % (url, port.name)
-
-        auth = self.get_onos_fabric_auth(port)
-        r = requests.delete(url, auth=auth)
-        if (r.status_code != 204):
-            print r
-            raise Exception("Received error from vrouter port deletion (%d)" % r.status_code)
\ No newline at end of file
diff --git a/xos/synchronizer/vrouter-synchronizer.py b/xos/synchronizer/vrouter-synchronizer.py
index fa88098..924f008 100644
--- a/xos/synchronizer/vrouter-synchronizer.py
+++ b/xos/synchronizer/vrouter-synchronizer.py
@@ -27,8 +27,7 @@
 
 Config.init(config_file, 'synchronizer-config-schema.yaml')
 
-synchronizer_path = os.path.join(os.path.dirname(
-    os.path.realpath(__file__)), "../../synchronizers/new_base")
+synchronizer_path = os.path.join(os.path.dirname(os.path.realpath(__file__)), "../../synchronizers/new_base")
 sys.path.append(synchronizer_path)
 mod = importlib.import_module("xos-synchronizer")
 mod.main()
diff --git a/xos/synchronizer/vrouter_config.yaml b/xos/synchronizer/vrouter_config.yaml
index 7fe4f18..274ba24 100644
--- a/xos/synchronizer/vrouter_config.yaml
+++ b/xos/synchronizer/vrouter_config.yaml
@@ -20,9 +20,7 @@
   password: "@/opt/xos/services/vrouter/credentials/xosadmin@opencord.org"
 required_models:
   - VRouterService
-  - VRouterDevice
-  - VRouterApp
-  - VRouterPort
+  - VRouterServiceInstance
 dependency_graph: "/opt/xos/synchronizers/vrouter/model-deps"
 steps_dir: "/opt/xos/synchronizers/vrouter/steps"
 sys_dir: "/opt/xos/synchronizers/vrouter/sys"
