diff --git a/lib/xos-genx/xosgenx/targets/mock_classes.xtarget b/lib/xos-genx/xosgenx/targets/mock_classes.xtarget
index bbc5ae2..00db7e5 100644
--- a/lib/xos-genx/xosgenx/targets/mock_classes.xtarget
+++ b/lib/xos-genx/xosgenx/targets/mock_classes.xtarget
@@ -95,7 +95,7 @@
     def leaf_model(self):
         return self
 
-    def save(self):
+    def save(self, update_fields=[]):
         if self.objects:
             self.objects.save(self)
 
diff --git a/xos/synchronizers/new_base/tests/steps/__init__.py b/xos/synchronizers/new_base/tests/steps/__init__.py
new file mode 100644
index 0000000..d4e8062
--- /dev/null
+++ b/xos/synchronizers/new_base/tests/steps/__init__.py
@@ -0,0 +1,16 @@
+
+# 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.
+
+
diff --git a/xos/synchronizers/new_base/tests/test_payload.py b/xos/synchronizers/new_base/tests/test_payload.py
index 56357f1..b893c85 100644
--- a/xos/synchronizers/new_base/tests/test_payload.py
+++ b/xos/synchronizers/new_base/tests/test_payload.py
@@ -13,8 +13,6 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-# TEST_FRAMEWORK: IGNORE
-
 import json
 import unittest
 from mock import patch
@@ -39,7 +37,7 @@
 
 class TestPayload(unittest.TestCase):
     def setUp(self):
-        global log, steps
+        global log, steps, event_loop
 
         self.sys_path_save = sys.path
         self.cwd_save = os.getcwd()
@@ -84,94 +82,100 @@
     @mock.patch("steps.sync_instances.syncstep.run_template",side_effect=run_fake_ansible_template)
     @mock.patch("event_loop.model_accessor")
     def test_delete_record(self, mock_run_template, mock_modelaccessor):
-        o = Instance()
-        o.name = "Sisi Pascal"
+        with mock.patch.object(Instance, "save") as instance_save:
+            o = Instance()
+            o.name = "Sisi Pascal"
 
-        o.synchronizer_step = steps.sync_instances.SyncInstances()
-        self.synchronizer.delete_record(o, log)
+            o.synchronizer_step = steps.sync_instances.SyncInstances()
+            self.synchronizer.delete_record(o, log)
 
-        a = get_ansible_output()
-        self.assertDictContainsSubset({'delete':True, 'name':o.name}, a)
-        o.save.assert_called_with(update_fields=['backend_need_reap'])
+            a = get_ansible_output()
+            self.assertDictContainsSubset({'delete':True, 'name':o.name}, a)
+            o.save.assert_called_with(update_fields=['backend_need_reap'])
         
     @mock.patch("steps.sync_instances.syncstep.run_template",side_effect=run_fake_ansible_template)
     @mock.patch("event_loop.model_accessor")
     def test_sync_record(self, mock_run_template, mock_modelaccessor):
-        o = Instance()
-        o.name = "Sisi Pascal"
+        with mock.patch.object(Instance, "save") as instance_save:
+            o = Instance()
+            o.name = "Sisi Pascal"
 
-        o.synchronizer_step = steps.sync_instances.SyncInstances()
-        self.synchronizer.sync_record(o, log)
+            o.synchronizer_step = steps.sync_instances.SyncInstances()
+            self.synchronizer.sync_record(o, log)
 
-        a = get_ansible_output()
-        self.assertDictContainsSubset({'delete':False, 'name':o.name}, a)
-        o.save.assert_called_with(update_fields=['enacted', 'backend_status', 'backend_register', 'backend_code'])
+            a = get_ansible_output()
+            self.assertDictContainsSubset({'delete':False, 'name':o.name}, a)
+            o.save.assert_called_with(update_fields=['enacted', 'backend_status', 'backend_register'])
 
     @mock.patch("steps.sync_instances.syncstep.run_template",side_effect=run_fake_ansible_template)
     @mock.patch("event_loop.model_accessor")
     def test_sync_cohort(self, mock_run_template, mock_modelaccessor):
-        cs = ControllerSlice()
-        s = Slice(name = 'SP SP')
-        cs.slice = s
+        with mock.patch.object(Instance, "save") as instance_save, \
+             mock.patch.object(ControllerSlice, "save") as controllerslice_save:
+            cs = ControllerSlice()
+            s = Slice(name = 'SP SP')
+            cs.slice = s
 
-        o = Instance()
-        o.name = "Sisi Pascal"
-        o.slice = s
+            o = Instance()
+            o.name = "Sisi Pascal"
+            o.slice = s
 
-        cohort = [cs, o]
-        o.synchronizer_step = steps.sync_instances.SyncInstances()
-        cs.synchronizer_step = steps.sync_controller_slices.SyncControllerSlices()
+            cohort = [cs, o]
+            o.synchronizer_step = steps.sync_instances.SyncInstances()
+            cs.synchronizer_step = steps.sync_controller_slices.SyncControllerSlices()
 
-        self.synchronizer.sync_cohort(cohort, False)
+            self.synchronizer.sync_cohort(cohort, False)
 
