diff --git a/xos/helloworldservice_complete/admin.py b/xos/helloworldservice_complete/admin.py
index 4db2f57..9a3e4f7 100644
--- a/xos/helloworldservice_complete/admin.py
+++ b/xos/helloworldservice_complete/admin.py
@@ -4,14 +4,14 @@
 from core.models import User
 from django import forms
 from django.contrib import admin
-from helloworldservice.models import HelloWorldService, HelloWorldTenant, HELLO_WORLD_KIND
+from helloworldservice_complete.models import HelloWorldServiceComplete, HelloWorldTenantComplete, HELLO_WORLD_KIND
 
 # The class to provide an admin interface on the web for the service.
 # We do only configuration here and don't change any logic because the logic
 # is taken care of for us by ReadOnlyAwareAdmin
-class HelloWorldServiceAdmin(ReadOnlyAwareAdmin):
+class HelloWorldServiceCompleteAdmin(ReadOnlyAwareAdmin):
     # We must set the model so that the admin knows what fields to use
-    model = HelloWorldService
+    model = HelloWorldServiceComplete
     verbose_name = "Hello World Service"
     verbose_name_plural = "Hello World Services"
 
@@ -65,14 +65,14 @@
     # Used to get the objects for this model that are associated with the
     # requesting user.
     def queryset(self, request):
-        return HelloWorldService.get_service_objects_by_user(request.user)
+        return HelloWorldServiceComplete.get_service_objects_by_user(request.user)
 
 # Class to represent the form to add and edit tenants.
 # We need to define this instead of just using an admin like we did for the
 # service because tenants vary more than services and there isn't a common form.
 # This allows us to change the python behavior for the admin form to save extra
 # fields and control defaults.
-class HelloWorldTenantForm(forms.ModelForm):
+class HelloWorldTenantCompleteForm(forms.ModelForm):
     # Defines a field for the creator of this service. It is a dropdown which
     # is populated with all of the users.
     creator = forms.ModelChoiceField(queryset=User.objects.all())
@@ -80,13 +80,13 @@
     display_message = forms.CharField(required=False)
 
     def __init__(self, *args, **kwargs):
-        super(HelloWorldTenantForm, self).__init__(*args, **kwargs)
+        super(HelloWorldTenantCompleteForm, self).__init__(*args, **kwargs)
         # Set the kind field to readonly
         self.fields['kind'].widget.attrs['readonly'] = True
         # Define the logic for obtaining the objects for the provider_service
         # dropdown of the tenant form.
         self.fields[
-            'provider_service'].queryset = HelloWorldService.get_service_objects().all()
+            'provider_service'].queryset = HelloWorldServiceComplete.get_service_objects().all()
         # Set the initial kind to HELLO_WORLD_KIND for this tenant.
         self.fields['kind'].initial = HELLO_WORLD_KIND
         # If there is an instance of this model then we can set the initial
@@ -99,8 +99,8 @@
         # If there is not an instance then we need to set initial values.
         if (not self.instance) or (not self.instance.pk):
             self.fields['creator'].initial = get_request().user
-            if HelloWorldService.get_service_objects().exists():
-                self.fields["provider_service"].initial = HelloWorldService.get_service_objects().all()[0]
+            if HelloWorldServiceComplete.get_service_objects().exists():
+                self.fields["provider_service"].initial = HelloWorldServiceComplete.get_service_objects().all()[0]
 
     # This function describes what happens when the save button is pressed on
     # the tenant form. In this case we set the values for the instance that were
@@ -109,16 +109,16 @@
         self.instance.creator = self.cleaned_data.get("creator")
         self.instance.display_message = self.cleaned_data.get(
             "display_message")
-        return super(HelloWorldTenantForm, self).save(commit=commit)
+        return super(HelloWorldTenantCompleteForm, self).save(commit=commit)
 
     class Meta:
-        model = HelloWorldTenant
+        model = HelloWorldTenantComplete
 
 # Define the admin form for the tenant. This uses a similar structure as the
