diff --git a/xos/core/admin.py b/xos/core/admin.py
index b32a281..272069b 100644
--- a/xos/core/admin.py
+++ b/xos/core/admin.py
@@ -119,7 +119,28 @@
 
         return actions
 
+    def add_extra_context(self, extra_context):
+        # allow custom application breadcrumb url and name
+        extra_context["custom_app_breadcrumb_url"] = getattr(self, "custom_app_breadcrumb_url", None)
+        extra_context["custom_app_breadcrumb_name"] = getattr(self, "custom_app_breadcrumb_name", None)
+
+        # for Service admins to render their Administration page
+        if getattr(self, "extracontext_registered_admins", False):
+            admins=[]
+            for model, model_admin in admin.site._registry.items():
+                if model == self.model:
+                    continue
+                if model._meta.app_label == self.model._meta.app_label:
+                    info = {"app": model._meta.app_label,
+                            "model": model._meta.model_name,
+                            "name": capfirst(model._meta.verbose_name_plural),
+                            "url": reverse('admin:%s_%s_changelist' % (model._meta.app_label, model._meta.model_name), current_app=model._meta.app_label) }
+                    admins.append(info)
+            extra_context["registered_admins"] = admins
+
     def change_view(self,request,object_id, extra_context=None):
+        extra_context = extra_context or {}
+
         if self.__user_is_readonly(request):
             if not hasattr(self, "readonly_save"):
                 # save the original readonly fields
@@ -136,6 +157,8 @@
             if hasattr(self, "inlines_save"):
                 self.inlines = self.inlines_save
 
+        self.add_extra_context(extra_context)
+
         try:
             return super(PermissionCheckingAdminMixin, self).change_view(request, object_id, extra_context=extra_context)
         except PermissionDenied:
@@ -145,6 +168,14 @@
         request.readonly = True
         return super(PermissionCheckingAdminMixin, self).change_view(request, object_id, extra_context=extra_context)
 
+    def changelist_view(self, request, extra_context = None):
+        extra_context = extra_context or {}
+
+        self.add_extra_context(extra_context)
+
+        return super(PermissionCheckingAdminMixin, self).changelist_view(request, extra_context=extra_context)
+
+
     def __user_is_readonly(self, request):
         return request.user.isReadOnlyUser()
 
@@ -194,28 +225,7 @@
             return True
 
 class ServiceAppAdmin (SingletonAdmin):
-    # This is for services to render an 'administration page'. It builds up
-    # a list of all registered admins for the service, and passes them in the
-    # 'registered_admins' member of the template context.
-
-    def change_view(self, request, object_id, extra_context=None):
-        extra_context = extra_context or {}
-
-        admins=[]
-        for model, model_admin in admin.site._registry.items():
-            if model == self.model:
-                continue
-            if model._meta.app_label == self.model._meta.app_label:
-                info = {"app": model._meta.app_label,
-                        "model": model._meta.model_name,
-                        "name": capfirst(model._meta.verbose_name_plural),
-                        "url": reverse('admin:%s_%s_changelist' % (model._meta.app_label, model._meta.model_name), current_app=model._meta.app_label) }
-                admins.append(info)
-
-        extra_context["registered_admins"] = admins
-
-        return super(ServiceAppAdmin, self).change_view(request=request, object_id=object_id,
-            extra_context=extra_context)
+    extracontext_registered_admins = True
 
 class XOSTabularInline(admin.TabularInline):
     def __init__(self, *args, **kwargs):
diff --git a/xos/hpc/admin.py b/xos/hpc/admin.py
index b247deb..c419a12 100644
--- a/xos/hpc/admin.py
+++ b/xos/hpc/admin.py
@@ -32,6 +32,21 @@
 
     suit_form_includes = (('hpcadmin.html', 'top', 'administration'),)
 
+class HPCAdmin(ReadOnlyAwareAdmin):
+   # Change the application breadcrumb to point to an HPC Service if one is
+   # defined
+
+   change_form_template = "admin/change_form_bc.html"
+   change_list_template = "admin/change_list_bc.html"
+   custom_app_breadcrumb_name = "Hpc"
+   @property
+   def custom_app_breadcrumb_url(self):
+       services = HpcService.objects.all()
+       if len(services)==1:
+           return "/admin/hpc/hpcservice/%s/" % services[0].id
+       else:
+           return "/admin/hpc/hpcservice/"
+
 class CDNPrefixInline(XOSTabularInline):
     model = CDNPrefix
     extra = 0
@@ -46,7 +61,7 @@
     fields = ('backend_status_icon', 'content_provider_id', 'name', 'enabled')
     readonly_fields = ('backend_status_icon', 'content_provider_id',)
 
-class OriginServerAdmin(ReadOnlyAwareAdmin):
+class OriginServerAdmin(HPCAdmin):
     list_display = ('backend_status_icon', 'url','protocol','redirects','contentProvider','authenticated','enabled' )
     list_display_links = ('backend_status_icon', 'url', )
 
@@ -60,7 +75,7 @@
             'serviceProvider' : LinkedSelect
         }
 
