diff --git a/planetstack/core/admin.py b/planetstack/core/admin.py
index 0c90b9a..aafa6e5 100644
--- a/planetstack/core/admin.py
+++ b/planetstack/core/admin.py
@@ -88,6 +88,7 @@
 class SliceMembershipInline(admin.TabularInline):
     model = SliceMembership
     extra = 0
+    fields = ('user', 'role')
 
     def formfield_for_foreignkey(self, db_field, request, **kwargs):
         if db_field.name == 'slice':
@@ -204,6 +205,17 @@
             # hide MyInline in the add view
             if obj is None:
                 continue
+            if isinstance(inline, SliceInline):
+                inline.model.caller = request.user
+            yield inline.get_formset(request, obj)
+
+    def get_formsets(self, request, obj=None):
+        for inline in self.get_inline_instances(request, obj):
+            # hide MyInline in the add view
+            if obj is None:
+                continue
+            if isinstance(inline, SliverInline):
+                inline.model.caller = request.user
             yield inline.get_formset(request, obj)
 
 class SitePrivilegeAdmin(PlanetStackBaseAdmin):
@@ -247,7 +259,7 @@
             qs = qs.filter(site__in=sites)
         return qs
 
-class SliceAdmin(OSModelAdmin):
+class SliceAdmin(PlanetStackBaseAdmin):
     fields = ['name', 'site', 'serviceClass', 'description', 'slice_url']
     list_display = ('name', 'site','serviceClass', 'slice_url')
     inlines = [SliverInline, SliceMembershipInline, SliceTagInline]
@@ -280,11 +292,8 @@
             # hide MyInline in the add view
             if obj is None:
                 continue
-            # give inline object access to driver and caller
-            auth = request.session.get('auth', {})
-            auth['tenant'] = obj.name       # meed to connect using slice's tenant
-            inline.model.os_manager = OpenStackManager(auth=auth, caller=request.user)
-            inline.model.creator = request.user
+            if isinstance(inline, SliverInline):
+                inline.model.caller = request.user
             yield inline.get_formset(request, obj)
 
     def get_queryset(self, request):
@@ -292,7 +301,12 @@
         if request.user.is_superuser:
             return qs
         # users can only see slices at their site
-        return qs.filter(site=request.user.site) 
+        return qs.filter(site=request.user.site)
+
+    def save_model(self, request, obj, form, change):
+        # update openstack connection to use this site/tenant
+        obj.caller = request.user
+        obj.save() 
 
 class SliceMembershipAdmin(PlanetStackBaseAdmin):
     fieldsets = [
@@ -476,7 +490,7 @@
         return self.initial["password"]
 
 
-class UserAdmin(UserAdmin, OSModelAdmin):
+class UserAdmin(UserAdmin):
     class Meta:
         app_label = "core"
 
diff --git a/planetstack/core/api/slivers.py b/planetstack/core/api/slivers.py
index 16a7e0b..2ce24c7 100644
--- a/planetstack/core/api/slivers.py
+++ b/planetstack/core/api/slivers.py
@@ -3,7 +3,6 @@
 from openstack.manager import OpenStackManager
 from core.models import Sliver, Slice
 from core.api.images import _get_images
-from core.api.keys import _get_keys
 from core.api.slices import _get_slices
 from core.api.deployment_networks import _get_deployment_networks
 from core.api.nodes import _get_nodes
@@ -26,12 +25,10 @@
                         password=auth.get('password'))
     
     images = _get_images(fields.get('image'))
-    keys = _get_keys(fields.get('key'))
     slices = _get_slices(fields.get('slice'))
     deployment_networks = _get_deployment_networks(fields.get('deploymentNetwork'))
     nodes = _get_nodes(fields.get('node'))
     if images: fields['image'] = images[0]     
-    if keys: fields['key'] = keys[0]     
     if slices: fields['slice'] = slices[0]     
     if deployment_networks: fields['deploymentNetwork'] = deployment_networks[0]     
     if nodes: fields['node'] = nodes[0]     
diff --git a/planetstack/core/models/slice.py b/planetstack/core/models/slice.py
index d6908a7..da9379d 100644
--- a/planetstack/core/models/slice.py
+++ b/planetstack/core/models/slice.py
@@ -22,6 +22,7 @@
     subnet_id = models.CharField(null=True, blank=True, max_length=256, help_text="Quantum subnet id")
 
     serviceClass = models.ForeignKey(ServiceClass, related_name = "slices", null=True, default=ServiceClass.get_default)
+    creator = models.ForeignKey(User, related_name='slices', blank=True, null=True)
 
     def __unicode__(self):  return u'%s' % (self.name)
 
@@ -31,6 +32,8 @@
             # will fail unless it is allowed. But, we we really don't want it to
             # ever save None, so fix it up here.
             self.serviceClass = ServiceClass.get_default()
+        if not self.creator and hasattr(self, 'caller'):
+            self.creator = self.caller
         super(Slice, self).save(*args, **kwds)
 
 class SliceMembership(PlCoreBase):
diff --git a/planetstack/core/models/sliver.py b/planetstack/core/models/sliver.py
index 72ad66d..13eb353 100644
--- a/planetstack/core/models/sliver.py
+++ b/planetstack/core/models/sliver.py
@@ -29,15 +29,6 @@
     def save(self, *args, **kwds):
         if not self.name:
             self.name = self.slice.name
-        if not hasattr(self, 'os_manager'):
-            from openstack.manager import OpenStackManager
-            setattr(self, 'os_manager', OpenStackManager())
-        self.os_manager.save_sliver(self)
+        if not self.creator and hasattr(self, 'caller'):
+            self.creator = self.caller
         super(Sliver, self).save(*args, **kwds)
-
-    def delete(self, *args, **kwds):
-        if not hasattr(self, 'os_manager'):
-            from openstack.manager import OpenStackManager
-            setattr(self, 'os_manager', OpenStackManager())
-        self.os_manager.delete_sliver(self)
-        super(Sliver, self).delete(*args, **kwds)
