observer for sites, slices and users
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)