diff --git a/Dockerfile.synchronizer b/Dockerfile.synchronizer
index d854ee4..4604d9b 100644
--- a/Dockerfile.synchronizer
+++ b/Dockerfile.synchronizer
@@ -15,7 +15,7 @@
 # docker build -t xosproject/vrouter-synchronizer:candidate -f Dockerfile.synchronizer .
 
 # xosproject/vrouter-synchronizer
-FROM xosproject/xos-synchronizer-base:2.1.32
+FROM xosproject/xos-synchronizer-base:2.1.38
 
 COPY xos/synchronizer /opt/xos/synchronizers/vrouter
 COPY VERSION /opt/xos/synchronizers/vrouter/
diff --git a/VERSION b/VERSION
index e010258..157e54f 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-2.0.5
+2.0.6
diff --git a/xos/synchronizer/steps/sync_routes.py b/xos/synchronizer/steps/sync_routes.py
index 0293a14..328f6a6 100644
--- a/xos/synchronizer/steps/sync_routes.py
+++ b/xos/synchronizer/steps/sync_routes.py
@@ -15,8 +15,8 @@
 
 import requests
 from requests.auth import HTTPBasicAuth
-from synchronizers.new_base.syncstep import SyncStep, DeferredException
-from synchronizers.new_base.modelaccessor import VRouterStaticRoute, model_accessor
+from xossynchronizer.steps.syncstep import SyncStep, DeferredException
+from xossynchronizer.modelaccessor import VRouterStaticRoute, model_accessor
 
 from helpers import Helpers
 from multistructlog import create_logger
diff --git a/xos/synchronizer/steps/test_sync_routes.py b/xos/synchronizer/steps/test_sync_routes.py
index d64272f..2a5ebc1 100644
--- a/xos/synchronizer/steps/test_sync_routes.py
+++ b/xos/synchronizer/steps/test_sync_routes.py
@@ -22,27 +22,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
 
 def match_json(desired, req):
     if desired!=req.json():
@@ -55,8 +35,6 @@
     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
@@ -65,12 +43,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("vrouter", "vrouter.xproto")])
-        import synchronizers.new_base.modelaccessor
+        from xossynchronizer.mock_modelaccessor_build import mock_modelaccessor_config
+        mock_modelaccessor_config(test_path, [("vrouter", "vrouter.xproto")])
+
+        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 sync_routes import SyncRoutes, model_accessor
 
+        self.model_accessor = model_accessor
+
         # import all class names to globals
         for (k, v) in model_accessor.all_model_classes.items():
             globals()[k] = v
@@ -122,7 +106,7 @@
                status_code=204,
                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.assertTrue(m.called)
 
@@ -141,7 +125,7 @@
                status_code=204,
                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.assertTrue(m.called)
 
@@ -160,7 +144,7 @@
             status_code=204,
             additional_matcher=functools.partial(match_json, expected_conf))
 
-        self.sync_step().delete_record(self.o)
+        self.sync_step(model_accessor = self.model_accessor).delete_record(self.o)
 
         self.assertTrue(m.called)
 
@@ -179,6 +163,6 @@
             status_code=204,
             additional_matcher=functools.partial(match_json, expected_conf))
 
-        self.sync_step().delete_record(self.o)
+        self.sync_step(model_accessor = self.model_accessor).delete_record(self.o)
 
         self.assertTrue(m.called)
diff --git a/xos/synchronizer/vrouter-synchronizer.py b/xos/synchronizer/vrouter-synchronizer.py
index 6eda455..14b3747 100644
--- a/xos/synchronizer/vrouter-synchronizer.py
+++ b/xos/synchronizer/vrouter-synchronizer.py
@@ -16,9 +16,8 @@
 
 # Runs the standard XOS synchronizer
 
-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')
 
-synchronizer_path = os.path.join(os.path.dirname(os.path.realpath(__file__)), "../../synchronizers/new_base")
-sys.path.append(synchronizer_path)
-mod = importlib.import_module("xos-synchronizer")
-mod.main()
+Synchronizer().run()
