diff --git a/plstackapi/core/admin.py b/plstackapi/core/admin.py
index 36c1bf9..3dbf99c 100644
--- a/plstackapi/core/admin.py
+++ b/plstackapi/core/admin.py
@@ -97,6 +97,23 @@
     list_display = ('name', 'site', 'deploymentNetwork')
     list_filter = ('deploymentNetwork',)
 
+
+
+class IgnoredField(forms.Field):
+    def validate(self, value):
+        return
+    
+
+
+class RoleForm(forms.ModelForm):
+    role_id = IgnoredField()
+    role_type = forms.CharField()     
+
+
+class RoleAdmin(admin.ModelAdmin):
+    form = RoleForm    
+    list_display = ('role_type',)
+
 admin.site.register(Site, SiteAdmin)
 admin.site.register(SitePrivilege)
 admin.site.register(Slice, SliceAdmin)
@@ -107,7 +124,7 @@
 admin.site.register(Sliver)
 admin.site.register(Flavor)
 admin.site.register(Key)
-admin.site.register(Role)
+admin.site.register(Role, RoleAdmin)
 admin.site.register(User)
 admin.site.register(DeploymentNetwork, DeploymentNetworkAdmin)
 
diff --git a/plstackapi/core/models/role.py b/plstackapi/core/models/role.py
index 12743ef..3efa7a1 100644
--- a/plstackapi/core/models/role.py
+++ b/plstackapi/core/models/role.py
@@ -2,14 +2,32 @@
 import datetime
 from django.db import models
 from plstackapi.core.models import PlCoreBase
+from plstackapi.openstack.driver import OpenStackDriver
 
 # Create your models here.
 
 class Role(PlCoreBase):
 
-    ROLE_CHOICES = (('admin', 'Admin'), ('pi', 'Principle Investigator'), ('user','User'))
-    role_id = models.CharField(max_length=256, unique=True)
-    role_type = models.CharField(max_length=80, unique=True, choices=ROLE_CHOICES)
+    #ROLE_CHOICES = (('admin', 'Admin'), ('pi', 'Principle Investigator'), ('user','User'))
+    role_id = models.CharField(max_length=256, unique=True, blank=True)
+    role_type = models.CharField(max_length=80, unique=True)
 
     def __unicode__(self):  return u'%s' % (self.role_type)
 
+
+    def save(self, *args, **kwds):
+
+        driver = OpenStackDriver() 
+        if not self.role_id:
+            keystone_role = driver.create_role(name=self.role_type)
+            self.role_id = keystone_role.id
+
+        super(Role, self).save(*args, **kwds)
+    
+    def delete(self, *args, **kwds):
+        driver = OpenStackDriver()
+        if self.role_id:
+            driver.delete_role({'id': self.role_id})   
+
+        super(Role, self).delete(*args, **kwds)
+            
diff --git a/plstackapi/core/serializers.py b/plstackapi/core/serializers.py
index 3692d1d..6317803 100644
--- a/plstackapi/core/serializers.py
+++ b/plstackapi/core/serializers.py
@@ -6,7 +6,6 @@
 class RoleSerializer(serializers.HyperlinkedModelSerializer):
     # HyperlinkedModelSerializer doesn't include the id by default
     id = serializers.Field()
- 
     class Meta:
         model = Role
         fields = ('id', 
diff --git a/plstackapi/openstack/driver.py b/plstackapi/openstack/driver.py
index 03d4ed6..21f3422 100644
--- a/plstackapi/openstack/driver.py
+++ b/plstackapi/openstack/driver.py
@@ -43,8 +43,10 @@
         return self.shell.keystone.tenants.update(id, **kwds)
 
     def delete_tenant(self, id):
-        tenant = self.shell.keystone.tenants.find(id=id)
-        return self.shell.keystone.tenants.delete(tenant)
+        tenants = self.shell.keystone.tenants.findall(id=id)
+        for tenant in tenants:
+            self.shell.keystone.tenants.delete(tenant)
+        return 1
 
     def create_user(self, name, email, password, enabled):
         users = self.shell.keystone.users.findall(email=email)
@@ -56,6 +58,12 @@
             user = users[0]
         return user
 
+    def delete_user(self, id):
+        users = self.shell.keystone.users.findall(id=id)
+        for user in users:
+            self.shell.keystone.users.delete(user)
+        return 1 
+
     def add_user_role(self, user_id, tenant_id, role_name):
         user = self.shell.keystone.users.find(id=user_id)
         tenant = self.shell.keystone.tenants.find(id=tenant_id)
@@ -71,10 +79,6 @@
     def update_user(self, id, **kwds):
         return self.shell.keystone.users.update(id, **kwds)
 
-    def delete_user(self, id):
-        user = self.shell.keystone.users.find(id=id)
-        return self.shell.keystone.users.delete(user)  
-
     def create_router(self, name, set_gateway=True):
         routers = self.shell.quantum.list_routers(name=name)['routers']
         if routers:
@@ -123,6 +127,7 @@
             for subnet_id in net['subnets']:
                 self.delete_subnet(subnet_id)
             self.shell.quantum.delete_network(net['id'])
+        return 1
     
     def create_subnet(self, name, network_id, cidr_ip, ip_version, start, end):
         #nets = self.shell.quantum.list_networks(name=network_name)['networks']
@@ -154,7 +159,13 @@
         return self.shell.quantum.update_subnet(id, fields)
 
     def delete_subnet(self, id):
-        return self.shell.quantum.delete_subnet(id=id)
+        #return self.shell.quantum.delete_subnet(id=id)
+        # inefficient but fault tolerant
+        subnets = self.shell.quantum.list_subnets()['subnets']
+        for subnet in subnets:
+            if subnet['id'] == id:
+                self.shell.quantum.delete_subnet(id=id)
+        return
      
     
     def create_keypair(self, name, key):
@@ -169,6 +180,7 @@
         keys = self.shell.nova.keypairs.findall(name=name)
         for key in keys:
             self.shell.nova.keypairs.delete(key) 
+        return 1 
 
     def spawn_instance(self, name, key_name=None, hostname=None, flavor_id=None, image_id=None, security_group=None, pubkeys=[]):
         #if not flavor_id:
