diff --git a/xos/examples/README.md b/xos/examples/README.md
new file mode 100644
index 0000000..de64192
--- /dev/null
+++ b/xos/examples/README.md
@@ -0,0 +1,21 @@
+The following describes a demo that brings up a `SimpleExampleServiceInstance`. The purpose of this ServiceInstance is to host a single web inside of a Kubernetes container. Creating the `SimpleExampleServiceInstance` will cause a model policy to be invoked, which will create the necessary Kubernetes resources to launch the web server and configure it to host the desired page.
+
+1. Set your username and password
+
+    USERNAME=admin@opencord.org
+    PASSWORD=letmein
+
+2. Run the TOSCA recipe
+
+    TOSCA_URL=$(minikube service xos-tosca --url)
+    curl -H "xos-username: $ACCOUNT" -H "xos-password: $PASSWORD" -X POST --data-binary @$RECIPE $TOSCA_URL/run    
+
+3. Wait a few seconds for the Kubernetes instances to be created.
+
+4. View the status
+
+    CHAMELEON_URL=$(minikube service xos-chameleon --url)
+    python ./show-instances.py $CHAMELEON_URL $USERNAME $PASSWORD
+
+5. View the web page
+Enter one of the other Kubernetes containers, any container such as one of the synchronizer containers will do, and perform a curl on the IP address obtained in step 4.
diff --git a/xos/examples/SimpleExampleServiceInstance.yaml b/xos/examples/SimpleExampleServiceInstance.yaml
new file mode 100644
index 0000000..d44d98f
--- /dev/null
+++ b/xos/examples/SimpleExampleServiceInstance.yaml
@@ -0,0 +1,41 @@
+---
+# 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.
+
+tosca_definitions_version: tosca_simple_yaml_1_0
+
+description: Make a SimpleExampleServiceInstance
+
+imports:
+  - custom_types/simpleexampleservice.yaml
+  - custom_types/simpleexampleserviceinstance.yaml
+
+topology_template:
+  node_templates:
+    service#simpleexampleservice:
+      type: tosca.nodes.SimpleExampleService
+      properties:
+        name: simpleexampleservice
+        must-exist: true
+
+    simpleexampleserviceinstance:
+      type: tosca.nodes.SimpleExampleServiceInstance
+      properties:
+        name: "My Simple Example Service Instance"
+        tenant_message: "world"
+        tenant_secret: "p@ssw0rd"
+      requirements:
+        - owner:
+            node: service#simpleexampleservice
+            relationship: tosca.relationships.BelongsToOne
diff --git a/xos/examples/show-instances.py b/xos/examples/show-instances.py
new file mode 100755
index 0000000..65755b4
--- /dev/null
+++ b/xos/examples/show-instances.py
@@ -0,0 +1,66 @@
+#!/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.
+
+# show-instances.py
+# Show the SimpleExampleServiceInstances and their ip addresses in a human-readable table.
+# Syntax: show-instances.py <base_url> <username> <password>
+#
+# Example: show-instances.py http://192.168.42.253:30006 admin@opencord.org letmein
+
+import sys
+import time
+import requests
+from requests.auth import HTTPBasicAuth
+
+DELAY=1
+
+def main():
+    if len(sys.argv)<4:
+        print "Syntax: xos-instances.py <base_url> <username> <password>"
+        sys.exit(-1)
+
+    base_url = sys.argv[1]
+    username = sys.argv[2]
+    password = sys.argv[3]
+
+    auth = HTTPBasicAuth(username, password)
+
+    r = requests.get(base_url + "/xosapi/v1/simpleexampleservice/simpleexampleserviceinstances", auth=auth)
+
+    if r.status_code != 200:
+        print "Received error response", r.status_code
+        print r.text
+        sys.exit(-1)
+
+
+    print "%-4s %-40s %-4s %-4s" % ("id", "Name", "Comp", "IP")
+    for item in r.json()["items"]:
+        name = item.get("name")
+        compute_id = item["compute_instance_id"]
+        if compute_id:
+            r_compute = requests.get(base_url + "/xosapi/v1/kubernetes/kubernetesserviceinstances/%s" % compute_id, auth=auth)
+            if r_compute.status_code != 200:
+                print "Received error response when fetching compute instance", r_compute.status_code
+                print r_compute.text
+                sys.exit(-1)
+            pod_ip = r_compute.json().get("pod_ip", "")
+        else:
+            pod_ip = ""
+        print "%4s %-40s %4s %s" % (item["id"], name, compute_id, pod_ip)
+
+
+if __name__=="__main__":
+    main()
