diff --git a/Dockerfile.synchronizer b/Dockerfile.synchronizer
index 9c33c28..ebd6c2e 100644
--- a/Dockerfile.synchronizer
+++ b/Dockerfile.synchronizer
@@ -16,7 +16,7 @@
 
 # xosproject/volt-synchronizer
 
-FROM xosproject/xos-synchronizer-base:2.1.32
+FROM xosproject/xos-synchronizer-base:2.1.38
 
 COPY xos/synchronizer /opt/xos/synchronizers/volt
 COPY VERSION /opt/xos/synchronizers/volt/
diff --git a/VERSION b/VERSION
index 0ddcadb..a62db96 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-2.1.21
+2.1.22
diff --git a/xos/synchronizer/event_steps/kubernetes_event.py b/xos/synchronizer/event_steps/kubernetes_event.py
index aa8bef8..8eed0c4 100644
--- a/xos/synchronizer/event_steps/kubernetes_event.py
+++ b/xos/synchronizer/event_steps/kubernetes_event.py
@@ -17,8 +17,8 @@
 import json
 import os
 import sys
-from synchronizers.new_base.eventstep import EventStep
-from synchronizers.new_base.modelaccessor import VOLTService, VOLTServiceInstance, Service
+from xossynchronizer.event_steps.eventstep import EventStep
+from xossynchronizer.modelaccessor import VOLTService, VOLTServiceInstance, Service
 from xosconfig import Config
 from multistructlog import create_logger
 
diff --git a/xos/synchronizer/event_steps/test_kubernetes_event.py b/xos/synchronizer/event_steps/test_kubernetes_event.py
index 32d8e1f..0b45e88 100644
--- a/xos/synchronizer/event_steps/test_kubernetes_event.py
+++ b/xos/synchronizer/event_steps/test_kubernetes_event.py
@@ -20,27 +20,7 @@
 
 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")
-    services_dir = os.path.join(xos_dir, "../../xos_services")
-sys.path.append(xos_dir)
-sys.path.append(os.path.join(xos_dir, 'synchronizers', 'new_base'))
-# END Hack to load synchronizer framework
-
-# generate model from xproto
-def get_models_fn(service_name, xproto_name):
-    name = os.path.join(service_name, "xos", xproto_name)
-    if os.path.exists(os.path.join(services_dir, name)):
-        return name
-    else:
-        name = os.path.join(service_name, "xos", "synchronizer", "models", xproto_name)
-        if os.path.exists(os.path.join(services_dir, name)):
-            return name
-    raise Exception("Unable to find service=%s xproto=%s" % (service_name, xproto_name))
-# END generate model from xproto
 
 class TestKubernetesEvent(unittest.TestCase):
 
@@ -48,29 +28,24 @@
         global DeferredException
 
         self.sys_path_save = sys.path
-        sys.path.append(xos_dir)
-        sys.path.append(os.path.join(xos_dir, 'synchronizers', 'new_base'))
 
         config = os.path.join(test_path, "../test_config.yaml")
         from xosconfig import Config
         Config.clear()
         Config.init(config, 'synchronizer-config-schema.yaml')
 
-        from synchronizers.new_base.mock_modelaccessor_build import build_mock_modelaccessor
-        build_mock_modelaccessor(xos_dir, services_dir, [
-            get_models_fn("olt-service", "volt.xproto"),
-            get_models_fn("vsg", "vsg.xproto"),
-            get_models_fn("../profiles/rcord", "rcord.xproto"),
-            get_models_fn("onos-service", "onos.xproto"),
-        ])
+        from xossynchronizer.mock_modelaccessor_build import mock_modelaccessor_config
+        mock_modelaccessor_config(test_path, [("olt-service", "volt.xproto"),
+                                                ("vsg", "vsg.xproto"),
+                                                ("../profiles/rcord", "rcord.xproto"),
+                                                ("onos-service", "onos.xproto"),])
 
-        import synchronizers.new_base.mock_modelaccessor
-        reload(synchronizers.new_base.mock_modelaccessor) # in case nose2 loaded it in a previous test
+        import xossynchronizer.modelaccessor
+        import mock_modelaccessor
+        reload(mock_modelaccessor) # in case nose2 loaded it in a previous test
+        reload(xossynchronizer.modelaccessor)      # in case nose2 loaded it in a previous test
 
-        import synchronizers.new_base.modelaccessor
-        reload(synchronizers.new_base.modelaccessor)      # in case nose2 loaded it in a previous test
-
-        from synchronizers.new_base.modelaccessor import model_accessor
+        from xossynchronizer.modelaccessor import model_accessor
         from mock_modelaccessor import MockObjectList
 
         from kubernetes_event import KubernetesPodDetailsEventStep
@@ -79,6 +54,7 @@
         for (k, v) in model_accessor.all_model_classes.items():
             globals()[k] = v
 
