diff --git a/userhandler/templates/modal/user_create.html b/userhandler/templates/modal/user_create.html
index 21afce0..5b8d73a 100644
--- a/userhandler/templates/modal/user_create.html
+++ b/userhandler/templates/modal/user_create.html
@@ -1,3 +1,18 @@
+<!--
+Copyright 2019 EveryUP srl
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an  BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+-->
 <div class="modal" id="modal_new_user" xmlns="http://www.w3.org/1999/html">
     <div class="modal-dialog">
         <div class="modal-content">
@@ -11,6 +26,7 @@
                   method="post" enctype="multipart/form-data">
                 {% csrf_token %}
                 <div class="modal-body" id="modal_new_user_body">
+                    
                     <div class="form-group">
                         <label for="username" class="col-sm-3 control-label">Username *</label>
                         <div class="col-sm-6">
@@ -23,19 +39,25 @@
                         <label for="password" class="col-sm-3 control-label">Password *</label>
                         <div class="col-sm-6">
                            <input class="form-control" id="password" name="password" type="password"
-                                   placeholder="Password" required>
+                                   placeholder="Password" autocomplete="off" required>
                         </div>
                     </div>
+
                     <div class="form-group">
-                        <label for=projects" class="col-sm-3 control-label">Projects *</label>
-                        <div class="col-sm-6">
-                            <select required id="projects" class="js-example-basic-multiple form-control" name="projects"
-                            multiple="multiple">
-                            </select>
-                        </div>
+                            <label for="password" class="col-sm-3 control-label">Conf. Password *</label>
+                            <div class="col-sm-6">
+                               <input class="form-control" id="password2" name="password2" type="password"
+                                       placeholder="Repeat Password" autocomplete="off" required>
+                                <div class="row">
+                                    <div class="col-sm-12">
+                                       <span id="pwmatch" class="glyphicon glyphicon-remove" style="color:#FF0004;"></span> Passwords Match
+                                    </div>
+                                </div>
+                            </div>
                     </div>
 
 
+
                 </div>
                 <div class="modal-footer">
                     <button type="button" class="btn btn-default pull-left" data-dismiss="modal">Cancel</button>
diff --git a/userhandler/templates/modal/user_edit.html b/userhandler/templates/modal/user_credentials_edit.html
similarity index 63%
rename from userhandler/templates/modal/user_edit.html
rename to userhandler/templates/modal/user_credentials_edit.html
index 49eda46..b20da19 100644
--- a/userhandler/templates/modal/user_edit.html
+++ b/userhandler/templates/modal/user_credentials_edit.html
@@ -1,17 +1,32 @@
-<div class="modal" id="modal_edit_user" xmlns="http://www.w3.org/1999/html">
+<!--
+Copyright 2019 EveryUP srl
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an  BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+-->
+<div class="modal" id="modal_edit_user_credentials" xmlns="http://www.w3.org/1999/html">
     <div class="modal-dialog">
         <div class="modal-content">
             <div class="modal-header">
                 <button type="button" class="close" data-dismiss="modal" aria-label="Close">
                     <span aria-hidden="true">×</span></button>
-                <h4 class="modal-title">Edit User</h4>
+                <h4 class="modal-title">Edit User Credentials</h4>
             </div>
             <form id="formEditUser" action=""
                   class="form-horizontal"
                   method="post" enctype="multipart/form-data">
                 {% csrf_token %}
                 <input type="hidden"  id="projects_old" name="projects_old" value="asdasd">
-                <div class="modal-body" id="modal_edit_user_body">
+                <div class="modal-body" id="modal_edit_user_credentials_body">
                     {% comment %}<div class="form-group">
                         <label for="username_edit" class="col-sm-3 control-label">Username *</label>
                         <div class="col-sm-6">
@@ -27,6 +42,19 @@
                         </div>
                     </div>
                     <div class="form-group">
