diff --git a/xos/synchronizer/event_steps/auth_event.py b/xos/synchronizer/event_steps/auth_event.py
index e534aee..b181121 100644
--- a/xos/synchronizer/event_steps/auth_event.py
+++ b/xos/synchronizer/event_steps/auth_event.py
@@ -31,8 +31,8 @@
     def process_event(self, event):
         value = json.loads(event.value)
 
-        onu_sn = AttHelpers.get_onu_sn(value)
-        si = AttHelpers.get_si_by_sn(onu_sn)
+        onu_sn = AttHelpers.get_onu_sn(self.log, value)
+        si = AttHelpers.get_si_by_sn(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")
diff --git a/xos/synchronizer/event_steps/dhcp_event.py b/xos/synchronizer/event_steps/dhcp_event.py
index 74a7696..1b3033a 100644
--- a/xos/synchronizer/event_steps/dhcp_event.py
+++ b/xos/synchronizer/event_steps/dhcp_event.py
@@ -31,8 +31,8 @@
     def process_event(self, event):
         value = json.loads(event.value)
 
-        onu_sn = AttHelpers.get_onu_sn(value)
-        si = AttHelpers.get_si_by_sn(onu_sn)
+        onu_sn = AttHelpers.get_onu_sn(self.log, value)
+        si = AttHelpers.get_si_by_sn(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)
@@ -40,8 +40,8 @@
 
         self.log.info("dhcp.events: Got event for subscriber", event_value=value, onu_sn=onu_sn, si=si)
 
-        si.dhcp_state = value["messageType"];
-        si.ip_address = value["ipAddress"];
-        si.mac_address = value["macAddress"];
+        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/helpers.py b/xos/synchronizer/helpers.py
index 9fffd7c..6b4b2b5 100644
--- a/xos/synchronizer/helpers.py
+++ b/xos/synchronizer/helpers.py
@@ -15,15 +15,9 @@
 from synchronizers.new_base.syncstep import DeferredException
 from synchronizers.new_base.modelaccessor import AttWorkflowDriverWhiteListEntry, AttWorkflowDriverServiceInstance, ONUDevice, VOLTService, model_accessor
 
-from xosconfig import Config
-from multistructlog import create_logger
-
-log = create_logger(Config().get('logging'))
-
 class AttHelpers():
-
     @staticmethod
-    def validate_onu(att_si):
+    def validate_onu(log, att_si):
         """
         This method validate an ONU against the whitelist and set the appropriate state.
         It's expected that the deferred exception is managed in the caller method,
@@ -65,7 +59,7 @@
         return [True, "ONU has been validated"]
 
     @staticmethod
-    def get_onu_sn(event):
+    def get_onu_sn(log, event):
         olt_service = 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:
@@ -75,7 +69,7 @@
         return onu_sn
 
     @staticmethod
-    def get_si_by_sn(serial_number):
+    def get_si_by_sn(log, serial_number):
         try:
             return AttWorkflowDriverServiceInstance.objects.get(serial_number=serial_number)
         except IndexError:
diff --git a/xos/synchronizer/model_policies/model_policy_att_workflow_driver_serviceinstance.py b/xos/synchronizer/model_policies/model_policy_att_workflow_driver_serviceinstance.py
index 525d6ce..602aded 100644
--- a/xos/synchronizer/model_policies/model_policy_att_workflow_driver_serviceinstance.py
+++ b/xos/synchronizer/model_policies/model_policy_att_workflow_driver_serviceinstance.py
@@ -58,7 +58,7 @@
         si.save_changed_fields()
 
     def validate_onu_state(self, si):
-        [valid, message] = AttHelpers.validate_onu(si)
+        [valid, message] = AttHelpers.validate_onu(self.logger, si)
         si.status_message = message
         if valid:
             si.onu_state = "ENABLED"
diff --git a/xos/synchronizer/model_policies/model_policy_att_workflow_driver_whitelistentry.py b/xos/synchronizer/model_policies/model_policy_att_workflow_driver_whitelistentry.py
index cb1e20d..51f2ba4 100644
--- a/xos/synchronizer/model_policies/model_policy_att_workflow_driver_whitelistentry.py
+++ b/xos/synchronizer/model_policies/model_policy_att_workflow_driver_whitelistentry.py
@@ -31,7 +31,7 @@
         self.handle_update(whitelist)
 
     def validate_onu_state(self, si):
-        [valid, message] = AttHelpers.validate_onu(si)
+        [valid, message] = AttHelpers.validate_onu(self.logger, si)
         si.status_message = message
         if valid:
             si.onu_state = "ENABLED"
diff --git a/xos/synchronizer/test_helpers.py b/xos/synchronizer/test_helpers.py
index 910930b..c30cac3 100644
--- a/xos/synchronizer/test_helpers.py
+++ b/xos/synchronizer/test_helpers.py
@@ -49,6 +49,9 @@
         Config.init(config, "synchronizer-config-schema.yaml")
         # END Setting up the config module
 
+        from multistructlog import create_logger
+        self.log = create_logger(Config().get('logging'))
+
         from synchronizers.new_base.mock_modelaccessor_build import build_mock_modelaccessor
 
         build_mock_modelaccessor(xos_dir, services_dir, [
@@ -104,7 +107,7 @@
         with patch.object(AttWorkflowDriverWhiteListEntry.objects, "get_items") as whitelist_mock:
             whitelist_mock.return_value = []
 
-            [res, message] = self.helpers.validate_onu(self.att_si)
+            [res, message] = self.helpers.validate_onu(self.log, self.att_si)
 
             self.assertFalse(res)
             self.assertEqual(message, "ONU not found in whitelist")
@@ -116,7 +119,7 @@
             whitelist_mock.return_value = [self.whitelist_entry]
             onu_mock.return_value = [self.onu]
 
-            [res, message] = self.helpers.validate_onu(self.att_si)
+            [res, message] = self.helpers.validate_onu(self.log, self.att_si)
 
             self.assertFalse(res)
             self.assertEqual(message, "ONU activated in wrong location")
@@ -128,7 +131,7 @@
             whitelist_mock.return_value = [self.whitelist_entry]
             onu_mock.return_value = [self.onu]
 
-            [res, message] = self.helpers.validate_onu(self.att_si)
+            [res, message] = self.helpers.validate_onu(self.log, self.att_si)
 
             self.assertFalse(res)
             self.assertEqual(message, "ONU activated in wrong location")
@@ -140,7 +143,7 @@
             onu_mock.return_value = []
 
             with self.assertRaises(Exception) as e:
-                self.helpers.validate_onu(self.att_si)
+                self.helpers.validate_onu(self.log, self.att_si)
 
             self.assertEqual(e.exception.message, "ONU device %s is not know to XOS yet" % self.att_si.serial_number)
 
@@ -150,7 +153,7 @@
             whitelist_mock.return_value = [self.whitelist_entry]
             onu_mock.return_value = [self.onu]
 
-            [res, message] = self.helpers.validate_onu(self.att_si)
+            [res, message] = self.helpers.validate_onu(self.log, self.att_si)
 
             self.assertTrue(res)
             self.assertEqual(message, "ONU has been validated")
@@ -162,7 +165,7 @@
             whitelist_mock.return_value = [self.whitelist_entry]
             onu_mock.return_value = [self.onu]
 
-            [res, message] = self.helpers.validate_onu(self.att_si)
+            [res, message] = self.helpers.validate_onu(self.log, self.att_si)
 
             self.assertTrue(res)
             self.assertEqual(message, "ONU has been validated")