+        self.model_accessor = model_accessor
         self.event_step = KubernetesPodDetailsEventStep
 
         self.onos = ONOSService(name="myonos",
@@ -125,7 +101,7 @@
             event = Mock()
             event.value = json.dumps(event_dict)
 
-            step = self.event_step(log=self.log)
+            step = self.event_step(model_accessor=self.model_accessor, log=self.log)
             step.process_event(event)
 
             self.assertEqual(self.fcsi1.backend_code, 0)
@@ -151,7 +127,7 @@
             event = Mock()
             event.value = json.dumps(event_dict)
 
-            step = self.event_step(log=self.log)
+            step = self.event_step(model_accessor=self.model_accessor, log=self.log)
             step.process_event(event)
 
             self.assertEqual(self.fcsi1.backend_code, 1)
@@ -174,7 +150,7 @@
             event = Mock()
             event.value = json.dumps(event_dict)
 
-            step = self.event_step(log=self.log)
+            step = self.event_step(model_accessor=self.model_accessor, log=self.log)
             step.process_event(event)
 
             self.assertEqual(self.fcsi1.backend_code, 1)
@@ -196,7 +172,7 @@
             event = Mock()
             event.value = json.dumps(event_dict)
 
-            step = self.event_step(log=self.log)
+            step = self.event_step(model_accessor=self.model_accessor, log=self.log)
             step.process_event(event)
 
             self.assertEqual(self.fcsi1.backend_code, 1)
diff --git a/xos/synchronizer/model_policies/model_policy_voltserviceinstance.py b/xos/synchronizer/model_policies/model_policy_voltserviceinstance.py
index 1321955..966435a 100644
--- a/xos/synchronizer/model_policies/model_policy_voltserviceinstance.py
+++ b/xos/synchronizer/model_policies/model_policy_voltserviceinstance.py
@@ -14,8 +14,8 @@
 # limitations under the License.
 
 
-from synchronizers.new_base.modelaccessor import VOLTServiceInstance, ServiceInstanceLink, ONUDevice, ServiceInstance, model_accessor
-from synchronizers.new_base.policy import Policy
+from xossynchronizer.modelaccessor import VOLTServiceInstance, ServiceInstanceLink, ONUDevice, ServiceInstance, model_accessor
+from xossynchronizer.model_policies.policy import Policy
 
 class VOLTServiceInstancePolicy(Policy):
     model_name = "VOLTServiceInstance"
diff --git a/xos/synchronizer/model_policies/test_model_policy_voltserviceinstance.py b/xos/synchronizer/model_policies/test_model_policy_voltserviceinstance.py
index f129de5..c6514b7 100644
--- a/xos/synchronizer/model_policies/test_model_policy_voltserviceinstance.py
+++ b/xos/synchronizer/model_policies/test_model_policy_voltserviceinstance.py
@@ -20,47 +20,33 @@
 import os, sys
 
 test_path=os.path.abspath(os.path.dirname(os.path.realpath(__file__)))
-service_dir=os.path.join(test_path, "../../../..")
-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")
-    services_dir=os.path.join(xos_dir, "../../xos_services")
-
-# While transitioning from static to dynamic load, the path to find neighboring xproto files has changed. So check
-# both possible locations...
-def get_models_fn(service_name, xproto_name):
-    name = os.path.join(service_name, "xos", xproto_name)
-    if os.path.exists(os.path.join(services_dir, name)):
-        return name
-    else:
-        name = os.path.join(service_name, "xos", "synchronizer", "models", xproto_name)
-        if os.path.exists(os.path.join(services_dir, name)):
-            return name
-    raise Exception("Unable to find service=%s xproto=%s" % (service_name, xproto_name))
 
 class TestModelPolicyVOLTServiceInstance(unittest.TestCase):
     def setUp(self):
         global VOLTServiceInstancePolicy, MockObjectList
 
         self.sys_path_save = sys.path
-        sys.path.append(xos_dir)
-        sys.path.append(os.path.join(xos_dir, 'synchronizers', 'new_base'))
 
         config = os.path.join(test_path, "../test_config.yaml")
         from xosconfig import Config
         Config.clear()
         Config.init(config, 'synchronizer-config-schema.yaml')
 
-        from synchronizers.new_base.mock_modelaccessor_build import build_mock_modelaccessor
-        build_mock_modelaccessor(xos_dir, services_dir, [get_models_fn("olt-service", "volt.xproto"),
-                                                         get_models_fn("vsg", "vsg.xproto"),
-                                                         get_models_fn("../profiles/rcord", "rcord.xproto")])
+        from xossynchronizer.mock_modelaccessor_build import mock_modelaccessor_config
+        mock_modelaccessor_config(test_path, [("olt-service", "volt.xproto"),
+                                                ("vsg", "vsg.xproto"),
+                                                ("../profiles/rcord", "rcord.xproto"),])
 
-        import synchronizers.new_base.modelaccessor
-        import model_policy_voltserviceinstance
-        from model_policy_voltserviceinstance import VOLTServiceInstancePolicy, model_accessor
+        import xossynchronizer.modelaccessor
+        import mock_modelaccessor
+        reload(mock_modelaccessor) # in case nose2 loaded it in a previous test
+        reload(xossynchronizer.modelaccessor)      # in case nose2 loaded it in a previous test
+
+        from xossynchronizer.modelaccessor import model_accessor
+        self.model_accessor = model_accessor
 
         from mock_modelaccessor import MockObjectList
+        from model_policy_voltserviceinstance import VOLTServiceInstancePolicy
 
         # import all class names to globals
         for (k, v) in model_accessor.all_model_classes.items():
@@ -70,7 +56,7 @@
         # tags. Ideally, this wouldn't happen, but it does. So make sure we reset the world.
         model_accessor.reset_all_object_stores()
 
-        self.policy = VOLTServiceInstancePolicy()
+        self.policy = VOLTServiceInstancePolicy(model_accessor=self.model_accessor)
         self.si = Mock()
 
     def tearDown(self):
diff --git a/xos/synchronizer/models/test_models.py b/xos/synchronizer/models/test_models.py
index 92a939b..3ede98c 100644
--- a/xos/synchronizer/models/test_models.py
+++ b/xos/synchronizer/models/test_models.py
@@ -31,6 +31,7 @@
         self.models_decl.OLTDevice_decl.delete = Mock()
 
         modules = {
+            'xos': MagicMock(),
             'xos.exceptions': self.xos.exceptions,
             'models_decl': self.models_decl,
         }
@@ -97,6 +98,7 @@
         self.models_decl.ONUDevice_decl.delete = Mock()
 
         modules = {
+            'xos': MagicMock(),
             'xos.exceptions': self.xos.exceptions,
             'models_decl': self.models_decl,
         }
diff --git a/xos/synchronizer/pull_steps/pull_olts.py b/xos/synchronizer/pull_steps/pull_olts.py
index 574a527..c7a7c16 100644
--- a/xos/synchronizer/pull_steps/pull_olts.py
+++ b/xos/synchronizer/pull_steps/pull_olts.py
@@ -12,8 +12,8 @@
 # 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 model_accessor, OLTDevice, VOLTService, PONPort, NNIPort
+from xossynchronizer.pull_steps.pullstep import PullStep
+from xossynchronizer.modelaccessor import model_accessor, OLTDevice, VOLTService, PONPort, NNIPort
 
 from xosconfig import Config
 from multistructlog import create_logger
@@ -30,8 +30,8 @@
 log = create_logger(Config().get('logging'))
 
 class OLTDevicePullStep(PullStep):
-    def __init__(self):
-        super(OLTDevicePullStep, self).__init__(observed_model=OLTDevice)
+    def __init__(self, model_accessor):
+        super(OLTDevicePullStep, self).__init__(model_accessor=model_accessor, observed_model=OLTDevice)
 
     @staticmethod
     def get_ids_from_logical_device(o):
diff --git a/xos/synchronizer/pull_steps/pull_onus.py b/xos/synchronizer/pull_steps/pull_onus.py
index c94e956..c30f52c 100644
--- a/xos/synchronizer/pull_steps/pull_onus.py
+++ b/xos/synchronizer/pull_steps/pull_onus.py
@@ -12,8 +12,8 @@
 # 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 model_accessor, ONUDevice, VOLTService, OLTDevice, PONPort, PONONUPort, UNIPort
+from xossynchronizer.pull_steps.pullstep import PullStep
+from xossynchronizer.modelaccessor import model_accessor, ONUDevice, VOLTService, OLTDevice, PONPort, PONONUPort, UNIPort
 
 from xosconfig import Config
 from multistructlog import create_logger
@@ -30,8 +30,8 @@
 log = create_logger(Config().get('logging'))
 
 class ONUDevicePullStep(PullStep):
-    def __init__(self):
-        super(ONUDevicePullStep, self).__init__(observed_model=ONUDevice)
+    def __init__(self, model_accessor):
+        super(ONUDevicePullStep, self).__init__(model_accessor=model_accessor, observed_model=ONUDevice)
 
     def pull_records(self):
         log.debug("pulling ONU devices from VOLTHA")
diff --git a/xos/synchronizer/pull_steps/test_pull_olts.py b/xos/synchronizer/pull_steps/test_pull_olts.py
index 755f4fb..0859bdf 100644
--- a/xos/synchronizer/pull_steps/test_pull_olts.py
+++ b/xos/synchronizer/pull_steps/test_pull_olts.py
@@ -18,27 +18,7 @@
 
 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")
-    services_dir = os.path.join(xos_dir, "../../xos_services")
-sys.path.append(xos_dir)
-sys.path.append(os.path.join(xos_dir, 'synchronizers', 'new_base'))
-# END Hack to load synchronizer framework
-
-# generate model from xproto
-def get_models_fn(service_name, xproto_name):
-    name = os.path.join(service_name, "xos", xproto_name)
-    if os.path.exists(os.path.join(services_dir, name)):
-        return name
-    else:
-        name = os.path.join(service_name, "xos", "synchronizer", "models", xproto_name)
-        if os.path.exists(os.path.join(services_dir, name)):
-            return name
-    raise Exception("Unable to find service=%s xproto=%s" % (service_name, xproto_name))
-# END generate model from xproto
 
 class TestSyncOLTDevice(unittest.TestCase):
 
@@ -46,8 +26,6 @@
         global DeferredException
 
         self.sys_path_save = sys.path
-        sys.path.append(xos_dir)
-        sys.path.append(os.path.join(xos_dir, 'synchronizers', 'new_base'))
 
         # Setting up the config module
         from xosconfig import Config
@@ -56,16 +34,18 @@
         Config.init(config, "synchronizer-config-schema.yaml")
         # END Setting up the config module
 
-        from synchronizers.new_base.mock_modelaccessor_build import build_mock_modelaccessor
-        # build_mock_modelaccessor(xos_dir, services_dir, [get_models_fn("olt-service", "volt.xproto")])
+        from xossynchronizer.mock_modelaccessor_build import mock_modelaccessor_config
+        mock_modelaccessor_config(test_path, [("olt-service", "volt.xproto"),
+                                                ("vsg", "vsg.xproto"),
+                                                ("../profiles/rcord", "rcord.xproto"),])
 
-        # FIXME this is to get jenkins to pass the tests, somehow it is running tests in a different order
-        # and apparently it is not overriding the generated model accessor
-        build_mock_modelaccessor(xos_dir, services_dir, [get_models_fn("olt-service", "volt.xproto"),
-                                                         get_models_fn("vsg", "vsg.xproto"),
-                                                         get_models_fn("../profiles/rcord", "rcord.xproto")])
-        import synchronizers.new_base.modelaccessor
-        from pull_olts import OLTDevicePullStep, model_accessor
+        import xossynchronizer.modelaccessor
+        reload(xossynchronizer.modelaccessor)      # in case nose2 loaded it in a previous test
+
+        from xossynchronizer.modelaccessor import model_accessor
+        self.model_accessor = model_accessor
+
+        from pull_olts import OLTDevicePullStep
 
         # import all class names to globals
         for (k, v) in model_accessor.all_model_classes.items():
@@ -144,7 +124,7 @@
             m.get("http://voltha_url:1234/api/v1/devices/test_id/ports", status_code=200, json=self.ports)
             m.get("http://voltha_url:1234/api/v1/logical_devices", status_code=200, json=self.logical_devices)
 
-            self.sync_step().pull_records()
+            self.sync_step(model_accessor=self.model_accessor).pull_records()
 
             # TODO how to asster this?
             # self.assertEqual(existing_olt.admin_state, "ENABLED")
@@ -178,7 +158,7 @@
             m.get("http://voltha_url:1234/api/v1/devices/test_id/ports", status_code=200, json=self.ports)
             m.get("http://voltha_url:1234/api/v1/logical_devices", status_code=200, json=self.logical_devices)
 
-            self.sync_step().pull_records()
+            self.sync_step(model_accessor=self.model_accessor).pull_records()
 
             self.assertEqual(existing_olt.admin_state, "ENABLED")
             self.assertEqual(existing_olt.oper_status, "ACTIVE")
@@ -211,7 +191,7 @@
             m.get("http://voltha_url:1234/api/v1/devices/test_id/ports", status_code=200, json=self.ports)
             m.get("http://voltha_url:1234/api/v1/logical_devices", status_code=200, json=self.logical_devices)
 
-            self.sync_step().pull_records()
+            self.sync_step(model_accessor=self.model_accessor).pull_records()
 
             mock_olt_save.assert_not_called()
             mock_pon_save.assert_called()
@@ -233,7 +213,7 @@
             olt_service_mock.return_value = [self.volt_service]
             mock_get.return_value = [existing_olt]
 
-            self.sync_step().pull_records()
+            self.sync_step(model_accessor=self.model_accessor).pull_records()
 
             mock_olt_delete.assert_called()
 
diff --git a/xos/synchronizer/pull_steps/test_pull_onus.py b/xos/synchronizer/pull_steps/test_pull_onus.py
index 0898018..cafb435 100644
--- a/xos/synchronizer/pull_steps/test_pull_onus.py
+++ b/xos/synchronizer/pull_steps/test_pull_onus.py
@@ -19,27 +19,7 @@
 
 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")
-    services_dir = os.path.join(xos_dir, "../../xos_services")
-sys.path.append(xos_dir)
-sys.path.append(os.path.join(xos_dir, 'synchronizers', 'new_base'))
-# END Hack to load synchronizer framework
-
-# generate model from xproto
-def get_models_fn(service_name, xproto_name):
-    name = os.path.join(service_name, "xos", xproto_name)
-    if os.path.exists(os.path.join(services_dir, name)):
-        return name
-    else:
-        name = os.path.join(service_name, "xos", "synchronizer", "models", xproto_name)
-        if os.path.exists(os.path.join(services_dir, name)):
-            return name
-    raise Exception("Unable to find service=%s xproto=%s" % (service_name, xproto_name))
-# END generate model from xproto
 
 class TestPullONUDevice(unittest.TestCase):
 
@@ -47,8 +27,6 @@
         global DeferredException
 
         self.sys_path_save = sys.path
-        sys.path.append(xos_dir)
-        sys.path.append(os.path.join(xos_dir, 'synchronizers', 'new_base'))
 
         # Setting up the config module
         from xosconfig import Config
@@ -57,16 +35,18 @@
         Config.init(config, "synchronizer-config-schema.yaml")
         # END Setting up the config module
 
-        from synchronizers.new_base.mock_modelaccessor_build import build_mock_modelaccessor
-        # build_mock_modelaccessor(xos_dir, services_dir, [get_models_fn("olt-service", "volt.xproto")])
+        from xossynchronizer.mock_modelaccessor_build import mock_modelaccessor_config
+        mock_modelaccessor_config(test_path, [("olt-service", "volt.xproto"),
+                                                ("vsg", "vsg.xproto"),
+                                                ("../profiles/rcord", "rcord.xproto"),])
 
-        # FIXME this is to get jenkins to pass the tests, somehow it is running tests in a different order
-        # and apparently it is not overriding the generated model accessor
-        build_mock_modelaccessor(xos_dir, services_dir, [get_models_fn("olt-service", "volt.xproto"),
-                                                         get_models_fn("vsg", "vsg.xproto"),
-                                                         get_models_fn("../profiles/rcord", "rcord.xproto")])
-        import synchronizers.new_base.modelaccessor
-        from pull_onus import ONUDevicePullStep, model_accessor
+        import xossynchronizer.modelaccessor
+        reload(xossynchronizer.modelaccessor)      # in case nose2 loaded it in a previous test
+
+        from xossynchronizer.modelaccessor import model_accessor
+        self.model_accessor = model_accessor
+
+        from pull_onus import ONUDevicePullStep
 
         # import all class names to globals
         for (k, v) in model_accessor.all_model_classes.items():
@@ -180,7 +160,7 @@
             m.get("http://voltha_url:1234/api/v1/devices", status_code=200, json=self.devices)
             m.get("http://voltha_url:1234/api/v1/devices/0001130158f01b2d/ports", status_code=200, json=self.ports)
 
-            self.sync_step().pull_records()
+            self.sync_step(model_accessor=self.model_accessor).pull_records()
 
             saved_onu = mock_save.call_args[0][0]
 
@@ -222,7 +202,7 @@
             m.get("http://voltha_url:1234/api/v1/devices/0001130158f01b2d/ports", status_code=200, json=self.ports)
             m.get("http://voltha_url:1234/api/v1/devices/0001130158f01b2e/ports", status_code=200, json=self.ports)
 
-            self.sync_step().pull_records()
+            self.sync_step(model_accessor=self.model_accessor).pull_records()
 
             self.assertEqual(mock_save.call_count, 1)
             saved_onu = mock_save.call_args[0][0]
@@ -261,7 +241,7 @@
             m.get("http://voltha_url:1234/api/v1/devices/0001130158f01b2d/ports", status_code=200, json=self.ports)
             m.get("http://voltha_url:1234/api/v1/devices/0001130158f01b2e/ports", status_code=200, json=self.ports)
 
-            self.sync_step().pull_records()
+            self.sync_step(model_accessor=self.model_accessor).pull_records()
 
             self.assertEqual(mock_save.call_count, 1)
             saved_onu = mock_save.call_args[0][0]
diff --git a/xos/synchronizer/steps/sync_olt_device.py b/xos/synchronizer/steps/sync_olt_device.py
index e1c1c4a..c56d0ab 100644
--- a/xos/synchronizer/steps/sync_olt_device.py
+++ b/xos/synchronizer/steps/sync_olt_device.py
@@ -17,8 +17,8 @@
 import requests
 from multistructlog import create_logger
 from requests.auth import HTTPBasicAuth
-from synchronizers.new_base.syncstep import SyncStep, DeferredException
-from synchronizers.new_base.modelaccessor import OLTDevice, model_accessor
+from xossynchronizer.steps.syncstep import SyncStep, DeferredException
+from xossynchronizer.modelaccessor import OLTDevice, model_accessor
 from xosconfig import Config
 
 import os, sys
diff --git a/xos/synchronizer/steps/sync_onu_device.py b/xos/synchronizer/steps/sync_onu_device.py
index 611496b..004aa09 100644
--- a/xos/synchronizer/steps/sync_onu_device.py
+++ b/xos/synchronizer/steps/sync_onu_device.py
@@ -20,8 +20,8 @@
 import requests
 from multistructlog import create_logger
 from requests.auth import HTTPBasicAuth
-from synchronizers.new_base.modelaccessor import ONUDevice, model_accessor
-from synchronizers.new_base.syncstep import SyncStep
+from xossynchronizer.modelaccessor import ONUDevice, model_accessor
+from xossynchronizer.steps.syncstep import SyncStep
 from xosconfig import Config
 
 log = create_logger(Config().get("logging"))
diff --git a/xos/synchronizer/steps/sync_volt_service_instance.py b/xos/synchronizer/steps/sync_volt_service_instance.py
index 5ec0328..e2513ef 100644
--- a/xos/synchronizer/steps/sync_volt_service_instance.py
+++ b/xos/synchronizer/steps/sync_volt_service_instance.py
@@ -20,8 +20,8 @@
 import requests
 from multistructlog import create_logger
 from requests.auth import HTTPBasicAuth
-from synchronizers.new_base.modelaccessor import VOLTService, VOLTServiceInstance, ServiceInstance, model_accessor
-from synchronizers.new_base.syncstep import SyncStep, DeferredException
+from xossynchronizer.modelaccessor import VOLTService, VOLTServiceInstance, ServiceInstance, model_accessor
+from xossynchronizer.steps.syncstep import SyncStep, DeferredException
 from xosconfig import Config
 
 log = create_logger(Config().get("logging"))
diff --git a/xos/synchronizer/steps/test_sync_olt_device.py b/xos/synchronizer/steps/test_sync_olt_device.py
index 50302d5..9fbee7c 100644
--- a/xos/synchronizer/steps/test_sync_olt_device.py
+++ b/xos/synchronizer/steps/test_sync_olt_device.py
@@ -20,27 +20,7 @@
 
 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")
-    services_dir = os.path.join(xos_dir, "../../xos_services")
-sys.path.append(xos_dir)
-sys.path.append(os.path.join(xos_dir, 'synchronizers', 'new_base'))
-# END of hack to load synchronizer framework
-
-# Generate model from xproto
-def get_models_fn(service_name, xproto_name):
-    name = os.path.join(service_name, "xos", xproto_name)
-    if os.path.exists(os.path.join(services_dir, name)):
-        return name
-    else:
-        name = os.path.join(service_name, "xos", "synchronizer", "models", xproto_name)
-        if os.path.exists(os.path.join(services_dir, name)):
-            return name
-    raise Exception("Unable to find service=%s xproto=%s" % (service_name, xproto_name))
-# END generate model from xproto
 
 def match_json(desired, req):
     if desired!=req.json():
@@ -52,8 +32,6 @@
     def setUp(self):
         global DeferredException
         self.sys_path_save = sys.path
-        sys.path.append(xos_dir)
-        sys.path.append(os.path.join(xos_dir, 'synchronizers', 'new_base'))
 
         # Setting up the config module
         from xosconfig import Config
@@ -62,16 +40,17 @@
         Config.init(config, "synchronizer-config-schema.yaml")
         # END setting up the config module
 
-        from synchronizers.new_base.mock_modelaccessor_build import build_mock_modelaccessor
-        # build_mock_modelaccessor(xos_dir, services_dir, [get_models_fn("olt-service", "volt.xproto")])
+        from xossynchronizer.mock_modelaccessor_build import mock_modelaccessor_config
+        mock_modelaccessor_config(test_path, [("olt-service", "volt.xproto"),
+                                                ("vsg", "vsg.xproto"),
+                                                ("../profiles/rcord", "rcord.xproto"),])
 
-        # FIXME this is to get jenkins to pass the tests, somehow it is running tests in a different order
-        # and apparently it is not overriding the generated model accessor
-        build_mock_modelaccessor(xos_dir, services_dir, [get_models_fn("olt-service", "volt.xproto"),
-                                                         get_models_fn("vsg", "vsg.xproto"),
-                                                         get_models_fn("../profiles/rcord", "rcord.xproto")])
+        import xossynchronizer.modelaccessor
+        reload(xossynchronizer.modelaccessor)      # in case nose2 loaded it in a previous test
 
-        import synchronizers.new_base.modelaccessor
+        from xossynchronizer.modelaccessor import model_accessor
+        self.model_accessor = model_accessor
+
         from sync_olt_device import SyncOLTDevice, DeferredException
         self.sync_step = SyncOLTDevice
 
@@ -145,7 +124,7 @@
         m.post("http://voltha_url:1234/api/v1/devices", status_code=500, text="MockError")
 
         with self.assertRaises(Exception) as e:
-            self.sync_step().sync_record(self.o)
+            self.sync_step(model_accessor=self.model_accessor).sync_record(self.o)
         self.assertEqual(e.exception.message, "Failed to add OLT device: MockError")
 
     @requests_mock.Mocker()
@@ -156,7 +135,7 @@
         m.post("http://voltha_url:1234/api/v1/devices", status_code=200, json={"id": ""})
 
         with self.assertRaises(Exception) as e:
-            self.sync_step().sync_record(self.o)
+            self.sync_step(model_accessor=self.model_accessor).sync_record(self.o)
         self.assertEqual(e.exception.message, "VOLTHA Device Id is empty. This probably means that the OLT device is already provisioned in VOLTHA")
 
     @requests_mock.Mocker()
@@ -168,7 +147,7 @@
         m.post("http://voltha_url:1234/api/v1/devices/123/enable", status_code=500, text="EnableError")
 
         with self.assertRaises(Exception) as e:
-            self.sync_step().sync_record(self.o)
+            self.sync_step(model_accessor=self.model_accessor).sync_record(self.o)
 
         self.assertEqual(e.exception.message, "Failed to enable OLT device: EnableError")
 
@@ -206,7 +185,7 @@
         m.post("http://onos:4321/onos/v1/network/configuration/", status_code=200, json=onos_expected_conf,
                additional_matcher=functools.partial(match_json, onos_expected_conf))
 
-        self.sync_step().sync_record(self.o)
+        self.sync_step(model_accessor=self.model_accessor).sync_record(self.o)
         self.assertEqual(self.o.admin_state, "ENABLED")
         self.assertEqual(self.o.oper_status, "ACTIVE")
         self.assertEqual(self.o.serial_number, "foobar")
@@ -256,7 +235,7 @@
         }
         m.get("http://voltha_url:1234/api/v1/logical_devices", status_code=200, json=logical_devices)
 
