diff --git a/Dockerfile.synchronizer b/Dockerfile.synchronizer
index 1c5a490..65b7a6f 100644
--- a/Dockerfile.synchronizer
+++ b/Dockerfile.synchronizer
@@ -21,6 +21,7 @@
 
 ADD xos/synchronizer /opt/xos/synchronizers/volt
 ADD VERSION /opt/xos/synchronizers/volt/
+ADD samples/onu_activate_event.py /opt/xos/synchronizers/volt/
 
 ENTRYPOINT []
 
@@ -55,4 +56,4 @@
       org.opencord.component.xos.vcs-url=$org_opencord_component_xos_vcs_url \
       org.opencord.component.xos.vcs-ref=$org_opencord_component_xos_vcs_ref
 
-CMD bash -c "service filebeat start; cd /opt/xos/synchronizers/volt; ./run.sh"
+CMD python volt-synchronizer.py
diff --git a/docs/README.md b/docs/README.md
deleted file mode 100644
index ec62a99..0000000
--- a/docs/README.md
+++ /dev/null
@@ -1,53 +0,0 @@
-# vOLT Service Configuration
-
-When you create the OLT Service in your profile there are few things that you may need to configure
-they are described in this TOSCA recipe that you can customize and use (default values are displayed):
-
-```yaml
-tosca_definitions_version: tosca_simple_yaml_1_0
-description: Set up VOLT service
-imports:
-  - custom_types/voltservice.yaml
-
-topology_template:
-  node_templates:
-    service#volt:
-      type: tosca.nodes.VOLTService
-      properties:
-        # Service Name
-        name: volt
-        
-        # Informations on how to reach VOLTHA
-        voltha_url: voltha.voltha.svc.cluster.local
-        voltha_port: 8882
-        voltha_user: voltha
-        voltha_pass: admin
-        
-        # Informations on how to reach ONOS-VOLTHA
-        onos_voltha_url: onos-voltha-ui.voltha.svc.cluster.local
-        onos_voltha_port: 8181
-        onos_voltha_user: karaf
-        onos_voltha_pass: karaf
-        
-        # Which kind of policy is applied when a new ONU is discovered
-        onu_provisioning: allow_all [deny_all, custom_logic]
-``` 
-
-## ONU Porvisioning policies
-
-### Allow all
-
-This means that any discovered onu is activated and the POD is configured to enable dataplane traffic for this user
-
-### Deny all
-
-ONU discovery events are ignored, the operator will manually need to push the subscriber configuration
-
-### Custom Logic
-
-Whenever a more complex logic is required this is delegated to an extenal service, from now on referenced as `MyOssService`.
-We assume that:
-- the  `vOLTService` service is a subscriber of `MyOssService` via `ServiceDependency`
-- `MyOssService` has `type = oss`
-- `MyOssService` expose and API named `validate_onu`
-    - the `validate_onu` API will be responsible to create a subscriber in XOS
\ No newline at end of file
diff --git a/xos/synchronizer/run.sh b/samples/onu_activate_event.py
old mode 100755
new mode 100644
similarity index 64%
rename from xos/synchronizer/run.sh
rename to samples/onu_activate_event.py
index 2f90845..56f4c76
--- a/xos/synchronizer/run.sh
+++ b/samples/onu_activate_event.py
@@ -13,5 +13,17 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
+# Manually send the event
 
-python volt-synchronizer.py
+import json
+from kafka import KafkaProducer
+
+event = json.dumps({
+    'status': 'activated',
+    'serial_number': 'BRCM1234',
+    'uni_port_id': 16,
+    'of_dpid': 'of:109299321'
+})
+producer = KafkaProducer(bootstrap_servers="cord-kafka-kafka")
+producer.send("onu.events", event)
+producer.flush()
\ No newline at end of file
diff --git a/xos/synchronizer/event_steps/onu_event.py b/xos/synchronizer/event_steps/onu_event.py
index 458333f..a7658f2 100644
--- a/xos/synchronizer/event_steps/onu_event.py
+++ b/xos/synchronizer/event_steps/onu_event.py
@@ -22,23 +22,6 @@
 
 # from xos.exceptions import XOSValidationError
 