+                            <label for="password" class="col-sm-3 control-label">Conf. Password</label>
+                            <div class="col-sm-6">
+                               <input class="form-control" id="edit_password2" name="password2" type="password"
+                                       placeholder="Repeat Password" autocomplete="off" required>
+                                <div class="row">
+                                    <div class="col-sm-12">
+                                       <span id="pwmatch_edit" class="glyphicon glyphicon-remove" style="color:#FF0004;"></span> Passwords Match
+                                    </div>
+                                </div>
+                            </div>
+                    </div>
+                    {% comment %}
+                    <div class="form-group">
                         <label for="projects" class="col-sm-3 control-label">Default project *</label>
                         <div class="col-sm-6">
                             <select required id="default_project_edit" class="js-example-basic form-control" name="default_project">
@@ -41,7 +69,7 @@
                             </select>
                         </div>
                     </div>
-
+                    {% endcomment %}
 
                 </div>
                 <div class="modal-footer">
diff --git a/userhandler/templates/modal/user_proj_role_edit.html b/userhandler/templates/modal/user_proj_role_edit.html
new file mode 100644
index 0000000..e1df9d5
--- /dev/null
+++ b/userhandler/templates/modal/user_proj_role_edit.html
@@ -0,0 +1,44 @@
+<!--
+Copyright 2019 EveryUP srl
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an  BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+-->
+<div class="modal" id="modal_edit_user_role_map" xmlns="http://www.w3.org/1999/html">
+    <div class="modal-dialog">
+        <div class="modal-content">
+            <div class="modal-header">
+                <button type="button" class="close" data-dismiss="modal" aria-label="Close">
+                    <span aria-hidden="true">×</span></button>
+                <h4 class="modal-title">Edit Project Role Mapping</h4>
+            </div>
+            <form id="formEditUserRoleMap" action=""
+                  class="form-horizontal"
+                  method="post" enctype="multipart/form-data">
+                {% csrf_token %}
+                <div class="modal-body" id="modal_edit_proj_role_map_body">
+                       
+                </div>
+                <div class="modal-footer">
+                    <button type="button" class="btn btn-default pull-left" data-dismiss="modal">Cancel</button>
+                    <button class="btn btn-primary"
+                            data-loading-text="<i class='fa fa-circle-o-notch fa-spin'></i> Editing..."
+                            id="edit_user_map">Apply
+                    </button>
+
+                </div>
+            </form>
+        </div>
+        <!-- /.modal-content -->
+    </div>
+    <!-- /.modal-dialog -->
+</div>
diff --git a/userhandler/templates/user_list.html b/userhandler/templates/user_list.html
index 361784c..b287b76 100644
--- a/userhandler/templates/user_list.html
+++ b/userhandler/templates/user_list.html
@@ -1,3 +1,18 @@
+<!--
+Copyright 2019 EveryUP srl
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an  BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+-->
 {% extends "base.html" %}
 {% load get %}
 {% load date_tag %}
@@ -26,7 +41,9 @@
     {{ block.super }}
     {% include 'modal/user_details.html' %}
     {% include 'modal/user_create.html' %}
-    {% include 'modal/user_edit.html' %}
+    {% include 'modal/user_credentials_edit.html' %}
+    {% include 'modal/user_proj_role_edit.html' %}
+
 
     {% csrf_token %}
     <div class="row">
@@ -50,7 +67,6 @@
                         <thead>
                         <tr>
                             <th>Name</th>
-                            <th>Projects</th>
                             <th>Identifier</th>
                             <th>Modified</th>
                             <th>Created</th>