-        self.sync_step().sync_record(self.o)
+        self.sync_step(model_accessor=self.model_accessor).sync_record(self.o)
         self.assertEqual(self.o.admin_state, "ENABLED")
         self.assertEqual(self.o.oper_status, "ACTIVE")
         self.assertEqual(self.o.of_id, "0001000ce2314000")
@@ -297,7 +276,7 @@
         m.get("http://voltha_url:1234/api/v1/logical_devices", status_code=200, json=logical_devices)
 
         with self.assertRaises(Exception) as e:
-            self.sync_step().sync_record(self.o)
+            self.sync_step(model_accessor=self.model_accessor).sync_record(self.o)
 
         self.assertEqual(e.exception.message, "It was not possible to activate OLTDevice with id 1")
         self.assertEqual(self.o.oper_status, "ERROR")
@@ -334,7 +313,7 @@
         m.post("http://onos:4321/onos/v1/network/configuration/", status_code=200, json=expected_conf,
                additional_matcher=functools.partial(match_json, expected_conf))
 
-        self.sync_step().sync_record(self.o)
+        self.sync_step(model_accessor=self.model_accessor).sync_record(self.o)
         self.o.save.assert_not_called()
 
     @requests_mock.Mocker()
@@ -358,7 +337,7 @@
         m.post("http://voltha_url:1234/api/v1/devices", status_code=200, json=self.voltha_devices_response, additional_matcher=functools.partial(match_json, expected_conf))
         m.post("http://voltha_url:1234/api/v1/devices/123/disable", status_code=200)
 
