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,
