diff --git a/lib/xos-synchronizer/xossynchronizer/synchronizer.py b/lib/xos-synchronizer/xossynchronizer/synchronizer.py
new file mode 100644
index 0000000..9a530d7
--- /dev/null
+++ b/lib/xos-synchronizer/xossynchronizer/synchronizer.py
@@ -0,0 +1,68 @@
+#!/usr/bin/env python
+
+# 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.
+
+import os
+import sys
+import time
+
+from xosconfig import Config
+from multistructlog import create_logger
+
+class Synchronizer(object):
+    def __init__(self):
+        self.log = create_logger(Config().get("logging"))
+
+    def create_model_accessor(self):
+        from modelaccessor import model_accessor
+
+        self.model_accessor = model_accessor
+
+    def wait_for_ready(self):
+        models_active = False
+        wait = False
+        while not models_active:
+            try:
+                _i = self.model_accessor.Instance.objects.first()
+                _n = self.model_accessor.NetworkTemplate.objects.first()
+                models_active = True
+            except Exception as e:
+                self.log.info("Exception", e=e)
+                self.log.info("Waiting for data model to come up before starting...")
+                time.sleep(10)
+                wait = True
+
+        if wait:
+            time.sleep(
+                60
+            )  # Safety factor, seeing that we stumbled waiting for the data model to come up.
+
+    def run(self):
+        self.create_model_accessor()
+        self.wait_for_ready()
+
+        # Don't import backend until after the model accessor has been initialized. This is to support sync steps that
+        # use `from xossynchronizer.modelaccessor import ...` and require the model accessor to be initialized before
+        # their code can be imported.
+
+        from backend import Backend
+
+        log_closure = self.log.bind(synchronizer_name=Config().get("name"))
+        backend = Backend(log=log_closure)
+        backend.run()
+
+
+if __name__ == "__main__":
+    main()