-        self.sync_step().sync_record(self.o)
+        self.sync_step(model_accessor=self.model_accessor).sync_record(self.o)
 
         # No saves as state has not changed (will eventually be saved by synchronizer framework to update backend_status)
         self.assertEqual(self.o.save.call_count, 0)
@@ -388,7 +367,7 @@
 
         m.post("http://voltha_url:1234/api/v1/devices", status_code=200, json=self.voltha_devices_response, additional_matcher=functools.partial(match_json, expected_conf))
 
-        self.sync_step().sync_record(self.o)
+        self.sync_step(model_accessor=self.model_accessor).sync_record(self.o)
 
         # No saves as state has not changed (will eventually be saved by synchronizer framework to update backend_status)
         self.assertEqual(self.o.save.call_count, 0)
@@ -401,7 +380,7 @@
         m.post("http://voltha_url:1234/api/v1/devices/123/disable", status_code=200)
         m.delete("http://voltha_url:1234/api/v1/devices/123/delete", status_code=200)
 
-        self.sync_step().delete_record(self.o)
+        self.sync_step(model_accessor=self.model_accessor).delete_record(self.o)
 
         self.assertEqual(m.call_count, 2)
 
@@ -412,7 +391,7 @@
 
         m.side_effect = ConnectionError()
 
