diff --git a/plstackapi/core/models/__init__.py b/plstackapi/core/models/__init__.py
index 1ecda7e..5f962e3 100644
--- a/plstackapi/core/models/__init__.py
+++ b/plstackapi/core/models/__init__.py
@@ -4,7 +4,7 @@
 from .site import SitePrivilege
 from .flavor import Flavor
 from .image import Image
-from .user import User
+from .user import PLUser
 from .role import Role
 from .key import Key
 from .node import Node
diff --git a/plstackapi/core/models/key.py b/plstackapi/core/models/key.py
index e224831..9d4b139 100644
--- a/plstackapi/core/models/key.py
+++ b/plstackapi/core/models/key.py
@@ -1,7 +1,7 @@
 import os
 from django.db import models
 from plstackapi.core.models import PlCoreBase
-from plstackapi.core.models import User
+from plstackapi.core.models import PLUser
 from plstackapi.openstack.driver import OpenStackDriver
 
 # Create your models here.
@@ -12,7 +12,7 @@
     key = models.CharField(max_length=512)
     type = models.CharField(max_length=256)
     blacklisted = models.BooleanField(default=False)
-    user = models.ForeignKey(User, related_name='keys')
+    user = models.ForeignKey(PLUser, related_name='keys')
 
     def __unicode__(self):  return u'%s' % (self.name)
 
diff --git a/plstackapi/core/models/pluser.py b/plstackapi/core/models/pluser.py
new file mode 100644
index 0000000..a59cb97
--- /dev/null
+++ b/plstackapi/core/models/pluser.py
@@ -0,0 +1,101 @@
+import os
+import datetime
+from django.db import models
+from core.models import PlCoreBase
+from core.models import Site
+from django.contrib.auth.models import User, AbstractBaseUser, UserManager, BaseUserManager
+
+# Create your models here.
+
+class PLUserManager(BaseUserManager):
+    def create_user(self, email, firstname, lastname, password=None):
+        """
+        Creates and saves a User with the given email, date of
+        birth and password.
+        """
+        if not email:
+            raise ValueError('Users must have an email address')
+
+        user = self.model(
+            email=PLUserManager.normalize_email(email),
+            firstname=firstname,
+            lastname=lastname
+        )
+
+        user.set_password(password)
+        user.is_admin = True
+        user.save(using=self._db)
+        return user
+
+    def create_superuser(self, email, firstname, lastname, password):
+        """
+        Creates and saves a superuser with the given email, date of
+        birth and password.
+        """
+        user = self.create_user(email,
+            password=password,
+            firstname=firstname,
+            lastname=lastname
+        )
+        user.is_admin = True
+        user.save(using=self._db)
+        return user
+
+
+class PLUser(AbstractBaseUser):
+
+    class Meta:
+        app_label = "core"
+
+    email = models.EmailField(
+        verbose_name='email address',
+        max_length=255,
+        unique=True,
+        db_index=True,
+    )
+
+    
+    firstname = models.CharField(help_text="person's given name", max_length=200)
+    lastname = models.CharField(help_text="person's surname", max_length=200)
+
+    phone = models.CharField(null=True, blank=True, help_text="phone number contact", max_length=100)
+    user_url = models.URLField(null=True, blank=True)
+    site = models.ForeignKey(Site, related_name='users', verbose_name="Site this user will be homed too", null=True)
+
+    is_active = models.BooleanField(default=True)
+    is_admin = models.BooleanField(default=True)
+    is_staff = models.BooleanField(default=True)
+
+    objects = PLUserManager()
+
+    USERNAME_FIELD = 'email'
+    REQUIRED_FIELDS = ['firstname', 'lastname']
+
+    def get_full_name(self):
+        # The user is identified by their email address
+        return self.email
+
+    def get_short_name(self):
+        # The user is identified by their email address
+        return self.email
+
+    def __unicode__(self):
+        return self.email
+
+    def has_perm(self, perm, obj=None):
+        "Does the user have a specific permission?"
+        # Simplest possible answer: Yes, always
+        return True
+
+    def has_module_perms(self, app_label):
+        "Does the user have permissions to view the app `app_label`?"
+        # Simplest possible answer: Yes, always
+        return True
+
+    @property
+    def is_staff(self):
+        "Is the user a member of staff?"
+        # Simplest possible answer: All admins are staff
+        return self.is_admin
+
+
diff --git a/plstackapi/core/models/site.py b/plstackapi/core/models/site.py
index 67257af..1e1cbe4 100644
--- a/plstackapi/core/models/site.py
+++ b/plstackapi/core/models/site.py
@@ -49,7 +49,7 @@
 
 class SitePrivilege(PlCoreBase):
 
