diff --git a/xos/synchronizer/event_steps/auth_event.py b/xos/synchronizer/event_steps/auth_event.py
index b7124a9..f6992d8 100644
--- a/xos/synchronizer/event_steps/auth_event.py
+++ b/xos/synchronizer/event_steps/auth_event.py
@@ -27,16 +27,9 @@
 
     def process_event(self, event):
         value = json.loads(event.value)
-
-        onu_sn = AttHelpers.get_onu_sn(self.model_accessor, self.log, value)
-        si = AttHelpers.get_si_by_sn(self.model_accessor, self.log, onu_sn)
-        if not si:
-            self.log.exception(
-                "authentication.events: Cannot find att-workflow-driver service instance for this event",
-                kafka_event=value)
-            raise Exception("authentication.events: Cannot find att-workflow-driver service instance for this event")
-
-        self.log.info("authentication.events: Got event for subscriber", event_value=value, onu_sn=onu_sn, si=si)
-
+        self.log.info("authentication.events: Got event for subscriber", event_value=value)
+        
+        si = AttHelpers.find_or_create_att_si(self.model_accessor, self.log, value)
+        self.log.debug("authentication.events: Updating service instance", si=si)
         si.authentication_state = value["authenticationState"]
         si.save_changed_fields(always_update_timestamp=True)
diff --git a/xos/synchronizer/event_steps/dhcp_event.py b/xos/synchronizer/event_steps/dhcp_event.py
index 06abc5a..a256fd6 100644
--- a/xos/synchronizer/event_steps/dhcp_event.py
+++ b/xos/synchronizer/event_steps/dhcp_event.py
@@ -27,20 +27,11 @@
 
     def process_event(self, event):
         value = json.loads(event.value)
+        self.log.info("dhcp.events: Got event for subscriber", event_value=value)
 
-        onu_sn = AttHelpers.get_onu_sn(self.model_accessor, self.log, value)
-        si = AttHelpers.get_si_by_sn(self.model_accessor, self.log, onu_sn)
-
-        if not si:
-            self.log.exception(
-                "dhcp.events: Cannot find att-workflow-driver service instance for this event",
-                kafka_event=value)
-            raise Exception("dhcp.events: Cannot find att-workflow-driver service instance for this event")
-
-        self.log.info("dhcp.events: Got event for subscriber", event_value=value, onu_sn=onu_sn, si=si)
-
+        si = AttHelpers.find_or_create_att_si(self.model_accessor, self.log, value)
+        self.log.debug("dhcp.events: Updating service instance", si=si)
         si.dhcp_state = value["messageType"]
         si.ip_address = value["ipAddress"]
         si.mac_address = value["macAddress"]
-
         si.save_changed_fields(always_update_timestamp=True)
diff --git a/xos/synchronizer/event_steps/onu_event.py b/xos/synchronizer/event_steps/onu_event.py
index bc55f16..9a6c6f8 100644
--- a/xos/synchronizer/event_steps/onu_event.py
+++ b/xos/synchronizer/event_steps/onu_event.py
@@ -16,6 +16,7 @@
 
 import json
 from xossynchronizer.event_steps.eventstep import EventStep
+from helpers import AttHelpers
 
 
 class ONUEventStep(EventStep):
@@ -27,34 +28,16 @@
     def __init__(self, *args, **kwargs):
         super(ONUEventStep, self).__init__(*args, **kwargs)
 
-    def get_att_si(self, event):
-        try:
-            att_si = self.model_accessor.AttWorkflowDriverServiceInstance.objects.get(
-                serial_number=event["serialNumber"])
-            att_si.no_sync = False
-            att_si.uni_port_id = long(event["portNumber"])
-            att_si.of_dpid = event["deviceId"]
-            self.log.debug("onu.events: Found existing AttWorkflowDriverServiceInstance", si=att_si)
-        except IndexError:
-            # create an AttWorkflowDriverServiceInstance, the validation will be
-            # triggered in the corresponding sync step
-            att_si = self.model_accessor.AttWorkflowDriverServiceInstance(
-                serial_number=event["serialNumber"],
-                of_dpid=event["deviceId"],
-                uni_port_id=long(event["portNumber"]),
-                # we assume there is only one AttWorkflowDriverService
-                owner=self.model_accessor.AttWorkflowDriverService.objects.first()
-            )
-            self.log.debug("onu.events: Created new AttWorkflowDriverServiceInstance", si=att_si)
-        return att_si
-
     def process_event(self, event):
         value = json.loads(event.value)
         self.log.info("onu.events: received event", value=value)
 
         if value["status"] == "activated":
             self.log.info("onu.events: activated onu", value=value)
-            att_si = self.get_att_si(value)
+            att_si = AttHelpers.find_or_create_att_si(self.model_accessor, self.log, value)
+            att_si.no_sync = False
+            att_si.uni_port_id = long(value["portNumber"])
+            att_si.of_dpid = value["deviceId"]
             att_si.onu_state = "ENABLED"
             att_si.save_changed_fields(always_update_timestamp=True)
         elif value["status"] == "disabled":
diff --git a/xos/synchronizer/event_steps/test_auth_event.py b/xos/synchronizer/event_steps/test_auth_event.py
index e875c43..a2ec52f 100644
--- a/xos/synchronizer/event_steps/test_auth_event.py
+++ b/xos/synchronizer/event_steps/test_auth_event.py
@@ -61,13 +61,9 @@
 
         self.event = Mock()
 