-        self.sync_step().delete_record(self.o)
+        self.sync_step(model_accessor=self.model_accessor).delete_record(self.o)
 
         # No exception thrown, as ConnectionError will be caught
 
@@ -420,7 +399,7 @@
     @requests_mock.Mocker()
     def test_delete_unsynced_record(self, m):
         
-        self.sync_step().delete_record(self.o)
+        self.sync_step(model_accessor=self.model_accessor).delete_record(self.o)
 
         self.assertEqual(m.call_count, 0)
 
diff --git a/xos/synchronizer/steps/test_sync_onu_device.py b/xos/synchronizer/steps/test_sync_onu_device.py
index abd72f7..f624540 100644
--- a/xos/synchronizer/steps/test_sync_onu_device.py
+++ b/xos/synchronizer/steps/test_sync_onu_device.py
@@ -18,34 +18,12 @@
 
 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")
-    services_dir = os.path.join(xos_dir, "../../xos_services")
-sys.path.append(xos_dir)
-sys.path.append(os.path.join(xos_dir, 'synchronizers', 'new_base'))
-# END Hack to load synchronizer framework
-
-# generate model from xproto
-def get_models_fn(service_name, xproto_name):
-    name = os.path.join(service_name, "xos", xproto_name)
-    if os.path.exists(os.path.join(services_dir, name)):
-        return name
-    else:
-        name = os.path.join(service_name, "xos", "synchronizer", "models", xproto_name)
-        if os.path.exists(os.path.join(services_dir, name)):
-            return name
-    raise Exception("Unable to find service=%s xproto=%s" % (service_name, xproto_name))
-# END generate model from xproto
 
 class TestSyncVOLTServiceInstance(unittest.TestCase):
     def setUp(self):
 
         self.sys_path_save = sys.path