-        a = get_ansible_output()
-        self.assertDictContainsSubset({'delete':False, 'name':o.name}, a)
-        o.save.assert_called_with(update_fields=['enacted', 'backend_status', 'backend_register', 'backend_code'])
-        cs.save.assert_called_with(update_fields=['enacted', 'backend_status', 'backend_register', 'backend_code'])
+            a = get_ansible_output()
+            self.assertDictContainsSubset({'delete':False, 'name':o.name}, a)
+            o.save.assert_called_with(update_fields=['enacted', 'backend_status', 'backend_register'])
+            cs.save.assert_called_with(update_fields=['enacted', 'backend_status', 'backend_register'])
 
     @mock.patch("steps.sync_instances.syncstep.run_template",side_effect=run_fake_ansible_template)
     @mock.patch("event_loop.model_accessor")
     def test_deferred_exception(self, mock_run_template, mock_modelaccessor):
-        cs = ControllerSlice()
-        s = Slice(name = 'SP SP')
-        cs.slice = s
-        cs.force_defer = True
+        with mock.patch.object(Instance, "save") as instance_save:
+            cs = ControllerSlice()
+            s = Slice(name = 'SP SP')
+            cs.slice = s
+            cs.force_defer = True
 
-        o = Instance()
-        o.name = "Sisi Pascal"
-        o.slice = s
+            o = Instance()
+            o.name = "Sisi Pascal"
+            o.slice = s
 
-        cohort = [cs, o]
-        o.synchronizer_step = steps.sync_instances.SyncInstances()
-        cs.synchronizer_step = steps.sync_controller_slices.SyncControllerSlices()
+            cohort = [cs, o]
+            o.synchronizer_step = steps.sync_instances.SyncInstances()
+            cs.synchronizer_step = steps.sync_controller_slices.SyncControllerSlices()
 
-        self.synchronizer.sync_cohort(cohort, False)
-        o.save.assert_called_with(always_update_timestamp=True, update_fields=['backend_status', 'backend_code', 'backend_register'])
-        self.assertEqual(cs.backend_code, 1)
+            self.synchronizer.sync_cohort(cohort, False)
+            o.save.assert_called_with(always_update_timestamp=True, update_fields=['backend_status', 'backend_register'])
+            self.assertEqual(cs.backend_code, 0)
 
-        self.assertIn('Force', cs.backend_status)
-        self.assertIn('Failed due to', o.backend_status)
+            self.assertIn('Force', cs.backend_status)
+            self.assertIn('Failed due to', o.backend_status)
 
     @mock.patch("steps.sync_instances.syncstep.run_template",side_effect=run_fake_ansible_template)
     @mock.patch("event_loop.model_accessor")
     def test_backend_status(self, mock_run_template, mock_modelaccessor):
-        cs = ControllerSlice()
-        s = Slice(name = 'SP SP')
-        cs.slice = s
-        cs.force_fail = True
+        with mock.patch.object(Instance, "save") as instance_save:
+            cs = ControllerSlice()
+            s = Slice(name = 'SP SP')
+            cs.slice = s
+            cs.force_fail = True
 
-        o = Instance()
-        o.name = "Sisi Pascal"
-        o.slice = s
+            o = Instance()
+            o.name = "Sisi Pascal"
+            o.slice = s
 
-        cohort = [cs, o]
-        o.synchronizer_step = steps.sync_instances.SyncInstances()
-        cs.synchronizer_step = steps.sync_controller_slices.SyncControllerSlices()
+            cohort = [cs, o]
+            o.synchronizer_step = steps.sync_instances.SyncInstances()
+            cs.synchronizer_step = steps.sync_controller_slices.SyncControllerSlices()
 
-        self.synchronizer.sync_cohort(cohort, False)
-        o.save.assert_called_with(always_update_timestamp=True, update_fields=['backend_status', 'backend_code', 'backend_register'])
-        self.assertIn('Force', cs.backend_status)
-        self.assertIn('Failed due to', o.backend_status)
+            self.synchronizer.sync_cohort(cohort, False)
+            o.save.assert_called_with(always_update_timestamp=True, update_fields=['backend_status', 'backend_register'])
+            self.assertIn('Force', cs.backend_status)
+            self.assertIn('Failed due to', o.backend_status)
 
     @mock.patch("steps.sync_instances.syncstep.run_template",side_effect=run_fake_ansible_template)
     @mock.patch("event_loop.model_accessor")
diff --git a/xos/synchronizers/new_base/tests/test_run.py b/xos/synchronizers/new_base/tests/test_run.py
index 72167ec..c4ca3af 100644
--- a/xos/synchronizers/new_base/tests/test_run.py
+++ b/xos/synchronizers/new_base/tests/test_run.py
@@ -13,8 +13,6 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-# TEST_FRAMEWORK: IGNORE
-
 import unittest
 from mock import patch
 import mock
@@ -58,6 +56,11 @@
         reload(event_loop)
         import backend
         reload(backend)
+        from modelaccessor import model_accessor
+
+        # import all class names to globals
+        for (k, v) in model_accessor.all_model_classes.items():
+            globals()[k] = v
 
         b = backend.Backend()
         steps_dir = Config.get("steps_dir")
diff --git a/xos/synchronizers/new_base/tests/test_services.py b/xos/synchronizers/new_base/tests/test_services.py
index 4e46f38..fcfed20 100644
--- a/xos/synchronizers/new_base/tests/test_services.py
+++ b/xos/synchronizers/new_base/tests/test_services.py
@@ -13,8 +13,6 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-# TEST_FRAMEWORK: IGNORE
-
 import unittest
 from mock import patch
 import mock
@@ -64,8 +62,8 @@
         os.chdir(self.cwd_save)
 
     def test_service_models(self):
-        a = ONOSApp()
-        s = ONOSService()
+        s = Service()
+        a = ServiceInstance(owner=s)
 
         cohorts = self.synchronizer.compute_dependent_cohorts([a,s], False)
         self.assertIn([s,a], cohorts)