-        self.volt = Mock()
-        self.volt.name = "vOLT"
-        self.volt.leaf_model = Mock()
-
-        self.hippie_si = AttWorkflowDriverServiceInstance()
-        self.hippie_si.serial_number = "BRCM1234"
-        self.hippie_si.save = Mock()
+        self.att_si = AttWorkflowDriverServiceInstance()
+        self.att_si.serial_number = "BRCM1234"
+        self.att_si.save = Mock()
 
     def tearDown(self):
         sys.path = self.sys_path_save
@@ -78,24 +74,22 @@
             'authenticationState': "APPROVED",
             'deviceId': "of:0000000ce2314000",
             'portNumber': "101",
+            'serialNumber': "BRCM1234",
         })
 
-        with patch.object(VOLTService.objects, "get_items") as volt_service_mock, \
-                patch.object(AttWorkflowDriverServiceInstance.objects, "get_items") as hippie_si_mock, \
-                patch.object(self.volt, "get_onu_sn_from_openflow") as get_onu_sn:
+        with patch.object(AttWorkflowDriverServiceInstance.objects, "get_items") as att_si_mock:
 
-            volt_service_mock.return_value = [self.volt]
-            get_onu_sn.return_value = "BRCM1234"
-            hippie_si_mock.return_value = [self.hippie_si]
+            att_si_mock.return_value = [self.att_si]
 
             self.event_step.process_event(self.event)
 
-            self.hippie_si.save.assert_called_with(
+            self.att_si.save.assert_called()
+            self.att_si.save.assert_called_with(
                 always_update_timestamp=True, update_fields=[
                     'authentication_state', 'serial_number', 'updated'])
-            self.assertEqual(self.hippie_si.authentication_state, 'APPROVED')
+            self.assertEqual(self.att_si.authentication_state, 'APPROVED')
 
 
 if __name__ == '__main__':
-    sys.path.append("..")  # for import of helpers.py
+    sys.path.append(os.path.join(os.path.dirname(os.path.realpath(__file__)), ".."))  # for import of helpers.py
     unittest.main()
diff --git a/xos/synchronizer/event_steps/test_dhcp_event.py b/xos/synchronizer/event_steps/test_dhcp_event.py
index 7176ba9..275c1ef 100644
--- a/xos/synchronizer/event_steps/test_dhcp_event.py
+++ b/xos/synchronizer/event_steps/test_dhcp_event.py
@@ -86,17 +86,12 @@
             "portNumber": "1",
             "macAddress": self.mac_address,
             "ipAddress": self.ip_address,
-            "messageType": "DHCPREQUEST"
+            "messageType": "DHCPREQUEST",
+            'serialNumber': "BRCM1234",
         })
 
-        with patch.object(VOLTService.objects, "get_items") as volt_service_mock, \
-                patch.object(AttWorkflowDriverServiceInstance.objects, "get_items") as si_mock, \
-                patch.object(self.volt, "get_onu_sn_from_openflow") as get_onu_sn:
+        with patch.object(AttWorkflowDriverServiceInstance.objects, "get_items") as si_mock:
 
-            self.assertTrue(VOLTService.objects.first() is not None)
-
-            volt_service_mock.return_value = [self.volt]
-            get_onu_sn.return_value = "BRCM1234"
             si_mock.return_value = [self.si]
 
             self.event_step.process_event(self.event)
diff --git a/xos/synchronizer/helpers.py b/xos/synchronizer/helpers.py
index 9a2d035..afc471b 100644
--- a/xos/synchronizer/helpers.py
+++ b/xos/synchronizer/helpers.py
@@ -58,19 +58,21 @@
         return [True, "ONU has been validated"]
 
     @staticmethod
-    def get_onu_sn(model_accessor, log, event):
-        olt_service = model_accessor.VOLTService.objects.first()
-        onu_sn = olt_service.get_onu_sn_from_openflow(event["deviceId"], event["portNumber"])
-        if not onu_sn or onu_sn is None:
-            log.exception("Cannot find onu serial number for this event", kafka_event=event)
-            raise Exception("Cannot find onu serial number for this event")
-
-        return onu_sn
-
-    @staticmethod
-    def get_si_by_sn(model_accessor, log, serial_number):
+    def find_or_create_att_si(model_accessor, log, event):
         try:
-            return model_accessor.AttWorkflowDriverServiceInstance.objects.get(serial_number=serial_number)
+            att_si = model_accessor.AttWorkflowDriverServiceInstance.objects.get(
+                serial_number=event["serialNumber"]
+            )
+            log.debug("AttHelpers: Found existing AttWorkflowDriverServiceInstance", si=att_si)
         except IndexError:
-            log.exception("Cannot find att-workflow-driver service instance for this serial number", serial_number=serial_number)
-            raise Exception("Cannot find att-workflow-driver service instance for this serial number %s", serial_number)
\ No newline at end of file
+            # create an AttWorkflowDriverServiceInstance, the validation will be
+            # triggered in the corresponding sync step
+            att_si = model_accessor.AttWorkflowDriverServiceInstance(
+                serial_number=event["serialNumber"],
+                of_dpid=event["deviceId"],
+                uni_port_id=long(event["portNumber"]),
+                # we assume there is only one AttWorkflowDriverService
+                owner=model_accessor.AttWorkflowDriverService.objects.first()
+            )
+            log.debug("AttHelpers: Created new AttWorkflowDriverServiceInstance", si=att_si)
+        return att_si