-        sys.path.append(xos_dir)
-        sys.path.append(os.path.join(xos_dir, 'synchronizers', 'new_base'))
 
         # Setting up the config module
         from xosconfig import Config
@@ -54,16 +32,18 @@
         Config.init(config, "synchronizer-config-schema.yaml")
         # END Setting up the config module
 
-        from synchronizers.new_base.mock_modelaccessor_build import build_mock_modelaccessor
-        # build_mock_modelaccessor(xos_dir, services_dir, [get_models_fn("olt-service", "volt.xproto")])
+        from xossynchronizer.mock_modelaccessor_build import mock_modelaccessor_config
+        mock_modelaccessor_config(test_path, [("olt-service", "volt.xproto"),
+                                                ("vsg", "vsg.xproto"),
+                                                ("../profiles/rcord", "rcord.xproto"),])
 
-        # FIXME this is to get jenkins to pass the tests, somehow it is running tests in a different order
-        # and apparently it is not overriding the generated model accessor
-        build_mock_modelaccessor(xos_dir, services_dir, [get_models_fn("olt-service", "volt.xproto"),
-                                                         get_models_fn("vsg", "vsg.xproto"),
-                                                         get_models_fn("../profiles/rcord", "rcord.xproto")])
-        import synchronizers.new_base.modelaccessor
-        from synchronizers.new_base.syncstep import DeferredException
+        import xossynchronizer.modelaccessor
+        reload(xossynchronizer.modelaccessor)      # in case nose2 loaded it in a previous test
+
+        from xossynchronizer.modelaccessor import model_accessor
+        self.model_accessor = model_accessor
+
+        from xossynchronizer.steps.syncstep import DeferredException
         from sync_onu_device import SyncONUDevice, model_accessor
 
         # import all class names to globals
