diff --git a/xos/synchronizer/model-deps b/xos/synchronizer/model-deps
new file mode 100644
index 0000000..0967ef4
--- /dev/null
+++ b/xos/synchronizer/model-deps
@@ -0,0 +1 @@
+{}
diff --git a/xos/synchronizer/model_policies/index.html.j2 b/xos/synchronizer/model_policies/index.html.j2
new file mode 100644
index 0000000..d9833a0
--- /dev/null
+++ b/xos/synchronizer/model_policies/index.html.j2
@@ -0,0 +1,39 @@
+
+{#
+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.
+#}
+
+<html>
+<body style="background-color:{{ background_color }};">
+<font color="{{ foreground_color }}">
+
+<h1>ExampleService</h1>
+
+<ul>
+<li>Service Message: "{{ service_message }}"</li>
+<li>Tenant Message: "{{ tenant_message }}"</li>
+</ul>
+
+{% if images %}
+<h2>Some images</h2>
+{% for image in images %}
+<img name="{{ image.name }}" href="{{ image.url }}">
+{% endfor %}
+{% endif %}
+
+</font>
+
+</body>
+</html>
diff --git a/xos/synchronizer/model_policies/model_policy_simpleexampleserviceinstance.py b/xos/synchronizer/model_policies/model_policy_simpleexampleserviceinstance.py
new file mode 100644
index 0000000..8cfea04
--- /dev/null
+++ b/xos/synchronizer/model_policies/model_policy_simpleexampleserviceinstance.py
@@ -0,0 +1,118 @@
+
+# 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 base64
+import jinja2
+import json
+from synchronizers.new_base.modelaccessor import *
+from synchronizers.new_base.policy import Policy
+
+from xosconfig import Config
+from multistructlog import create_logger
+
+log = create_logger(Config().get('logging'))
+
+class SimpleExampleServiceInstancePolicy(Policy):
+    model_name = "SimpleExampleServiceInstance"
+
+    def handle_create(self, service_instance):
+        return self.handle_update(service_instance)
+
+    def render_index(self, service_instance):
+        service = service_instance.owner.leaf_model
+
+        fields = {}
+        fields['tenant_message'] = service_instance.tenant_message
+        fields['service_message'] = service.service_message
+
+        if service_instance.foreground_color:
+            fields["foreground_color"] = service_instance.foreground_color.html_code
+
+        if service_instance.background_color:
+            fields["background_color"] = service_instance.background_color.html_code
+
+        images=[]
+        for image in service_instance.embedded_images.all():
+            images.append({"name": image.name,
+                           "url": image.url})
+        fields["images"] = images
+
+        template = jinja2.Template(open("model_policies/index.html.j2").read())
+
+        return template.render(fields)
+
+    def handle_update(self, service_instance):
+        if not service_instance.compute_instance:
+            # TODO: Break dependency
+            compute_service = KubernetesService.objects.first()
+            compute_service_instance_class = Service.objects.get(id=compute_service.id).get_service_instance_class()
+
+            exampleservice = service_instance.owner.leaf_model
+
+            # TODO: What if there is the wrong number of slices?
+            slice = exampleservice.slices.first()
+
+            # 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)
+            compute_service_instance.save()
+
+            # Create a configmap and attach it to the compute instance
+            data = {"index.html": self.render_index(service_instance)}
+            cfmap = KubernetesConfigMap(name="simpleexampleserviceinstance-map-%s" % service_instance.id,
+                                      trust_domain=slice.trust_domain,
+                                      data=json.dumps(data))
+            cfmap.save()
+            cfmap_mnt = KubernetesConfigVolumeMount(config=cfmap,
+                                                    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 = KubernetesSecret(name="simpleexampleserviceinstance-secret-%s" % service_instance.id,
+                                      trust_domain=slice.trust_domain,
+                                      data=json.dumps(data))
+            secret.save()
+            secret_mnt = KubernetesSecretVolumeMount(secret=secret, service_instance=compute_service_instance, mount_path="/usr/local/apache2/secrets")
+            secret_mnt.save()
+
+            compute_service_instance.no_sync = False
+            compute_service_instance.save(update_fields=["no_sync"])
+
+            service_instance.compute_instance = compute_service_instance
+            service_instance.save(update_fields=["compute_instance"])
+        else:
+            compute_instance = service_instance.compute_instance
+            mnt = compute_instance.leaf_model.kubernetes_config_volume_mounts.first()
+            config = mnt.config
+            new_data = {"index.html": self.render_index(service_instance)}
+            if (new_data != config.data):
+                config.data = json.dumps(new_data)
+                config.save(always_update_timestamp=True)
+                # Force the Kubernetes syncstep
+                compute_instance.save(always_update_timestamp=True)
+
+    def handle_delete(self, service_instance):
+        log.info("handle_delete")
+        if service_instance.compute_instance:
+            log.info("has a compute_instance")
+            service_instance.compute_instance.delete()
+            service_instance.compute_instance = None
+            # TODO: I'm not sure we can save things that are being deleted...
+            service_instance.save(update_fields=["compute_instance"])
diff --git a/xos/synchronizer/models/simpleexampleservice.xproto b/xos/synchronizer/models/simpleexampleservice.xproto
new file mode 100644
index 0000000..3b03c47
--- /dev/null
+++ b/xos/synchronizer/models/simpleexampleservice.xproto
@@ -0,0 +1,33 @@
+option app_label = "simpleexampleservice";
+option name = "simpleexampleservice";
+
+message SimpleExampleService (Service){
+    option verbose_name = "Simple Example Service";
+    required string service_message = 1 [help_text = "Service Message to Display", max_length = 254, null = False, db_index = False, blank = False];
+    optional string service_secret = 2 [help_text = "Service Secret to place in a file", null = False, db_index = False, blank = True];
+}
+
+message ColorNew (XOSBase){
+     option verbose_name = "Color";
+     required string name = 1 [help_text = "Name for this color", db_index = False, max_length = 256, null = False, blank = False];
+     required string html_code = 2 [help_text = "Code for this color", db_index = False, max_length = 256, null = False, blank = False];
+}
+
+message ServiceInstanceWithCompute (ServiceInstance) {
+    optional manytoone compute_instance->ComputeServiceInstance:service_instance_with_computes = 1 [db_index=True, null=True, blank=True];
+}
+
+message SimpleExampleServiceInstance (ServiceInstanceWithCompute){
+     option verbose_name = "Example Service Instance";
+     required string tenant_message = 1 [help_text = "Tenant Message to Display", max_length = 254, null = False, db_index = False, blank = False];
+     optional manytoone foreground_color->ColorNew:serviceinstance_foreground_colors = 2 [db_index = True, null = True, blank = True];
+     optional manytoone background_color->ColorNew:serviceinstance_background_colors = 3 [db_index = True, null = True, blank = True];
+     optional string tenant_secret = 4 [help_text = "Tenant Secret to place in a file", null = False, db_index = False, blank = True];
+}
+
+message EmbeddedImageNew (XOSBase){
+     option verbose_name = "Embedded Image";
+     required string name = 1 [help_text = "Name for this image", db_index = False, max_length = 256, null = False, blank = False];
+     required string url = 2 [help_text = "URL for this image", db_index = False, max_length = 256, null = False, blank = False];
+     optional manytoone serviceinstance->SimpleExampleServiceInstance:embedded_images = 3 [db_index = True, null = True, blank = True];
+}
diff --git a/xos/synchronizer/simpleexampleservice-synchronizer.py b/xos/synchronizer/simpleexampleservice-synchronizer.py
new file mode 100644
index 0000000..d819675
--- /dev/null
+++ b/xos/synchronizer/simpleexampleservice-synchronizer.py
@@ -0,0 +1,34 @@
+
+# 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.
+
+
+#!/usr/bin/env python
+
+# Runs the standard XOS synchronizer
+
+import importlib
+import os
+import sys
+from xosconfig import Config
+
+config_file = os.path.abspath(os.path.dirname(os.path.realpath(__file__)) + '/simpleexampleservice_config.yaml')
+Config.init(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()
+
diff --git a/xos/synchronizer/simpleexampleservice_config.yaml b/xos/synchronizer/simpleexampleservice_config.yaml
new file mode 100644
index 0000000..a43d5e4
--- /dev/null
+++ b/xos/synchronizer/simpleexampleservice_config.yaml
@@ -0,0 +1,35 @@
+
+# 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.
+
+
+name: simpleexampleservice
+accessor:
+  username: xosadmin@opencord.org
+  password: "@/opt/xos/services/simpleexampleservice/credentials/xosadmin@opencord.org"
+required_models:
+  - SimpleExampleService
+  - SimpleExampleServiceInstance
+  - ServiceDependency
+  - KubernetesService
+  - KubernetesServiceInstance
+  - KubernetesConfigMap
+  - KubernetesSecret
+  - KubernetesConfigVolumeMount
+  - KubernetesSecretVolumeMount
+dependency_graph: "/opt/xos/synchronizers/simpleexampleservice/model-deps"
+steps_dir: "/opt/xos/synchronizers/simpleexampleservice/steps"
+sys_dir: "/opt/xos/synchronizers/simpleexampleservice/sys"
+model_policies_dir: "/opt/xos/synchronizers/simpleexampleservice/model_policies"
+models_dir: "/opt/xos/synchronizers/simpleexampleservice/models"
diff --git a/xos/synchronizer/steps/sync_simpleexampleserviceinstance.py b/xos/synchronizer/steps/sync_simpleexampleserviceinstance.py
new file mode 100644
index 0000000..c8e7c52
--- /dev/null
+++ b/xos/synchronizer/steps/sync_simpleexampleserviceinstance.py
@@ -0,0 +1,46 @@
+
+# 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
+from synchronizers.new_base.syncstep import SyncStep
+from synchronizers.new_base.modelaccessor import *
+from xosconfig import Config
+from multistructlog import create_logger
+
+log = create_logger(Config().get('logging'))
+
+class SyncSimpleExampleServiceInstance(SyncStep):
+
+    provides = [SimpleExampleServiceInstance]
+
+    observes = SimpleExampleServiceInstance
+
+    requested_interval = 0
+
+    template_name = "simpleexampleserviceinstance_playbook.yaml"
+
+    service_key_name = "/opt/xos/synchronizers/exampleservicenew/simpleexampleservice_private_key"
+
+    def __init__(self, *args, **kwargs):
+        super(SyncSimpleExampleServiceInstance, self).__init__(*args, **kwargs)
+
+    def sync_record(self, o):
+        # There's nothing to do at this time. Configuration of ExampleServiceInstance is handled by Kubernetes
+        # through config maps, and that all happens in the model policy.
+        #
+        # TODO(smbaker): Consider deleting this sync step
+        pass
