diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..e1591ca
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,13 @@
+
+ISVENV := $(shell python -c 'import sys; print ("1" if hasattr(sys, "real_prefix") else "0")')
+
+build:
+	docker build -t xosproject/volt-synchronizer:candidate -f xos/synchronizer/Dockerfile.synchronizer ./xos/synchronizer/
+
+test:
+ifeq ($(ISVENV), 1)
+	pip install requests-mock
+	pushd xos/synchronizer/steps/; nosetests test_sync_olt_device.py; popd;
+else
+	@echo "Please activate the virtualenv and the required libraries, you can do that using the 'scripts/setup_venv.sh' tool in the 'xos' repo"
+endif
diff --git a/samples/README.md b/samples/README.md
new file mode 100644
index 0000000..da8db0e
--- /dev/null
+++ b/samples/README.md
@@ -0,0 +1,4 @@
+# Setup the vOLT Service to work with VOLTHA
+
+The TOSCA recipes in this directory are intended to support development,
+but they can be used as a starting point to configure a real deployment. 
\ No newline at end of file
diff --git a/samples/olt_device.yaml b/samples/olt_device.yaml
new file mode 100644
index 0000000..e5e898c
--- /dev/null
+++ b/samples/olt_device.yaml
@@ -0,0 +1,41 @@
+# 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 @olt_device.yaml http://192.168.99.100:30007/run
+
+tosca_definitions_version: tosca_simple_yaml_1_0
+imports:
+  - custom_types/oltdevice.yaml
+  - custom_types/voltservice.yaml
+description: Create a simulated OLT Device in VOLTHA
+topology_template:
+  node_templates:
+
+    service#volt:
+      type: tosca.nodes.VOLTService
+      properties:
+        name: volt
+        must-exist: true
+
+    device#olt:
+      type: tosca.nodes.OLTDevice
+      properties:
+        name: test_olt
+        device_type: simulated_olt
+        host: 172.17.0.1
+        port: 50060
+      requirements:
+        - volt_service:
+            node: service#volt
+            relationship: tosca.relationships.BelongsToOne
diff --git a/samples/volt_service.yaml b/samples/volt_service.yaml
new file mode 100644
index 0000000..e0a3b93
--- /dev/null
+++ b/samples/volt_service.yaml
@@ -0,0 +1,31 @@
+# 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 @volt_service.yaml http://192.168.99.100:30007/run
+
+tosca_definitions_version: tosca_simple_yaml_1_0
+imports:
+  - custom_types/voltservice.yaml
+description: Updates the existing vOLT service with deployment specific data
+topology_template:
+  node_templates:
+    service#volt:
+      type: tosca.nodes.VOLTService
+      properties:
+        name: volt
+        must-exist: true
+        voltha_url: 10.128.22.3:8882
+        p_onos_url: 192.168.99.100:31181
+        p_onos_user: karaf
+        p_onos_pass: karaf
diff --git a/xos/synchronizer/models/volt.xproto b/xos/synchronizer/models/volt.xproto
index 68c4352..651957e 100644
--- a/xos/synchronizer/models/volt.xproto
+++ b/xos/synchronizer/models/volt.xproto
@@ -4,6 +4,15 @@
 message VOLTService (Service){
     option verbose_name = "vOLT Service";
     option kind = "vOLT";
+
+    required string voltha_url = 2 [max_length = 254, null = False, db_index = False, blank = False];
+    optional string voltha_user = 3 [max_length = 254, null = True, db_index = False, blank = True];
+    optional string voltha_pass = 4 [max_length = 254, null = True, db_index = False, blank = True];
+    required string p_onos_url = 5 [max_length = 254, null = False, db_index = False, blank = False];
+    optional string p_onos_user = 6 [max_length = 254, null = True, db_index = False, blank = True];
+    optional string p_onos_pass = 7 [max_length = 254, null = True, db_index = False, blank = True];
+
+    required string onu_provisioning = 8 [default = "allow_all", choices = "(('allow_all', 'Allow All'), ('pre_provisioned', 'Pre-provisione'), ('oss', 'OSS'))", null = False, db_index = False, blank = False];
 }
 
 message VOLTServiceInstance (ServiceInstance){
@@ -11,25 +20,42 @@
     option owner_class_name = "VOLTService";
     option verbose_name = "vOLT Service Instance";
 
-    required string onu_type = 2 [help_text = "ONU Type", default = "v-ontani", null = False, db_index = False, blank = False];
-    optional string description = 3 [max_length = 254, null = True, db_index = False, blank = True];
+    optional string description = 1 [max_length = 254, null = True, db_index = False, blank = True];
 }
 
