diff --git a/xos/hpc/admin.py b/xos/hpc/admin.py
index 6a6fb5c..f276165 100644
--- a/xos/hpc/admin.py
+++ b/xos/hpc/admin.py
@@ -11,12 +11,16 @@
 from django.contrib.contenttypes import generic
 from suit.widgets import LinkedSelect
 from core.admin import ServiceAppAdmin,SliceInline,ServiceAttrAsTabInline, ReadOnlyAwareAdmin, XOSTabularInline, SliderWidget, ServicePrivilegeInline
+from core.middleware import get_request
 
 from functools import update_wrapper
 from django.contrib.admin.views.main import ChangeList
 from django.core.urlresolvers import reverse
 from django.contrib.admin.utils import quote
 
+import threading
+_thread_locals = threading.local()
+
 class FilteredChangeList(ChangeList):
     """ A special ChangeList with a doctored url_for_result function that
         points to the filteredchange view instead of the default change
@@ -25,6 +29,7 @@
 
     def __init__(self, request, *args, **kwargs):
         self.hpcService = getattr(request, "hpcService", None)
+        self.embedded = getattr(request, "embedded", False)
         super(FilteredChangeList, self).__init__(request, *args, **kwargs)
 
     def url_for_result(self, result):
@@ -32,10 +37,17 @@
              return super(FilteredChangeList, self).url_for_result(result)
 
         pk = getattr(result, self.pk_attname)
-        return reverse('admin:%s_%s_filteredchange' % (self.opts.app_label,
-                                                       self.opts.model_name),
-                       args=(quote(self.hpcService.id), quote(pk),),
-                       current_app=self.model_admin.admin_site.name)
+        if embedded:
+            return reverse('admin:%s_%s_embeddedfilteredchange' % (self.opts.app_label,
+                                                           self.opts.model_name),
+                           args=(quote(self.hpcService.id), quote(pk),),
+                           current_app=self.model_admin.admin_site.name)
+
+        else:
+            return reverse('admin:%s_%s_filteredchange' % (self.opts.app_label,
+                                                           self.opts.model_name),
+                           args=(quote(self.hpcService.id), quote(pk),),
+                           current_app=self.model_admin.admin_site.name)
 
 class FilteredAdmin(ReadOnlyAwareAdmin):
    """
@@ -57,6 +69,14 @@
             the add link when the changelist is empty
    """
 
+   @property
+   def change_list_template(self):
+       return _thread_locals.change_list_template
+
+   @property
+   def change_form_template(self):
+       return _thread_locals.change_form_template
+
    def get_urls(self):
        from django.conf.urls import patterns, url
 
@@ -69,7 +89,9 @@
        info = self.model._meta.app_label, self.model._meta.model_name
        my_urls = [
            url(r'^(.+)/filteredlist/$', wrap(self.filtered_changelist_view), name="%s_%s_filteredchangelist" % info),
+           url(r'^(.+)/embeddedfilteredlist/$', wrap(self.embedded_filtered_changelist_view), name="%s_%s_embeddedfilteredchangelist" % info),
            url(r'^(.+)/(.+)/filteredchange$', wrap(self.filtered_change_view), name='%s_%s_filteredchange' % info),
+           url(r'^(.+)/(.+)/embeddedfilteredchange$', wrap(self.embedded_filtered_change_view), name='%s_%s_embeddedfilteredchange' % info),
            url(r'^(.+)/filteredadd/$', wrap(self.filtered_add_view), name='%s_%s_filteredadd' % info),
        ]
        return my_urls + urls
@@ -81,14 +103,40 @@
             extra_context["custom_changelist_breadcrumb_url"] = "/admin/hpc/%s/%s/filteredlist/" % (self.model._meta.model_name, str(request.hpcService.id))
             extra_context["custom_add_url"] = "/admin/hpc/%s/%s/filteredadd/" % (self.model._meta.model_name, str(request.hpcService.id))
 
+   def changelist_view(self, *args, **kwargs):
+       if "template" in kwargs:
+           _thread_locals.change_list_template = kwargs["template"]
+           del kwargs["template"]
+       else:
+           _thread_locals.change_list_template = "admin/change_list_bc.html"
+       return super(FilteredAdmin, self).changelist_view(*args, **kwargs)
+
    def filtered_changelist_view(self, request, hpcServiceId, extra_context=None):
        request.hpcService = HpcService.objects.get(id=hpcServiceId)
        return self.changelist_view(request, extra_context=extra_context)
 
+   def embedded_filtered_changelist_view(self, request, hpcServiceId, extra_context=None):
+       request.hpcService = HpcService.objects.get(id=hpcServiceId)
+       request.embedded = True
+       return self.changelist_view(request, template="admin/change_list_embedded.html", extra_context=extra_context)
+
+   def change_view(self, *args, **kwargs):
+       if "template" in kwargs:
+           _thread_locals.change_form_template = kwargs["template"]
+           del kwargs["template"]
+       else:
+           _thread_locals.change_form_template = "admin/change_form_bc.html"
+       return super(FilteredAdmin, self).change_view(*args, **kwargs)
+
    def filtered_change_view(self, request, hpcServiceId, object_id, extra_context=None):
        request.hpcService = HpcService.objects.get(id=hpcServiceId)
        return self.change_view(request, object_id, extra_context=extra_context)
 
+   def embedded_filtered_change_view(self, request, hpcServiceId, object_id, extra_context=None):
+       request.hpcService = HpcService.objects.get(id=hpcServiceId)
+       request.embedded = True
+       return self.change_view(request, object_id, template="admin/change_form_embedded.html", extra_context=extra_context)
+
    def filtered_add_view(self, request, hpcServiceId, extra_context=None):
        request.hpcService = HpcService.objects.get(id=hpcServiceId)
        return self.add_view(request, extra_context=extra_context)
@@ -158,8 +206,18 @@
    # 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"
+   """
+   @property
+   def change_form_template(self):
+       request=get_request()
+       if request.GET.get("embedded",False):
+           return "admin/change_form_embedded.html"
+       else:
+           return "admin/change_form_bc.html"
+   """
+
+   #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):