@@ -105,27 +121,22 @@
                     },
                     {
                         "render": function (data, type, row) {
-                            return row['projects'];
+                            
+                            return row['_id'];
                         },
                         "targets": 1
                     },
                     {
                         "render": function (data, type, row) {
-                            return row['_id'];
+                            return moment.unix(row["_admin"]['modified']).format('YYYY-MM-DD hh:mm:ss a');
                         },
                         "targets": 2
                     },
                     {
                         "render": function (data, type, row) {
-                            return moment.unix(row["_admin"]['modified']).format('YYYY-MM-DD hh:mm:ss a');
-                        },
-                        "targets": 3
-                    },
-                    {
-                        "render": function (data, type, row) {
                             return moment.unix(row["_admin"]['created']).format('YYYY-MM-DD hh:mm:ss a');
                         },
-                        "targets": 4
+                        "targets": 3
                     },
                     {
                         "render": function (data, type, row) {
@@ -134,17 +145,19 @@
                                 'data-toggle="dropdown" aria-expanded="false">Actions ' +
                                 '<span class="fa fa-caret-down"></span></button> ' +
                                 '<ul class="dropdown-menu">' +
-                                '<li> <a href="#" onclick="javascript:openModalEditUser({user_id:\'' + row['_id'] + '\', usernarme:\'' + row['username'] + '\', projects: \'' + row['projects'] + '\'})">' +
-                                '<i class="fa fa-edit"></i> Edit</a></li>' +
+                                '<li> <a href="#" onclick="javascript:openModalEditUserCredentials({user_id:\'' + row['_id'] + '\', usernarme:\'' + row['username'] + '\'})">' +
+                                '<i class="fa fa-lock"></i>Edit Credentials</a></li>' +
+                                '<li> <a href="#" onclick="javascript:openModalEditUserRoleMap(\''+row['_id']+'\')">' +
+                                '<i class="fa fa-user-tag"></i>Projects-Roles</a></li>' +
                                 '<li> <a href="#" onclick="javascript:deleteUser(\'' + row['_id'] + '\', \'' + row['username'] + '\')"' +
                                 'style="color:red"><i class="fa fa-trash"></i> Delete</a></li> </ul></div>';
                         },
-                        "targets": 5,
+                        "targets": 4,
                         "orderable": false
                     }
                 ]
             });
-
+            /*
             var select2_groups = $('#projects_edit').select2({
                 placeholder: 'Select Projects',
                 width: '100%',
@@ -169,8 +182,8 @@
                         };
                     }
                 }
-            });
-
+            });*/
+            /*
             var select2_single = $('#default_project_edit').select2({
                 placeholder: 'Select Default Project',
                 width: '100%',
@@ -194,7 +207,7 @@
                         };
                     }
                 }
-            });
+            });*/
 
             setInterval(function () {
                 table.ajax.reload();
@@ -250,7 +263,7 @@
                     contentType: false,
                     processData: false
                 }).done(function (response, textStatus, jqXHR) {
-                    $('#modal_edit_user').modal('hide');
+                    $('#modal_edit_user_credentials').modal('hide');
                     table.ajax.reload();
                     bootbox.alert({
                         title: "Result",
@@ -268,6 +281,11 @@
                 });
             });
         
+            $("#password2").keyup(validatePswOnCreate);
+            $("#edit_password2").keyup(validatePswOnEdit);
+
+            $(document).on('click', '.proj-role-map-group-head .btn-add', addMapGroup);
+            $(document).on('click', '.proj-role-map-group .btn-remove', removeMapGroup);
         });
     </script>
 
diff --git a/userhandler/urls.py b/userhandler/urls.py
index 4f38be8..25156f0 100644
--- a/userhandler/urls.py
+++ b/userhandler/urls.py
@@ -20,6 +20,7 @@
 urlpatterns = [
     url(r'^list$', views.user_list, name='list'),
     url(r'^create$', views.create, name='create'),
+    url(r'^(?P<user_id>[-\w]+)/info', views.user_info, name='info'),
     url(r'^(?P<user_id>[-\w]+)$', views.update, name='update'),
     url(r'^(?P<user_id>[-\w]+)/delete$', views.delete, name='delete'),   
 
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):
