diff --git a/userhandler/views.py b/userhandler/views.py
index 1703233..66fc22a 100644
--- a/userhandler/views.py
+++ b/userhandler/views.py
@@ -31,19 +31,8 @@
     user = osmutils.get_user(request)
     client = Client()
     result = client.user_list(user.get_token())
-    result_projects = client.project_list(user.get_token())
-    p_map = {'admin': 'admin'}
-    for p in result_projects['data']:
-        p_map[p['_id']] = p['name']
-    users = result['data'] if result and result['error'] is False else []
-    for user in users:
-        user_project_ids = user['projects']
-        user_project_names = []
-        for p_id in user_project_ids:
-            if p_id in p_map:
-                user_project_names.append(p_map[p_id])
-        user['projects'] = user_project_names
 
+    users = result['data'] if result and result['error'] is False else []    
     result = {
         'users': result['data'] if result and result['error'] is False else []
     }
@@ -57,9 +46,9 @@
     client = Client()
     user_data ={
         "username": request.POST['username'],
-        "password": request.POST['password'],
-        "projects": request.POST.getlist('projects')
+        "password": request.POST['password']
     }
+    
     result = client.user_create(user.get_token(), user_data)
     if result['error']:
         return __response_handler(request, result['data'], url=None,
@@ -84,32 +73,41 @@
         return __response_handler(request, {}, url=None, status=200)
 
 @login_required
+def user_info(request, user_id=None):
+    user = osmutils.get_user(request)
+    try:
+        client = Client()
+        
+        info_res = client.get_user_info(user.get_token(), user_id)
+    except Exception as e:
+        log.exception(e)
+        info_res = {'error': True, 'data': str(e)}
+    if info_res['error']:
+        return __response_handler(request, info_res['data'], url=None,
+                                  status=info_res['data']['status'] if 'status' in info_res['data'] else 500)
+    else:
+        return __response_handler(request, info_res['data'], url=None, status=200)
+
+@login_required
 def update(request, user_id=None):
     user = osmutils.get_user(request)
     try:
         client = Client()
-        projects_old = request.POST.get('projects_old').split(',')
-        projects_new = request.POST.getlist('projects')
-        default_project = request.POST.get('default_project')
-        projects_new.append(default_project)
-        projects_to_add = list(set(projects_new) - set(projects_old))
-        projects_to_remove = list(set(projects_old) - set(projects_new))
-
-        project_payload = {}
-
-        for p in projects_to_remove:
-            project_payload["$"+str(p)] = None
-        for p in projects_to_add:
-            if p not in projects_old:
-                project_payload["$+"+str(p)] = str(p)
-        project_payload["$" + default_project] = None
-        project_payload["$+[0]"] = default_project
         payload = {}
-        if project_payload:
-            payload["projects"] = project_payload
+
         if request.POST.get('password') and request.POST.get('password') is not '':
             payload["password"] = request.POST.get('password')
 
+        if request.POST.getlist('map_project_name') and request.POST.getlist('map_role_name'):
+            project_param_name = request.POST.getlist('map_project_name')
+            role_param_ip = request.POST.getlist('map_role_name')
+            payload["project_role_mappings"] = []
+            for i, project in enumerate(project_param_name):
+                payload["project_role_mappings"].append({
+                    'project': project,
+                    'role': role_param_ip[i],
+                })
+        
         update_res = client.user_update(user.get_token(), user_id, payload)
     except Exception as e:
         log.exception(e)
@@ -119,7 +117,6 @@
                                   status=update_res['data']['status'] if 'status' in update_res['data'] else 500)
     else:
         return __response_handler(request, {}, url=None, status=200)
-        #return __response_handler(request, {}, 'users:list', to_redirect=True, )
 
 
 def __response_handler(request, data_res, url=None, to_redirect=None, *args, **kwargs):