@@ -91,7 +71,7 @@
         m.post("http://voltha_url:1234/api/v1/devices/test_id/enable")
 
         self.o.admin_state = "ENABLED"
-        self.sync_step().sync_record(self.o)
+        self.sync_step(model_accessor=self.model_accessor).sync_record(self.o)
         self.assertTrue(m.called)
 
     @requests_mock.Mocker()
@@ -99,7 +79,7 @@
         m.post("http://voltha_url:1234/api/v1/devices/test_id/disable")
 
         self.o.admin_state = "DISABLED"
-        self.sync_step().sync_record(self.o)
+        self.sync_step(model_accessor=self.model_accessor).sync_record(self.o)
         self.assertTrue(m.called)
 
     @requests_mock.Mocker()
@@ -109,7 +89,7 @@
         self.o.admin_state = "DISABLED"
 
         with self.assertRaises(Exception) as e:
-            self.sync_step().sync_record(self.o)
+            self.sync_step(model_accessor=self.model_accessor).sync_record(self.o)
             self.assertTrue(m.called)
             self.assertEqual(e.exception.message, "Failed to disable ONU device: Mock Error")
 
diff --git a/xos/synchronizer/steps/test_sync_volt_service_instance.py b/xos/synchronizer/steps/test_sync_volt_service_instance.py
index c247178..927458a 100644
--- a/xos/synchronizer/steps/test_sync_volt_service_instance.py
+++ b/xos/synchronizer/steps/test_sync_volt_service_instance.py
@@ -19,35 +19,13 @@
 
 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")
