diff --git a/plstackapi/core/api/roles.py b/plstackapi/core/api/roles.py
index 844fb4f..6c61e25 100644
--- a/plstackapi/core/api/roles.py
+++ b/plstackapi/core/api/roles.py
@@ -1,9 +1,21 @@
+from types import StringTypes
 from plstackapi.openstack.client import OpenStackClient
 from plstackapi.openstack.driver import OpenStackDriver
 from plstackapi.core.api.auth import auth_check
 from plstackapi.core.models import Role
  
 
+def _get_roles(filter):
+    if isinstance(filter, int):
+        roles = Role.objects.filter(id=filter)
+    elif isinstance(filter, StringTypes):
+        roles = Role.objects.filter(role_type=filter)
+    elif isinstance(filter, dict):
+        roles = Role.objects.filter(**filter)
+    else:
+        roles = []
+    return roles
+
 def add_role(auth, name):
     driver = OpenStackDriver(client = auth_check(auth))    
     keystone_role = driver.create_role(name=name)
@@ -13,7 +25,7 @@
 
 def delete_role(auth, filter={}):
     driver = OpenStackDriver(client = auth_check(auth))   
-    roles = Role.objects.filter(**filter)
+    roles = _get_roles(filter) 
     for role in roles:
         driver.delete_role({'id': role.role_id}) 
         role.delete()
@@ -21,8 +33,5 @@
 
 def get_roles(auth, filter={}):
     client = auth_check(auth)
-    roles = Role.objects.filter(**filter)
-    return roles             
+    return _get_roles(filter)             
         
-
-    
