diff --git a/xos/models.py b/xos/models.py
deleted file mode 100644
index af8cdb5..0000000
--- a/xos/models.py
+++ /dev/null
@@ -1,79 +0,0 @@
-from header import *
-
-
-
-#from core.models.service import Service
-from core.models import Service
-
-
-
-#from core.models.tenantwithcontainer import TenantWithContainer
-from core.models import TenantWithContainer
-
-
-
-
-
-class ExampleService(Service):
-
-  KIND = "exampleservice"
-
-  class Meta:
-      app_label = "exampleservice"
-      name = "exampleservice"
-      verbose_name = "Example Service"
-
-  # Primitive Fields (Not Relations)
-  service_message = CharField( help_text = "Service Message to Display", max_length = 254, null = False, db_index = False, blank = False )
-  
-
-  # Relations
-  
-
-  
-  pass
-
-
-
-
-class ExampleTenant(TenantWithContainer):
-
-  KIND = "exampleservice"
-
-  class Meta:
-      app_label = "exampleservice"
-      name = "exampletenant"
-      verbose_name = "Example Tenant"
-
-  # Primitive Fields (Not Relations)
-  tenant_message = CharField( help_text = "Tenant Message to Display", max_length = 254, null = False, db_index = False, blank = False )
-  
-
-  # Relations
-  
-
-  def __init__(self, *args, **kwargs):
-      exampleservice = ExampleService.get_service_objects().all()
-      if exampleservice:
-          self._meta.get_field('provider_service').default = exampleservice[0].id
-      super(ExampleTenant, self).__init__(*args, **kwargs)
-  
-  def save(self, *args, **kwargs):
-      super(ExampleTenant, self).save(*args, **kwargs)
-      model_policy_exampletenant(self.pk)
-  
-  def delete(self, *args, **kwargs):
-      self.cleanup_container()
-      super(ExampleTenant, self).delete(*args, **kwargs)
-  
-  pass
-
-def model_policy_exampletenant(pk):
-    with transaction.atomic():
-        tenant = ExampleTenant.objects.select_for_update().filter(pk=pk)
-        if not tenant:
-            return
-        tenant = tenant[0]
-        tenant.manage_container()
-
-