-    services_dir = os.path.join(xos_dir, "../../xos_services")
-sys.path.append(xos_dir)
-sys.path.append(os.path.join(xos_dir, 'synchronizers', 'new_base'))
-# END Hack to load synchronizer framework
-
-# generate model from xproto
-def get_models_fn(service_name, xproto_name):
-    name = os.path.join(service_name, "xos", xproto_name)
-    if os.path.exists(os.path.join(services_dir, name)):
-        return name
-    else:
-        name = os.path.join(service_name, "xos", "synchronizer", "models", xproto_name)
-        if os.path.exists(os.path.join(services_dir, name)):
-            return name
-    raise Exception("Unable to find service=%s xproto=%s" % (service_name, xproto_name))
-# END generate model from xproto
 
 class TestSyncVOLTServiceInstance(unittest.TestCase):
     def setUp(self):
         global DeferredException
 
         self.sys_path_save = sys.path
-        sys.path.append(xos_dir)
-        sys.path.append(os.path.join(xos_dir, 'synchronizers', 'new_base'))
 
         # Setting up the config module
         from xosconfig import Config
@@ -56,16 +34,18 @@
         Config.init(config, "synchronizer-config-schema.yaml")
         # END Setting up the config module
 
-        from synchronizers.new_base.mock_modelaccessor_build import build_mock_modelaccessor
-        # build_mock_modelaccessor(xos_dir, services_dir, [get_models_fn("olt-service", "volt.xproto")])
+        from xossynchronizer.mock_modelaccessor_build import mock_modelaccessor_config
+        mock_modelaccessor_config(test_path, [("olt-service", "volt.xproto"),
+                                              ("vsg", "vsg.xproto"),
+                                              ("../profiles/rcord", "rcord.xproto"), ])
 
-        # FIXME this is to get jenkins to pass the tests, somehow it is running tests in a different order
-        # and apparently it is not overriding the generated model accessor
-        build_mock_modelaccessor(xos_dir, services_dir, [get_models_fn("olt-service", "volt.xproto"),
-                                                         get_models_fn("vsg", "vsg.xproto"),
-                                                         get_models_fn("../profiles/rcord", "rcord.xproto")])
-        import synchronizers.new_base.modelaccessor
-        from synchronizers.new_base.syncstep import DeferredException
+        import xossynchronizer.modelaccessor
+        reload(xossynchronizer.modelaccessor)  # in case nose2 loaded it in a previous test
+
+        from xossynchronizer.modelaccessor import model_accessor
+        self.model_accessor = model_accessor
+
+        from xossynchronizer.steps.syncstep import DeferredException
         from sync_volt_service_instance import SyncVOLTServiceInstance, model_accessor
 
         # import all class names to globals
@@ -113,7 +93,7 @@
             olt_service_mock.return_value = self.volt_service
 
             with self.assertRaises(DeferredException) as e:
-                self.sync_step().sync_record(self.o)
+                self.sync_step(model_accessor=self.model_accessor).sync_record(self.o)
 
             self.assertFalse(m.called)
             self.assertEqual(e.exception.message, "Waiting for OLTDevice Test OLT Device to be synchronized")
@@ -128,7 +108,7 @@
         with patch.object(VOLTService.objects, "get") as olt_service_mock:
             olt_service_mock.return_value = self.volt_service
 
-            self.sync_step().sync_record(self.o)
+            self.sync_step(model_accessor=self.model_accessor).sync_record(self.o)
             self.assertTrue(m.called)
             self.assertEqual(self.o.backend_handle, "of:dp_id/uni_port_id")
 
@@ -143,7 +123,7 @@
             olt_service_mock.return_value = self.volt_service
 
             with self.assertRaises(Exception) as e:
-                self.sync_step().sync_record(self.o)
+                self.sync_step(model_accessor=self.model_accessor).sync_record(self.o)
                 self.assertTrue(m.called)
                 self.assertEqual(e.exception.message, "Failed to add subscriber in onos voltha: Mock Error")
 
@@ -157,7 +137,7 @@
         with patch.object(VOLTService.objects, "get") as olt_service_mock:
             olt_service_mock.return_value = self.volt_service
 
-            self.sync_step().delete_record(self.o)
+            self.sync_step(model_accessor=self.model_accessor).delete_record(self.o)
             self.assertTrue(m.called)
             self.assertEqual(m.call_count, 1)
 
diff --git a/xos/synchronizer/volt-synchronizer.py b/xos/synchronizer/volt-synchronizer.py
index 337472d..5f82ca5 100755
--- a/xos/synchronizer/volt-synchronizer.py
+++ b/xos/synchronizer/volt-synchronizer.py
@@ -16,9 +16,8 @@
 
 # This imports and runs ../../xos-observer.py
 
-import importlib
 import os
-import sys
+from xossynchronizer import Synchronizer
 from xosconfig import Config
 
 base_config_file = os.path.abspath(os.path.dirname(os.path.realpath(__file__)) + '/config.yaml')
@@ -29,7 +28,4 @@
 else:
     Config.init(base_config_file, 'synchronizer-config-schema.yaml')
 
-observer_path = os.path.join(os.path.dirname(os.path.realpath(__file__)),"../../synchronizers/new_base")
-sys.path.append(observer_path)
-mod = importlib.import_module("xos-synchronizer")
-mod.main()
+Synchronizer().run()