-class ContentProviderAdmin(ReadOnlyAwareAdmin):
+class ContentProviderAdmin(HPCAdmin):
     form = ContentProviderForm
     list_display = ('backend_status_icon', 'name','description','enabled' )
     list_display_links = ('backend_status_icon', 'name', )
@@ -73,7 +88,7 @@
 
     suit_form_tabs = (('general','Details'),('prefixes','CDN Prefixes'))
 
-class ServiceProviderAdmin(ReadOnlyAwareAdmin):
+class ServiceProviderAdmin(HPCAdmin):
     list_display = ('backend_status_icon', 'name', 'description', 'enabled')
     list_display_links = ('backend_status_icon', 'name', )
     fieldsets = [
@@ -92,7 +107,7 @@
             'contentProvider' : LinkedSelect
         }
 
-class CDNPrefixAdmin(ReadOnlyAwareAdmin):
+class CDNPrefixAdmin(HPCAdmin):
     form = CDNPrefixForm
     list_display = ['backend_status_icon', 'prefix','contentProvider']
     list_display_links = ('backend_status_icon', 'prefix', )
@@ -100,7 +115,7 @@
     readonly_fields = ('backend_status_text', )
     user_readonly_fields = ['prefix','contentProvider', "cdn_prefix_id", "description", "defaultOriginServer", "enabled"]
 
-class SiteMapAdmin(ReadOnlyAwareAdmin):
+class SiteMapAdmin(HPCAdmin):
     model = SiteMap
     verbose_name = "Site Map"
     verbose_name_plural = "Site Map"
@@ -109,7 +124,7 @@
     user_readonly_fields = ('backend_status_text', "name", "contentProvider", "serviceProvider", "description", "map")
     readonly_fields = ('backend_status_text', )
 
-class AccessMapAdmin(ReadOnlyAwareAdmin):
+class AccessMapAdmin(HPCAdmin):
     model = AccessMap
     verbose_name = "Access Map"
     verbose_name_plural = "Access Map"
diff --git a/xos/templates/admin/change_form_bc.html b/xos/templates/admin/change_form_bc.html
new file mode 100644
index 0000000..70b5e9f
--- /dev/null
+++ b/xos/templates/admin/change_form_bc.html
@@ -0,0 +1,32 @@
+{% extends "admin/change_form.html" %}
+{% load i18n admin_static admin_modify suit_tags admin_urls %}
+{% load url from future %}
+
+{% if not is_popup %}
+  {% block breadcrumbs %}
+    <ul class="breadcrumb">
+      <li>
+        <a href="{% url 'admin:index' %}">{% trans 'Home' %}</a>
+        <span class="divider">&raquo;</span>
+      </li>
+      <li>
+        {% if custom_app_breadcrumb_url %}
+            <a href="{{ custom_app_breadcrumb_url }}">{{ custom_app_breadcrumb_name }}</a>
+        {% else %}
+            <a href="{% url 'admin:app_list' app_label=opts.app_label %}">{% firstof opts.app_config.verbose_name app_label|capfirst|escape %}</a>
+        {% endif %}
+        <span class="divider">&raquo;</span>
+      </li>
+      <li>
+        {% if has_change_permission %}
+          <a href="{% url opts|admin_urlname:'changelist' %}">
+            {{ opts.verbose_name_plural|capfirst }}</a>{% else %}
+          {{ opts.verbose_name_plural|capfirst }}{% endif %}
+        <span class="divider">&raquo;</span>
+      </li>
+      <li class="active">
+        {% if add %}{% trans 'Add' %} {{ opts.verbose_name }}{% else %}{{ original|truncatewords:"18" }}{% endif %}
+      </li>
+    </ul>
+  {% endblock %}
+{% endif %}
diff --git a/xos/templates/admin/change_list_bc.html b/xos/templates/admin/change_list_bc.html
new file mode 100644
index 0000000..8a6ba64
--- /dev/null
+++ b/xos/templates/admin/change_list_bc.html
@@ -0,0 +1,20 @@
+{% extends "admin/change_list.html" %}
+{% load i18n admin_static admin_modify suit_tags admin_urls %}
+{% load url from future %}
+
+{% if not is_popup %}
+  {% block breadcrumbs %}
+    <ul class="breadcrumb">
+      <li><a href="{% url 'admin:index' %}">{% trans 'Home' %}</a>
+        <span class="divider">&raquo;</span></li>
+      <li>
+        {% if custom_app_breadcrumb_url %}
+            <a href="{{ custom_app_breadcrumb_url }}">{{ custom_app_breadcrumb_name }}</a>
+        {% else %}
+            <a href="{% url 'admin:app_list' app_label=cl.opts.app_label %}">{% firstof opts.app_config.verbose_name app_label|capfirst|escape %}</a>
+       {% endif %}
+        <span class="divider">&raquo;</span></li>
+      <li class="active">{{ cl.opts.verbose_name_plural|capfirst }}</li>
+    </ul>
+  {% endblock %}
+{% endif %}
