diff --git a/xos/synchronizer/__init__.py b/xos/synchronizer/__init__.py
new file mode 100644
index 0000000..19d1424
--- /dev/null
+++ b/xos/synchronizer/__init__.py
@@ -0,0 +1,13 @@
+# Copyright 2019-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/synchronizer/event_steps/__init__.py b/xos/synchronizer/event_steps/__init__.py
new file mode 100644
index 0000000..19d1424
--- /dev/null
+++ b/xos/synchronizer/event_steps/__init__.py
@@ -0,0 +1,13 @@
+# Copyright 2019-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/synchronizer/event_steps/simpleexampleevent.py b/xos/synchronizer/event_steps/simpleexampleevent.py
index 07374b9..b544d1a 100644
--- a/xos/synchronizer/event_steps/simpleexampleevent.py
+++ b/xos/synchronizer/event_steps/simpleexampleevent.py
@@ -15,14 +15,13 @@
 
 
 import json
-import os
-import sys
 from xossynchronizer.event_steps.eventstep import EventStep
 from xosconfig import Config
 from multistructlog import create_logger
 
 log = create_logger(Config().get('logging'))
 
+
 class SimpleExampleEventStep(EventStep):
     topics = ["SimpleExampleEvent"]
     technology = "kafka"
@@ -41,4 +40,4 @@
 
         for obj in objs:
             obj.tenant_message = tenant_message
-            obj.save(always_update_timestamp = True)
+            obj.save(always_update_timestamp=True)
diff --git a/xos/synchronizer/model_policies/__init__.py b/xos/synchronizer/model_policies/__init__.py
new file mode 100644
index 0000000..19d1424
--- /dev/null
+++ b/xos/synchronizer/model_policies/__init__.py
@@ -0,0 +1,13 @@
+# Copyright 2019-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/synchronizer/model_policies/model_policy_simpleexampleserviceinstance.py b/xos/synchronizer/model_policies/model_policy_simpleexampleserviceinstance.py
index 169024f..f306cd5 100644
--- a/xos/synchronizer/model_policies/model_policy_simpleexampleserviceinstance.py
+++ b/xos/synchronizer/model_policies/model_policy_simpleexampleserviceinstance.py
@@ -24,6 +24,7 @@
 
 log = create_logger(Config().get('logging'))
 
+
 class SimpleExampleServiceInstancePolicy(Policy):
     model_name = "SimpleExampleServiceInstance"
 
@@ -43,7 +44,7 @@
         if service_instance.background_color:
             fields["background_color"] = service_instance.background_color.html_code
 
-        images=[]
+        images = []
         for image in service_instance.embedded_images.all():
             images.append({"name": image.name,
                            "url": image.url})
@@ -70,27 +71,28 @@
             # TODO: What if there is no default image?
             image = slice.default_image
 
-            name="simpleexampleserviceinstance-%s" % service_instance.id
-            compute_service_instance = compute_service_instance_class(slice=slice, owner=compute_service, image=image, name=name, no_sync=True)
+            name = "simpleexampleserviceinstance-%s" % service_instance.id
+            compute_service_instance = compute_service_instance_class(
+                slice=slice, owner=compute_service, image=image, name=name, no_sync=True)
             compute_service_instance.save()
 
             # Create a configmap and attach it to the compute instance
             data = {"index.html": self.render_index(service_instance)}
-            cfmap = self.model_accessor.KubernetesConfigMap(name="simpleexampleserviceinstance-map-%s" % service_instance.id,
-                                      trust_domain=slice.trust_domain,
-                                      data=json.dumps(data))
+            cfmap = self.model_accessor.KubernetesConfigMap(
+                name="simpleexampleserviceinstance-map-%s" %
+                service_instance.id, trust_domain=slice.trust_domain, data=json.dumps(data))
             cfmap.save()
             cfmap_mnt = self.model_accessor.KubernetesConfigVolumeMount(config=cfmap,
-                                                    service_instance=compute_service_instance,
-                                                    mount_path="/usr/local/apache2/htdocs")
+                                                                        service_instance=compute_service_instance,
+                                                                        mount_path="/usr/local/apache2/htdocs")
             cfmap_mnt.save()
 
             # Create a secret and attach it to the compute instance
             data = {"service_secret.txt": base64.b64encode(str(exampleservice.service_secret)),
                     "tenant_secret.txt": base64.b64encode(str(service_instance.tenant_secret))}
-            secret = self.model_accessor.KubernetesSecret(name="simpleexampleserviceinstance-secret-%s" % service_instance.id,
-                                      trust_domain=slice.trust_domain,
-                                      data=json.dumps(data))
+            secret = self.model_accessor.KubernetesSecret(
+                name="simpleexampleserviceinstance-secret-%s" %
+                service_instance.id, trust_domain=slice.trust_domain, data=json.dumps(data))
             secret.save()
             secret_mnt = self.model_accessor.KubernetesSecretVolumeMount(
                 secret=secret,
diff --git a/xos/synchronizer/steps/__init__.py b/xos/synchronizer/steps/__init__.py
new file mode 100644
index 0000000..19d1424
--- /dev/null
+++ b/xos/synchronizer/steps/__init__.py
@@ -0,0 +1,13 @@
+# Copyright 2019-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/synchronizer/tests/__init__.py b/xos/synchronizer/tests/__init__.py
new file mode 100644
index 0000000..19d1424
--- /dev/null
+++ b/xos/synchronizer/tests/__init__.py
@@ -0,0 +1,13 @@
+# Copyright 2019-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.