-# service but uses HelloWorldTenantForm to change the python behavior.
+# service but uses HelloWorldTenantCompleteForm to change the python behavior.
 
 
-class HelloWorldTenantAdmin(ReadOnlyAwareAdmin):
+class HelloWorldTenantCompleteAdmin(ReadOnlyAwareAdmin):
     verbose_name = "Hello World Tenant"
     verbose_name_plural = "Hello World Tenants"
     list_display = ('id', 'backend_status_icon', 'instance', 'display_message')
@@ -129,13 +129,13 @@
                                     'display_message'],
                          'classes': ['suit-tab suit-tab-general']})]
     readonly_fields = ('backend_status_text', 'instance',)
-    form = HelloWorldTenantForm
+    form = HelloWorldTenantCompleteForm
 
     suit_form_tabs = (('general', 'Details'),)
 
     def queryset(self, request):
-        return HelloWorldTenant.get_tenant_objects_by_user(request.user)
+        return HelloWorldTenantComplete.get_tenant_objects_by_user(request.user)
 
 # Associate the admin forms with the models.
-admin.site.register(HelloWorldService, HelloWorldServiceAdmin)
-admin.site.register(HelloWorldTenant, HelloWorldTenantAdmin)
+admin.site.register(HelloWorldServiceComplete, HelloWorldServiceCompleteAdmin)
+admin.site.register(HelloWorldTenantComplete, HelloWorldTenantCompleteAdmin)
diff --git a/xos/helloworldservice_complete/models.py b/xos/helloworldservice_complete/models.py
index 8923bc3..f0f42bd 100644
--- a/xos/helloworldservice_complete/models.py
+++ b/xos/helloworldservice_complete/models.py
@@ -6,13 +6,13 @@
 # The class to represent the service. Most of the service logic is given for us
 # in the Service class but, we have some configuration that is specific for
 # this example.
-class HelloWorldService(Service):
+class HelloWorldServiceComplete(Service):
     KIND = HELLO_WORLD_KIND
 
     class Meta:
         # When the proxy field is set to True the model is represented as
         # it's superclass in the database, but we can still change the pyhton
-        # behavior. In this case HelloWorldService is a Service in the
+        # behavior. In this case HelloWorldServiceComplete is a Service in the
         # database.
         proxy = True
         # The name used to find this service, all directories are named this
@@ -22,10 +22,10 @@
 # This is the class to represent the tenant. Most of the logic is given to use
 # in TenantWithContainer, however there is some configuration and logic that
 # we need to define for this example.
-class HelloWorldTenant(TenantWithContainer):
+class HelloWorldTenantComplete(TenantWithContainer):
 
     class Meta:
-        # Same as a above, HelloWorldTenant is represented as a
+        # Same as a above, HelloWorldTenantComplete is represented as a
         # TenantWithContainer, but we change the python behavior.
         proxy = True
 
@@ -43,16 +43,16 @@
     default_attributes = {'display_message': 'Hello World!'}
 
     def __init__(self, *args, **kwargs):
-        helloworld_services = HelloWorldService.get_service_objects().all()
+        helloworld_services = HelloWorldServiceComplete.get_service_objects().all()
         # When the tenant is created the default service in the form is set
-        # to be the first created HelloWorldService
+        # to be the first created HelloWorldServiceComplete
         if helloworld_services:
             self._meta.get_field(
                 "provider_service").default = helloworld_services[0].id
-        super(HelloWorldTenant, self).__init__(*args, **kwargs)
+        super(HelloWorldTenantComplete, self).__init__(*args, **kwargs)
 
     def save(self, *args, **kwargs):
-        super(HelloWorldTenant, self).save(*args, **kwargs)
+        super(HelloWorldTenantComplete, self).save(*args, **kwargs)
         # This call needs to happen so that an instance is created for this
         # tenant is created in the slice. One instance is created per tenant.
         model_policy_helloworld_tenant(self.pk)
@@ -60,7 +60,7 @@
     def delete(self, *args, **kwargs):
         # Delete the instance that was created for this tenant
         self.cleanup_container()
-        super(HelloWorldTenant, self).delete(*args, **kwargs)
+        super(HelloWorldTenantComplete, self).delete(*args, **kwargs)
 
     # Getter for the message that will appear on the webpage
     # By default it is "Hello World!"