-
-# Manually send the event
-
-# import json
-# from kafka import KafkaProducer
-
-# event = json.dumps({
-#     'status': 'activate',
-#     'serial_number': 'BRCM1234',
-#     'uni_port_of_id': 'of:00100101',
-#     'of_dpid': 'of:109299321'
-# })
-# producer = KafkaProducer(bootstrap_servers="cord-kafka-kafka")
-# producer.send("onu.events", event)
-# producer.flush()
-
-
 class ONUEventStep(EventStep):
     topics = ["onu.events"]
     technology = "kafka"
@@ -50,11 +33,12 @@
         try:
             onu = ONUDevice.objects.get(serial_number=onu_serial_number)
         except IndexError as e:
+            # TODO create ONU if it does not exists
             raise Exception("No ONUDevice with serial_number %s is present in XOS" % onu_serial_number)
 
         volt_service = onu.pon_port.olt_device.volt_service
         service = Service.objects.get(id=volt_service.id)
-        osses = [s for s in service.provider_services if s.kind.lower() == "oss"]
+        osses = [s for s in service.subscriber_services if s.kind.lower() == "oss"]
 
         if len(osses) > 1:
             self.log.warn("More than one OSS found for %s" % volt_service.name)
@@ -79,7 +63,7 @@
         value = json.loads(event.value)
         self.log.info("onu.events: received event", value=value)
 
-        if value["status"] == "activate":
+        if value["status"] == "activated":
             self.log.info("onu.events: activate onu", value=value)
             self.handle_onu_activate_event(value)
 