-message VOLTDevice (XOSBase){
-    option verbose_name = "vOLT Device";
+message OLTDevice (XOSBase){
+    option verbose_name = "OLT Device";
+    option description="Represents a physical OLT device";
 
     required manytoone volt_service->VOLTService:volt_devices = 1 [db_index = True, null = False, blank = False];
     required string name = 2 [help_text = "name of device", max_length = 254, null = False, db_index = False, blank = False];
-    required string device_id = 3 [help_text = "Device ID", max_length = 254, null = False, db_index = False, blank = False];
-    required string device_type = 4 [help_text = "Device Type", default = "asfvolt16_olt", max_length = 254, null = False, db_index = False, blank = False];
-    required string host = 5 [help_text = "Host", max_length = 254, null = False, db_index = False, blank = False];
-    required int32 port = 6 [help_text = "Fabric port", null = False, db_index = False, blank = False];
+    required string device_type = 3 [help_text = "Device Type", default = "asfvolt16_olt", max_length = 254, null = False, db_index = False, blank = False];
+    required string host = 4 [help_text = "Host", max_length = 254, null = False, db_index = False, blank = False];
+    required int32 port = 5 [help_text = "Fabric port", null = False, db_index = False, blank = False];
+
+    optional string device_id = 10 [help_text = "Device ID", null = True, db_index = False, blank = False, feedback_state = True];
+    optional string admin_state = 11 [help_text = "admin_state", null = True, db_index = False, blank = False, feedback_state = True];
+    optional string oper_status = 12 [help_text = "oper_status", null = True, db_index = False, blank = False, feedback_state = True];
+    optional string of_id = 13 [help_text = "openflow id", null = True, db_index = False, blank = False, feedback_state = True];
+
+    required string uplink = 14 [default="129", help_text = "uplink port", null = False, db_index = False, blank = False];
+    required string vlan = 15 [default="3", help_text = "same as S-Tag", null = True, db_index = False, blank = False];
+    required string driver = 16 [default="pmc-olt", help_text = "Olt driver", null = True, db_index = False, blank = False];
 }
 
-message VOLTDevicePort (XOSBase){
-    option verbose_name = "vOLT Device Port";
+message ONUDevice (XOSBase){
+    option verbose_name = "ONU Device";
+    option description = "Represents a physical ONU device";
 
-    required manytoone volt_device->VOLTDevice:ports = 1 [db_index = True, null = False, blank = False];
-    required string port_id = 2 [help_text = "Port ID", max_length = 254, null = False, db_index = False, blank = False, tosca_key = True];
-    required int32 s_tag = 3 [help_text = "S Tag", null = False, db_index = False, blank = False];
+    required manytoone volt_device->OLTDevice:onu_devices = 1 [db_index = True, null = False, blank = False];
+    required string serial_number = 1 [max_length = 254, null = False, db_index = False, blank = False];
+}
+
+message PONPort (XOSBase){
+    option verbose_name = "PON Port";
+
+    required string name = 1 [db_index = True, null = False, blank = False];
+    required manytoone volt_device->OLTDevice:ports = 2 [db_index = True, null = False, blank = False];
+    required string port_id = 3 [help_text = "Port ID (Feedback State)", max_length = 254, null = False, db_index = False, blank = False, tosca_key = True];
+    required int32 s_tag = 4 [help_text = "S Tag", null = False, db_index = False, blank = False];
 }
diff --git a/xos/synchronizer/pull_steps/pull_olts.py b/xos/synchronizer/pull_steps/pull_olts.py
new file mode 100644
index 0000000..3ab76e0
--- /dev/null
+++ b/xos/synchronizer/pull_steps/pull_olts.py
@@ -0,0 +1,28 @@
+# Copyright 2017-present Open Networking Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+from synchronizers.new_base.pullstep import PullStep
+from synchronizers.new_base.modelaccessor import OLTDevice
+
+from xosconfig import Config
+from multistructlog import create_logger
+
+log = create_logger(Config().get('logging'))
+
+class OLTDevicePullStep(PullStep):
+    def __init__(self):
+        super(OLTDevicePullStep, self).__init__(observed_model=OLTDevice)
+
+    def pull_records(self):
+        log.info("pulling OLT devices from VOLTHA")
diff --git a/xos/synchronizer/steps/sync_olt_device.py b/xos/synchronizer/steps/sync_olt_device.py
new file mode 100644
index 0000000..591f7f9
--- /dev/null
+++ b/xos/synchronizer/steps/sync_olt_device.py
@@ -0,0 +1,182 @@
+# 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 json
+from synchronizers.new_base.SyncInstanceUsingAnsible import SyncStep
+from synchronizers.new_base.modelaccessor import OLTDevice
+
+from xosconfig import Config
+from multistructlog import create_logger
+from time import sleep
+import requests
+from requests.auth import HTTPBasicAuth
+
+log = create_logger(Config().get('logging'))
+
+class SyncOLTDevice(SyncStep):
+    provides = [OLTDevice]
+
+    observes = OLTDevice
+
+    @staticmethod
+    def format_url(url):
+        if 'http' in url:
+            return url
+        else:
+            return 'http://%s' % url
+
+    @staticmethod
+    def get_voltha_info(o):
+        return {
+            'url': SyncOLTDevice.format_url(o.volt_service.voltha_url),
+            'user': o.volt_service.voltha_user,
+            'pass': o.volt_service.voltha_pass
+        }
+
+    @staticmethod
+    def get_p_onos_info(o):
+        return {
+            'url': SyncOLTDevice.format_url(o.volt_service.p_onos_url),
+            'user': o.volt_service.p_onos_user,
+            'pass': o.volt_service.p_onos_pass
+        }
+
+    @staticmethod
+    def get_of_id_from_device(o):
+        voltha_url = SyncOLTDevice.get_voltha_info(o)['url']
+
+        r = requests.get(voltha_url + "/api/v1/logical_devices")
+
+        if r.status_code != 200:
+            raise Exception("Failed to retrieve logical devices from VOLTHA: %s" % r.text)
+
+        res = r.json()
+
+        for ld in res["items"]:
+            if ld["root_device_id"] == o.device_id:
+                return ld["id"]
+        raise Exception("Can't find a logical device for device id: %s" % o.device_id)
+
+
+    def sync_record(self, o):
+        log.info("sync'ing device", object=str(o), **o.tologdict())
+
+        voltha_url = self.get_voltha_info(o)['url']
+
+        data = {
+            "type": o.device_type,
+            "host_and_port": "%s:%s" % (o.host, o.port)
+        }
+
+        if o.device_type == 'simulated_olt':
+            # simulated devices won't accept host and port, for testing only
+            data.pop('host_and_port')
+            data['mac_address'] = "00:0c:e2:31:40:00"
+
+        log.info("pushing olt to voltha", data=data)
+
+        r = requests.post(voltha_url + "/api/v1/devices", json=data)
+
+        if r.status_code != 200:
+            raise Exception("Failed to add device: %s" % r.text)
+
+        log.info("add device response", text=r.text)
+
+        res = r.json()
+
+        print log.info("add device json res", res=res)
+
+        if not res['id']:
+            raise Exception('VOLTHA Device Id is empty, this probably means that the device is already provisioned in VOLTHA')
+        else:
+            o.device_id = res['id'];
+
+        # enable device
+
+        r = requests.post(voltha_url + "/api/v1/devices/" + o.device_id + "/enable")
+
+        if r.status_code != 200:
+            raise Exception("Failed to enable device: %s" % r.text)
+
+        # read state
+        r = requests.get(voltha_url + "/api/v1/devices/" + o.device_id).json()
+        while r['oper_status'] == "ACTIVATING":
+            log.info("Waiting for device %s (%s) to activate" % (o.name, o.device_id))
+            sleep(5)
+            r = requests.get(voltha_url + "/api/v1/devices/" + o.device_id).json()
+
+        o.admin_state = r['admin_state']
+        o.oper_status = r['oper_status']
+
+        # find of_id of device
+        o.of_id = self.get_of_id_from_device(o)
+        o.save()
+
+        # add device info to P-ONOS
+        data = {
+          "devices": {
+            o.of_id: {
+              "basic": {
+                "driver": o.driver
+              },
+              "accessDevice": {
+                "uplink": o.uplink,
+                "vlan": o.vlan
+              }
+            }
+          }
+        }
+
+        onos= self.get_p_onos_info(o)
+
+        r = requests.post(onos['url'] + '/onos/v1/network/configuration/', data=json.dumps(data), auth=HTTPBasicAuth(onos['user'], onos['pass']))
+
+        if r.status_code != 200:
+            log.error(r.text)
+            raise Exception("Failed to add device %s into ONOS" % o.name)
+        else:
+            try:
+                print r.json()
+            except Exception:
+                print r.text
+
+    def delete_record(self, o):
+
+        voltha_url = self.get_voltha_info(o)['url']
+        onos = self.get_p_onos_info(o)
+        if not o.device_id:
+            log.error("Device %s has no device_id" % o.name)
+
+        else:
+
+            # remove the device from ONOS
+            r = requests.delete(onos['url'] + '/onos/v1/network/configuration/devices/' + o.of_id, auth=HTTPBasicAuth(onos['user'], onos['pass']))
+
+            if r.status_code != 200:
+                log.error("Failed to remove device from ONOS: %s - %s" % (o.name, o.of_id), rest_responese=r.text, rest_status_code=r.status_code)
+                raise Exception("Failed to remove device in ONOS")
+
+            # disable the device
+            r = requests.post(voltha_url + "/api/v1/devices/" + o.device_id + "/disable")
+
+            if r.status_code != 200:
+                log.error("Failed to disable device in VOLTHA: %s - %s" % (o.name, o.device_id), rest_responese=r.text, rest_status_code=r.status_code)
+                raise Exception("Failed to disable device in VOLTHA")
+
+            # delete the device
+            r = requests.delete(voltha_url + "/api/v1/devices/" + o.device_id + "/delete")
+
+            if r.status_code != 200:
+                log.error("Failed to delete device in VOLTHA: %s - %s" % (o.name, o.device_id), rest_responese=r.text, rest_status_code=r.status_code)
+                raise Exception("Failed to delete device in VOLTHA")
diff --git a/xos/synchronizer/steps/sync_volt_service.py b/xos/synchronizer/steps/sync_volt_service.py
new file mode 100644
index 0000000..cae1ea3
--- /dev/null
+++ b/xos/synchronizer/steps/sync_volt_service.py
@@ -0,0 +1,61 @@
+# 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 json
+from synchronizers.new_base.SyncInstanceUsingAnsible import SyncStep
+from synchronizers.new_base.modelaccessor import VOLTService
+
+from xosconfig import Config
+from multistructlog import create_logger
+from time import sleep
+import requests
+from requests.auth import HTTPBasicAuth
+
+log = create_logger(Config().get('logging'))
+
+class SyncOLTService(SyncStep):
+    provides = [VOLTService]
+
+    observes = VOLTService
+
+    @staticmethod
+    def format_url(url):
+        if 'http' in url:
+            return url
+        else:
+            return 'http://%s' % url
+
+    @staticmethod
+    def get_p_onos_info(o):
+        return {
+            'url': SyncOLTDevice.format_url(o.volt_service.p_onos_url),
+            'user': o.volt_service.p_onos_user,
+            'pass': o.volt_service.p_onos_pass
+        }
+
+    def sync_record(self, o):
+        log.info("sync'ing olt service", object=str(o), **o.tologdict())
+
+        if o.onu_provisioning == "allow_all":
+            # tell ONOS to create the ONU device (POST xosapi/v1/volt/onudevices)
+            pass
+        if o.onu_provisioning == "pre_provisioned" or o.onu_provisioning == "oss":
+            # tell ONOS to update the ONU device (POST xosapi/v1/volt/onudevices/<id>)
+            # NOTE ONOS will need to find the <id>
+            # NOTE if onu_provisioning == oss then XOS will need to make a call to the oss server to validate the onu
+            pass
+
+
+    def delete_record(self, o):
+        pass
diff --git a/xos/synchronizer/steps/test_sync_olt_device.py b/xos/synchronizer/steps/test_sync_olt_device.py
new file mode 100644
index 0000000..4163e32
--- /dev/null
+++ b/xos/synchronizer/steps/test_sync_olt_device.py
@@ -0,0 +1,188 @@
+# 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 unittest
+from mock import patch, call, Mock, PropertyMock
+import requests_mock
+
+import os, sys
+
+# Hack to load synchronizer framework
+test_path=os.path.abspath(os.path.dirname(os.path.realpath(__file__)))
+xos_dir=os.path.join(test_path, "../../..")
+if not os.path.exists(os.path.join(test_path, "new_base")):
+    xos_dir=os.path.join(test_path, "../../../../../../orchestration/xos/xos")
+sys.path.append(xos_dir)
+sys.path.append(os.path.join(xos_dir, 'synchronizers', 'new_base'))
+# END Hack to load synchronizer framework
+
+# Setting up the config module
+from xosconfig import Config
+config = os.path.join(test_path, "../model_policies/test_config.yaml")
+Config.clear()
+Config.init(config, "synchronizer-config-schema.yaml")
+# END Setting up the config module
+
+from sync_olt_device import SyncOLTDevice
+
+class TestSyncOLTDevice(unittest.TestCase):
+
+    def setUp(self):
+        # create a mock service instance
+        o = Mock()
+        o.volt_service.voltha_url = "voltha_url"
+        o.volt_service.voltha_user = "voltha_user"
+        o.volt_service.voltha_pass = "voltha_pass"
+        o.volt_service.p_onos_url = "p_onos_url"
+        o.volt_service.p_onos_user = "p_onos_user"
+        o.volt_service.p_onos_pass = "p_onos_pass"
+
+        o.device_type = "ponsim_olt"
+        o.host = "172.17.0.1"
+        o.port = "50060"
+        o.uplink = "129"
+        o.vlan = "3"
+        o.driver = "pmc-olt"
+
+        o.tologdict.return_value = {'name': "Mock VOLTServiceInstance"}
+
+        o.save.return_value = "Saved"
+
+        self.o = o
+
+    def tearDown(self):
+        self.o = None
+
+    def test_format_url(self):
+        url = SyncOLTDevice.format_url("onf.com")
+        self.assertEqual(url, "http://onf.com")
+        url = SyncOLTDevice.format_url("http://onf.com")
+        self.assertEqual(url, "http://onf.com")
+
+    def test_get_voltha_info(self):
+        voltha_dict = SyncOLTDevice.get_voltha_info(self.o)
+
+        self.assertEqual(voltha_dict["url"], "http://voltha_url")
+        self.assertEqual(voltha_dict["user"], "voltha_user")
+        self.assertEqual(voltha_dict["pass"], "voltha_pass")
+
+    def test_get_onos_info(self):
+        p_onos_dict = SyncOLTDevice.get_p_onos_info(self.o)
+
+        self.assertEqual(p_onos_dict["url"], "http://p_onos_url")
+        self.assertEqual(p_onos_dict["user"], "p_onos_user")
+        self.assertEqual(p_onos_dict["pass"], "p_onos_pass")
+
+    @requests_mock.Mocker()
+    def test_get_of_id_from_device(self, m):
+        logical_devices = {
+            "items": [
+                {"root_device_id": "123", "id": "abc"},
+                {"root_device_id": "0001cc4974a62b87", "id": "0001000000000001"}
+            ]
+        }
+        m.get("http://voltha_url/api/v1/logical_devices", status_code=200, json=logical_devices)
+        self.o.device_id = "123"
+        of_id = SyncOLTDevice.get_of_id_from_device(self.o)
+        self.assertEqual(of_id, "abc")
+
+        with self.assertRaises(Exception) as e:
+            self.o.device_id = "idonotexist"
+            SyncOLTDevice.get_of_id_from_device(self.o)
+        self.assertEqual(e.exception.message, "Can't find a logical device for device id: idonotexist")
+
+    @requests_mock.Mocker()
+    def test_sync_record_fail_add(self, m):
+        """
+        Should print an error if we can't add the device in VOLTHA
+        """
+        m.post("http://voltha_url/api/v1/devices", status_code=500, text="MockError")
+
+        with self.assertRaises(Exception) as e:
+            SyncOLTDevice().sync_record(self.o)
+        self.assertEqual(e.exception.message, "Failed to add device: MockError")
+
+    @requests_mock.Mocker()
+    def test_sync_record_fail_no_id(self, m):
+        """
+        Should print an error if VOLTHA does not return the device id
+        """
+        m.post("http://voltha_url/api/v1/devices", status_code=200, json={"id": ""})
+
+        with self.assertRaises(Exception) as e:
+            SyncOLTDevice().sync_record(self.o)
+        self.assertEqual(e.exception.message, "VOLTHA Device Id is empty, this probably means that the device is already provisioned in VOLTHA")
+
+    @requests_mock.Mocker()
+    def test_sync_record_fail_enable(self, m):
+        """
+        Should print an error if device.enable fails
+        """
+        m.post("http://voltha_url/api/v1/devices", status_code=200, json={"id": "123"})
+        m.post("http://voltha_url/api/v1/devices/123/enable", status_code=500, text="EnableError")
+
+        with self.assertRaises(Exception) as e:
+            SyncOLTDevice().sync_record(self.o)
+        self.assertEqual(e.exception.message, "Failed to enable device: EnableError")
+
+    @requests_mock.Mocker()
+    def test_sync_record_success(self, m):
+        """
+        If device.enable succed should fetch the state, retrieve the of_id and push it to ONOS
+        """
+        m.post("http://voltha_url/api/v1/devices", status_code=200, json={"id": "123"})
+        m.post("http://voltha_url/api/v1/devices/123/enable", status_code=200)
+        m.get("http://voltha_url/api/v1/devices/123", json={"oper_status": "ENABLED", "admin_state": "ACTIVE"})
+        logical_devices = {
+            "items": [
+                {"root_device_id": "123", "id": "abc"},
+                {"root_device_id": "0001cc4974a62b87", "id": "0001000000000001"}
+            ]
+        }
+        m.get("http://voltha_url/api/v1/logical_devices", status_code=200, json=logical_devices)
+
+        def match_onos_req(req):
+            r = req.json()['devices']
+            if not r['abc']:
+                return False
+            else:
+                if not r['abc']['basic']['driver'] == 'pmc-olt':
+                    return False
+                if not r['abc']['accessDevice']['vlan'] == "3" or not r['abc']['accessDevice']['uplink'] == "129":
+                    return False
+            return True
+
+        m.post("http://p_onos_url/onos/v1/network/configuration/", status_code=200, additional_matcher=match_onos_req, json={})
+
+        SyncOLTDevice().sync_record(self.o)
+        self.assertEqual(self.o.admin_state, "ACTIVE")
+        self.assertEqual(self.o.oper_status, "ENABLED")
+        self.assertEqual(self.o.of_id, "abc")
+        self.o.save.assert_called_once()
+
+    @requests_mock.Mocker()
+    def test_delete_record(self, m):
+        self.o.of_id = "abc"
+        self.o.device_id = "123"
+
+        m.delete("http://p_onos_url/onos/v1/network/configuration/devices/abc", status_code=200)
+        m.post("http://voltha_url/api/v1/devices/123/disable", status_code=200)
+        m.delete("http://voltha_url/api/v1/devices/123/delete", status_code=200)
+
+        SyncOLTDevice().delete_record(self.o)
+
+        # we don't need to assert here, if there are no exceptions it succeded
+
+if __name__ == "__main__":
+    unittest.main()
\ No newline at end of file
diff --git a/xos/synchronizer/volt_config.yaml b/xos/synchronizer/volt_config.yaml
index 12003cb..b3209aa 100644
--- a/xos/synchronizer/volt_config.yaml
+++ b/xos/synchronizer/volt_config.yaml
@@ -22,6 +22,26 @@
   - VOLTService
   - VOLTServiceInstance
   - ServiceInstanceLink
+  - OLTDevice
 dependency_graph: "/opt/xos/synchronizers/volt/model-deps"
 model_policies_dir: "/opt/xos/synchronizers/volt/model_policies"
 models_dir: "/opt/xos/synchronizers/volt/models"
+steps_dir: "/opt/xos/synchronizers/volt/steps"
+pull_steps_dir: "/opt/xos/synchronizers/volt/pull_steps"
+
+logging:
+  version: 1
+  handlers:
+    console:
+      class: logging.StreamHandler
+    file:
+      class: logging.handlers.RotatingFileHandler
+      filename: /var/log/xos.log
+      maxBytes: 10485760
+      backupCount: 5
+  loggers:
+    'multistructlog':
+      handlers:
+          - console
+          - file
+      level: DEBUG