@@ -104,7 +104,7 @@
     # This section of code is atomic to prevent race conditions
     with transaction.atomic():
         # We find all of the tenants that are waiting to update
-        tenant = HelloWorldTenant.objects.select_for_update().filter(pk=pk)
+        tenant = HelloWorldTenantComplete.objects.select_for_update().filter(pk=pk)
         if not tenant:
             return
         # Since this code is atomic it is safe to always use the first tenant
diff --git a/xos/helloworldservice_complete/templates/helloworldserviceadmin.html b/xos/helloworldservice_complete/templates/helloworldserviceadmin.html
index 0c60f1a..ba418ee 100644
--- a/xos/helloworldservice_complete/templates/helloworldserviceadmin.html
+++ b/xos/helloworldservice_complete/templates/helloworldserviceadmin.html
@@ -1,8 +1,8 @@
-<!-- Template used to for the button leading to the HelloWorldTenant form. -->
+<!-- Template used to for the button leading to the HelloWorldTenantComplete form. -->
 <div class = "left-nav">
   <ul>
     <li>
-      <a href="/admin/helloworldservice/helloworldtenant/">
+      <a href="/admin/helloworldservice_complete/helloworldtenantcomplete/">
         Hello World Tenants
       </a>
     </li>
diff --git a/xos/observers/helloworldservice_complete/steps/sync_helloworldtenant.py b/xos/observers/helloworldservice_complete/steps/sync_helloworldtenant.py
index f12344b..67d159f 100644
--- a/xos/observers/helloworldservice_complete/steps/sync_helloworldtenant.py
+++ b/xos/observers/helloworldservice_complete/steps/sync_helloworldtenant.py
@@ -1,7 +1,7 @@
 import os
 import sys
 from django.db.models import Q, F
-from helloworldservice.models import HelloWorldService, HelloWorldTenant
+from helloworldservice_complete.models import HelloWorldServiceComplete, HelloWorldTenantComplete
 from observers.base.SyncInstanceUsingAnsible import SyncInstanceUsingAnsible
 
 parentdir = os.path.join(os.path.dirname(__file__), "..")
@@ -11,12 +11,12 @@
 # indicate where the find the YAML for ansible, where to find the SSH key,
 # and the logic for determining what tenant needs updating, what additional
 # attributes are needed, and how to delete an instance.
-class SyncHelloWorldServiceTenant(SyncInstanceUsingAnsible):
+class SyncHelloWorldTenantComplete(SyncInstanceUsingAnsible):
     # Indicates the position in the data model, this will run when XOS needs to
-    # enact a HelloWorldTenant
-    provides = [HelloWorldTenant]
+    # enact a HelloWorldTenantComplete
+    provides = [HelloWorldTenantComplete]
     # The actual model being enacted, usually the same as provides.
-    observes = HelloWorldTenant
+    observes = HelloWorldTenantComplete
     # Number of milliseconds between interruptions of the observer
     requested_interval = 0
     # The ansible template to run
@@ -26,19 +26,19 @@
     service_key_name = "/opt/xos/observers/helloworldservice_complete/helloworldservice_private_key"
 
     def __init__(self, *args, **kwargs):
-        super(SyncHelloWorldServiceTenant, self).__init__(*args, **kwargs)
+        super(HelloWorldTenantComplete self).__init__(*args, **kwargs)
 
-    # Defines the logic for determining what HelloWorldTenants need to be
+    # Defines the logic for determining what HelloWorldTenantCompletes need to be
     # enacted.
     def fetch_pending(self, deleted):
         # If the update is not a deletion, then we get all of the instnaces that
         # have been updated or have not been enacted.
         if (not deleted):
-            objs = HelloWorldTenant.get_tenant_objects().filter(
+            objs = HelloWorldTenantComplete.get_tenant_objects().filter(
                 Q(enacted__lt=F('updated')) | Q(enacted=None), Q(lazy_blocked=False))
         else:
             # If this is a deletion we get all of the deleted tenants..
-            objs = HelloWorldTenant.get_deleted_tenant_objects()
+            objs = HelloWorldTenantComplete.get_deleted_tenant_objects()
 
         return objs
 