-    user = models.ForeignKey('User', related_name='site_privileges')
+    user = models.ForeignKey('PLUser', related_name='site_privileges')
     site = models.ForeignKey('Site', related_name='site_privileges')
     role = models.ForeignKey('Role')
 
diff --git a/plstackapi/core/models/slice.py b/plstackapi/core/models/slice.py
index fe16402..27184dc 100644
--- a/plstackapi/core/models/slice.py
+++ b/plstackapi/core/models/slice.py
@@ -2,7 +2,7 @@
 from django.db import models
 from plstackapi.core.models import PlCoreBase
 from plstackapi.core.models import Site
-from plstackapi.core.models import User
+from plstackapi.core.models import PLUser
 from plstackapi.core.models import Role
 from plstackapi.core.models import DeploymentNetwork
 from plstackapi.openstack.driver import OpenStackDriver
@@ -54,7 +54,7 @@
         super(Slice, self).delete(*args, **kwds)    
 
 class SliceMembership(PlCoreBase):
-    user = models.ForeignKey('User', related_name='slice_memberships')
+    user = models.ForeignKey('PLUser', related_name='slice_memberships')
     slice = models.ForeignKey('Slice', related_name='slice_memberships')
     role = models.ForeignKey('Role')
 
diff --git a/plstackapi/core/models/sliver.py b/plstackapi/core/models/sliver.py
index 2eabf23..27b9ab1 100644
--- a/plstackapi/core/models/sliver.py
+++ b/plstackapi/core/models/sliver.py
@@ -21,7 +21,7 @@
     key = models.ForeignKey(Key, related_name='slivers')
     slice = models.ForeignKey(Slice, related_name='slivers')
     node = models.ForeignKey(Node, related_name='slivers')
-    deploymentNetwork = models.ForeignKey(DeploymentNetwork, related_name='sliver_deploymentNetwork')
+    deploymentNetwork = models.ForeignKey(DeploymentNetwork, verbose_name='deployment', related_name='sliver_deploymentNetwork')
 
     def __unicode__(self):  return u'%s::%s' % (self.slice, self.deploymentNetwork)
 
diff --git a/plstackapi/core/models/user.py b/plstackapi/core/models/user.py
deleted file mode 100644
index 30bd2a9..0000000
--- a/plstackapi/core/models/user.py
+++ /dev/null
@@ -1,44 +0,0 @@
-import os
-import datetime
-from django.db import models
-from plstackapi.core.models import PlCoreBase
-from plstackapi.core.models import Site
-from plstackapi.openstack.driver import OpenStackDriver
-
-
-# Create your models here.
-
-class User(PlCoreBase):
-    user_id = models.CharField(max_length=256, unique=True)
-    firstname = models.CharField(help_text="person's given name", max_length=200)
-    lastname = models.CharField(help_text="person's surname", max_length=200)
-    email = models.EmailField(help_text="e-mail address", null=True)
-    password = models.CharField(max_length=256, null=True, blank=True)
-    
-    phone = models.CharField(null=True, blank=True, help_text="phone number contact", max_length=100)
-    user_url = models.URLField(null=True, blank=True)
-    is_admin = models.BooleanField(default=False)
-    enabled = models.BooleanField(default=True, help_text="Status for this User")
-    site = models.ForeignKey(Site, related_name='users', verbose_name="Site this user will be homed too")
-
-    def __unicode__(self):  return u'%s' % (self.email)
-
-    def save(self, *args, **kwds):
-        driver  = OpenStackDriver()
-        if not self.user_id:
-            name = self.email[:self.email.find('@')]
-            user_fields = {'name': name,
-                           'email': self.email,
-                           'password': self.password,
-                           'enabled': self.enabled}
-            user = driver.create_user(**user_fields)
-            self.user_id = user.id
-
-        self.password = None
-        super(User, self).save(*args, **kwds)   
-
-    def delete(self, *args, **kwds):
-        driver = OpenStackDriver()
-        if self.user_id:
-            driver.delete_user(self.user_id)
-        super(User, self).delete(*args, **kwds)                                 
