diff --git a/xos/tosca/engine.py b/xos/tosca/engine.py
index e33d0f0..2ecf165 100644
--- a/xos/tosca/engine.py
+++ b/xos/tosca/engine.py
@@ -38,7 +38,6 @@
         if nodetemplate.type in resources.resources:
             cls = resources.resources[nodetemplate.type]
             obj = cls(user, nodetemplate)
-            obj.save_if_dirty()
 
 
 
diff --git a/xos/tosca/resources/compute.py b/xos/tosca/resources/compute.py
index 71c7926..db65406 100644
--- a/xos/tosca/resources/compute.py
+++ b/xos/tosca/resources/compute.py
@@ -64,9 +64,9 @@
                         slice = slice,
                         image = image)
         sliver.caller = self.user
+        sliver.save()
 
         self.resource = sliver
-        self.dirty = True
 
         self.info("Created Sliver '%s' on node '%s' using flavor '%s' and image '%s'" %
                   (str(sliver), str(compute_node), str(flavor), str(image)))
diff --git a/xos/tosca/resources/service.py b/xos/tosca/resources/service.py
new file mode 100644
index 0000000..0ef64ba
--- /dev/null
+++ b/xos/tosca/resources/service.py
@@ -0,0 +1,47 @@
+import os
+import pdb
+import sys
+import tempfile
+sys.path.append("/opt/tosca")
+from translator.toscalib.tosca_template import ToscaTemplate
+
+from core.models import Service,User,CoarseTenant
+
+from xosresource import XOSResource
+
+class XOSService(XOSResource):
+    provides = "tosca.nodes.Service"
+
+    def process_nodetemplate(self):
+        nodetemplate = self.nodetemplate
+        serviceName = nodetemplate.name
+
+        existing_services = Service.objects.filter(name=serviceName)
+        if existing_services:
+            self.info("Service %s already exists" % serviceName)
+            service = existing_services[0]
+        else:
+            service = Service(name = serviceName)
+            service.caller = self.user
+            service.save()
+
+            self.info("Created Service '%s'" % (str(service), ))
+
+        for provider_service_name in self.get_requirements("tosca.relationships.TenantOfService"):
+            provider_service = self.get_xos_object(Service, name=provider_service_name)
+
+            existing_tenancy = CoarseTenant.get_tenant_objects().filter(provider_service = provider_service, subscriber_service = service)
+            if existing_tenancy:
+                self.info("Tenancy relationship from %s to %s already exists" % (str(service), str(provider_service)))
+            else:
+                tenancy = CoarseTenant(provider_service = provider_service,
+                                       subscriber_service = service)
+                tenancy.save()
+
+                self.info("Created Tenancy relationship  from %s to %s" % (str(service), str(provider_service)))
+
+        self.resource = service
+
+    def save(self):
+        self.resource.save()
+
diff --git a/xos/tosca/resources/slice.py b/xos/tosca/resources/slice.py
index 6fdfd35..bbcd861 100644
--- a/xos/tosca/resources/slice.py
+++ b/xos/tosca/resources/slice.py
@@ -19,18 +19,20 @@
         existing_slices = Slice.objects.filter(name=sliceName)
         if existing_slices:
             self.info("Slice %s already exists" % sliceName)
+            slice = existing_slices[0]
+        else:
+            site_name = self.get_requirement("tosca.relationships.MemberOfSite", throw_exception=True)
+            site = self.get_xos_object(Site, login_base=site_name)
 
-        site_name = self.get_requirement("tosca.relationships.MemberOfSite", throw_exception=True)
-        site = self.get_xos_object(Site, login_base=site_name)
+            slice = Slice(name = sliceName,
+                          site = site)
+            slice.caller = self.user
+            slice.save()
 
-        slice = Slice(name = sliceName,
-                      site = site)
-        slice.caller = self.user
+            self.info("Created Slice '%s' on Site '%s'" % (str(slice), str(site)))
 
         self.resource = slice
-        self.dirty = True
 
-        self.info("Created Slice '%s' on Site '%s'" % (str(slice), str(site)))
 
     def save(self):
         self.resource.save()
diff --git a/xos/tosca/resources/xosresource.py b/xos/tosca/resources/xosresource.py
index 05adcbe..1bb555c 100644
--- a/xos/tosca/resources/xosresource.py
+++ b/xos/tosca/resources/xosresource.py
@@ -8,19 +8,27 @@
         self.nodetemplate = nodetemplate
         self.process_nodetemplate()
 
-    def get_requirement(self, relationship_name, throw_exception=False):
+    def get_requirements(self, relationship_name, throw_exception=False):
         """ helper to search the list of requirements for a particular relationship
             type.
         """
+
+        results = []
         for reqs in self.nodetemplate.requirements:
             for (k,v) in reqs.items():
                 if (v["relationship"] == relationship_name):
-                    return v["node"]
+                    results.append(v["node"])
 
-        if throw_exception:
+        if (not results) and throw_exception:
             raise Exception("Failed to find requirement in %s using relationship %s" % (self.nodetemplate.name, relationship_name))
 
-        return None
+        return results
+
+    def get_requirement(self, relationship_name, throw_exception=False):
+        reqs = self.get_requirements(relationship_name, throw_exception)
+        if not reqs:
+            return None
+        return reqs[0]
 
     def get_xos_object(self, cls, **kwargs):
         objs = cls.objects.filter(**kwargs)
@@ -31,14 +39,6 @@
     def process_nodetemplate(self):
         pass
 
-    def save(self):
-        pass
-
-    def save_if_dirty(self):
-        if self.dirty:
-            self.save()
-            self.dirty=False
-
     def info(self, s):
         print s
 
diff --git a/xos/tosca/samples/composition.yaml b/xos/tosca/samples/cord.yaml
similarity index 100%
rename from xos/tosca/samples/composition.yaml
rename to xos/tosca/samples/cord.yaml