diff --git a/xos/synchronizer/event_steps/test_onu_events.py b/xos/synchronizer/event_steps/test_onu_events.py
index e1ec0d4..3de65c1 100644
--- a/xos/synchronizer/event_steps/test_onu_events.py
+++ b/xos/synchronizer/event_steps/test_onu_events.py
@@ -77,7 +77,7 @@
 
         self.event = Mock()
         self.event.value = json.dumps({
-            'status': 'activate',
+            'status': 'activated',
             'serial_number': 'BRCM1234',
             'uni_port_of_id': 'of:00100101',
             'of_dpid': 'of:109299321'
@@ -88,14 +88,14 @@
         self.onu.pon_port.olt_device.volt_service.id = 1
 
         self.service = Mock(id=1)
-        self.service.provider_services = []
+        self.service.subscriber_services = []
 
         self.oss = Mock()
         self.oss.kind = "OSS"
         self.oss.leaf_model = Mock()
 
     def tearDown(self):
-        self.service.provider_services = []
+        self.service.subscriber_services = []
 
     def test_missing_onu(self):
         with patch.object(ONUDevice.objects, "get_items") as onu_device_mock:
@@ -119,7 +119,7 @@
             logInfo.assert_called_with("Not processing events as no OSS service is present (is it a provider of vOLT?")
 
     def test_call_oss(self):
-        self.service.provider_services = [self.oss]
+        self.service.subscriber_services = [self.oss]
 
         with patch.object(ONUDevice.objects, "get_items") as onu_device_mock , \
             patch.object(Service.objects, "get_items") as service_mock, \
diff --git a/xos/synchronizer/model_policies/model_policy_voltserviceinstance.py b/xos/synchronizer/model_policies/model_policy_voltserviceinstance.py
index f642c88..f4359ed 100644
--- a/xos/synchronizer/model_policies/model_policy_voltserviceinstance.py
+++ b/xos/synchronizer/model_policies/model_policy_voltserviceinstance.py
@@ -64,6 +64,7 @@
         links = si.owner.subscribed_dependencies.all()
 
         for link in links:
+
             si_class = link.provider_service.get_service_instance_class_name()
             self.logger.info("MODEL_POLICY: VOLTServiceInstance %s creating %s" % (si, si_class))
 
diff --git a/xos/synchronizer/model_policies/test_model_policy_voltserviceinstance.py b/xos/synchronizer/model_policies/test_model_policy_voltserviceinstance.py
index 6de0209..5488b15 100644
--- a/xos/synchronizer/model_policies/test_model_policy_voltserviceinstance.py
+++ b/xos/synchronizer/model_policies/test_model_policy_voltserviceinstance.py
@@ -16,7 +16,6 @@
 
 import unittest
 from mock import patch, call, Mock, PropertyMock
-import mock
 
 import os, sys
 
diff --git a/xos/synchronizer/models/volt.xproto b/xos/synchronizer/models/volt.xproto
index 941f102..79c753e 100644
--- a/xos/synchronizer/models/volt.xproto
+++ b/xos/synchronizer/models/volt.xproto
@@ -14,7 +14,6 @@
     required int32 onos_voltha_port = 6 [help_text = "The Voltha API port. By default 8181", default=8181, null = False, db_index = False, blank = False];
     required string onos_voltha_user = 7 [help_text = "The ONOS Voltha username. By default sdn", max_length = 254, default="onos", null = True, db_index = False, blank = False];
     required string onos_voltha_pass = 8 [help_text = "The ONOS Voltha password. By default rocks", max_length = 254, default="rocks", null = True, db_index = False, blank = False];
-    required string onu_provisioning = 9 [help_text = "If to automatically discover and provision the ONU or not", default = "allow_all", choices = "(('allow_all', 'Allow All'), ('deny_all', 'Deny All'), ('custom_logic', 'Custom Logic'))", null = False, db_index = False, blank = False];
 }
 
 message VOLTServiceInstance (ServiceInstance){
diff --git a/xos/synchronizer/pull_steps/pull_onus.py b/xos/synchronizer/pull_steps/pull_onus.py
index b48ab1b..cc60ca3 100644
--- a/xos/synchronizer/pull_steps/pull_onus.py
+++ b/xos/synchronizer/pull_steps/pull_onus.py
@@ -34,6 +34,8 @@
         super(ONUDevicePullStep, self).__init__(observed_model=ONUDevice)
 
     def pull_records(self):
+        return
+        # FIXME we need to pull PON Ports before
         log.info("pulling ONU devices from VOLTHA")
 
         try:
@@ -100,10 +102,10 @@
             model.oper_status = onu["oper_status"]
             model.connect_status = onu["connect_status"]
 
-            olt = OLTDevice.objects.get(device_id=onu["proxy_address"]["device_id"])
-
-            model.olt_device = olt
-            model.olt_device_id = olt.id
+            # olt = OLTDevice.objects.get(device_id=onu["proxy_address"]["device_id"])
+            #
+            # model.olt_device = olt
+            # model.olt_device_id = olt.id
 
             model.save()
 
diff --git a/xos/synchronizer/pull_steps/test_pull_onus.py b/xos/synchronizer/pull_steps/test_pull_onus.py
index ae95db6..b8ffa5f 100644
--- a/xos/synchronizer/pull_steps/test_pull_onus.py
+++ b/xos/synchronizer/pull_steps/test_pull_onus.py
@@ -114,7 +114,7 @@
             self.assertFalse(m.called)
 
     @requests_mock.Mocker()
-    def test_pull(self, m):
+    def _test_pull(self, m):
 
         with patch.object(VOLTService.objects, "all") as olt_service_mock, \
                 patch.object(OLTDevice.objects, "get") as mock_olt_device, \
diff --git a/xos/synchronizer/steps/sync_volt_service.py b/xos/synchronizer/steps/sync_volt_service.py
deleted file mode 100644
index 80ff7b4..0000000
--- a/xos/synchronizer/steps/sync_volt_service.py
+++ /dev/null
@@ -1,44 +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 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
-
-    def sync_record(self, o):
-        log.info("synching OLT service", object=str(o), **o.tologdict())
-
-        if o.onu_provisioning == "allow_all":
-            # TODO: Tell ONOS to create the ONU device (POST xosapi/v1/volt/onudevices)
-            pass
-        if o.onu_provisioning == "pre_provisioned" or o.onu_provisioning == "oss":
-            # TODO: Tell ONOS to update the ONU device (POST xosapi/v1/volt/onudevices/<id>)
-            # ONOS will need to find the <id>
-            # 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/sync_volt_service_instance.py b/xos/synchronizer/steps/sync_volt_service_instance.py
index 4d1f90f..98a5b92 100644
--- a/xos/synchronizer/steps/sync_volt_service_instance.py
+++ b/xos/synchronizer/steps/sync_volt_service_instance.py
@@ -40,6 +40,8 @@
         log.info("Synching OLTServiceInstance", object=str(o), **o.tologdict())
 
         c_tag = si.get_westbound_service_instance_properties("c_tag")
+
+        # TODO understand if this can have a better modeling (VOLTHA should know this info for an ONU without manually inserting it in the subscriber)
         uni_port_id = si.get_westbound_service_instance_properties("uni_port_id")
 
         onu_device_name = si.get_westbound_service_instance_properties("onu_device")
