diff --git a/planetstack/core/admin.py b/planetstack/core/admin.py
index 2f44f40..0c90b9a 100644
--- a/planetstack/core/admin.py
+++ b/planetstack/core/admin.py
@@ -126,24 +126,7 @@
 class PlanetStackBaseAdmin(admin.ModelAdmin):
     save_on_top = False
 
-class OSModelAdmin(PlanetStackBaseAdmin):
-    """Attach client connection to openstack on delete() and save()"""
-
-    def save_model(self, request, obj, form, change):
-        if request.user.site:
-            auth = request.session.get('auth', {})
-            auth['tenant'] = request.user.site.login_base
-            obj.os_manager = OpenStackManager(auth=auth, caller=request.user)
-        obj.save()
-
-    def delete_model(self, request, obj):
-        if request.user.site:
-            auth = request.session.get('auth', {})
-            auth['tenant'] = request.user.site.login_base
-            obj.os_manager = OpenStackManager(auth=auth, caller=request.user)
-        obj.delete() 
-
-class RoleAdmin(OSModelAdmin):
+class RoleAdmin(PlanetStackBaseAdmin):
     fieldsets = [
         ('Role', {'fields': ['role_type']})
     ]
@@ -194,7 +177,7 @@
             inline.model.os_manager = OpenStackManager(auth=auth, caller=request.user)
             yield inline.get_formset(request, obj)
 
-class SiteAdmin(OSModelAdmin):
+class SiteAdmin(PlanetStackBaseAdmin):
     fieldsets = [
         (None, {'fields': ['name', 'site_url', 'enabled', 'is_public', 'login_base']}),
         ('Location', {'fields': ['latitude', 'longitude']}),
@@ -221,10 +204,6 @@
             # 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'] = request.user.site.login_base
-            inline.model.os_manager = OpenStackManager(auth=auth, caller=request.user)
             yield inline.get_formset(request, obj)
 
 class SitePrivilegeAdmin(PlanetStackBaseAdmin):
@@ -268,20 +247,6 @@
             qs = qs.filter(site__in=sites)
         return qs
 
-    def save_model(self, request, obj, form, change):
-        # update openstack connection to use this site/tenant   
-        auth = request.session.get('auth', {})
-        #auth['tenant'] = obj.site.login_base
-        obj.os_manager = OpenStackManager(auth=auth, caller=request.user)
-        obj.save()
-
-    def delete_model(self, request, obj):
-        # update openstack connection to use this site/tenant   
-        auth = request.session.get('auth', {})
-        #auth['tenant'] = obj.site.login_base
-        obj.os_manager = OpenStackManager(auth=auth, caller=request.user)
-        obj.delete()
-
 class SliceAdmin(OSModelAdmin):
     fields = ['name', 'site', 'serviceClass', 'description', 'slice_url']
     list_display = ('name', 'site','serviceClass', 'slice_url')
diff --git a/planetstack/core/models/site.py b/planetstack/core/models/site.py
index db4b1ef..81bf5f3 100644
--- a/planetstack/core/models/site.py
+++ b/planetstack/core/models/site.py
@@ -19,22 +19,6 @@
 
     def __unicode__(self):  return u'%s' % (self.name)
 
-    def save(self, *args, **kwds):
-        if not hasattr(self, 'os_manager'):
-            from openstack.manager import OpenStackManager
-            setattr(self, 'os_manager', OpenStackManager())
-        self.os_manager.save_site(self)
-        super(Site, 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_site(self)
-        super(Site, self).delete(*args, **kwds)         
-        
-
 class SitePrivilege(PlCoreBase):
 
     user = models.ForeignKey('User', related_name='site_privileges')
diff --git a/planetstack/core/models/slice.py b/planetstack/core/models/slice.py
index cc7dcce..d6908a7 100644
--- a/planetstack/core/models/slice.py
+++ b/planetstack/core/models/slice.py
@@ -31,19 +31,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 hasattr(self, 'os_manager'):
-            from openstack.manager import OpenStackManager
-            setattr(self, 'os_manager', OpenStackManager())
-        self.os_manager.save_slice(self)
         super(Slice, 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_slice(self)
-        super(Slice, self).delete(*args, **kwds)    
-
 class SliceMembership(PlCoreBase):
     user = models.ForeignKey('User', related_name='slice_memberships')
     slice = models.ForeignKey('Slice', related_name='slice_memberships')
diff --git a/planetstack/core/models/user.py b/planetstack/core/models/user.py
index f00d5eb..758bcbf 100644
--- a/planetstack/core/models/user.py
+++ b/planetstack/core/models/user.py
@@ -68,6 +68,10 @@
     is_admin = models.BooleanField(default=True)
     is_staff = models.BooleanField(default=True)
 
+    created = models.DateTimeField(auto_now_add=True)
+    updated = models.DateTimeField(auto_now=True)
+    enacted = models.DateTimeField(null=True, default=None)
+
     timezone = TimeZoneField()
 
     objects = UserManager()
@@ -114,19 +118,6 @@
         return roles   
 
     def save(self, *args, **kwds):
-        if not hasattr(self, 'os_manager'):
-            from openstack.manager import OpenStackManager 
-            setattr(self, 'os_manager', OpenStackManager())
-        self.os_manager.save_user(self)
-
         if not self.id:
             self.set_password(self.password)    
         super(User, 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_user(self)
-
-        super(User, self).delete(*args, **kwds)    
