diff --git a/datastore/src/main/java/net/jami/datastore/dao/UserDao.java b/datastore/src/main/java/net/jami/datastore/dao/UserDao.java
index 02db13401ea14315cf8b65b82ab4426889831b71..99dd88b5a596413bfb4a124ff179916d8d1cabe1 100644
--- a/datastore/src/main/java/net/jami/datastore/dao/UserDao.java
+++ b/datastore/src/main/java/net/jami/datastore/dao/UserDao.java
@@ -24,6 +24,7 @@ package net.jami.datastore.dao;
 
 import lombok.extern.slf4j.Slf4j;
 import net.jami.datastore.main.DataStore;
+import net.jami.jams.common.dao.StatementList;
 import net.jami.jams.common.dao.connectivity.SQLConnection;
 import net.jami.jams.common.objects.user.User;
 
@@ -82,4 +83,31 @@ public class UserDao extends AbstractDao<User> {
             DataStore.connectionPool.returnConnection(connection);
         }
     }
+
+    @Override
+    public boolean updateObject(StatementList update, StatementList constraints) {
+
+        String pw = update.getStatements().get(0).getValue();
+        String user = update.getStatements().get(1).getValue();
+        SQLConnection connection = DataStore.connectionPool.getConnection();
+
+        try{
+            PreparedStatement ps = connection.getConnection().prepareStatement("UPDATE users SET password = ? WHERE username = ?");
+            ps.setString(1, pw);
+            ps.setString(2, user);
+            ps.executeUpdate();
+
+            ps = connection.getConnection().prepareStatement("UPDATE users SET needsPasswordReset = ? WHERE username = ?");
+            ps.setString(1, "false");
+            ps.setString(2, user);
+            return ps.executeUpdate() != 0;
+        }
+        catch (Exception e){
+            log.error("An error has occurred while trying to update a user: " + e.toString());
+            return false;
+        }
+        finally {
+            DataStore.connectionPool.returnConnection(connection);
+        }
+    }
 }
diff --git a/datastore/src/main/java/net/jami/datastore/main/DataStore.java b/datastore/src/main/java/net/jami/datastore/main/DataStore.java
index 5c6cba380b9355eb46186e78bd32b06ddcec5e43..c8db40ee40a89003739f5248f4affa7114fb8f51 100644
--- a/datastore/src/main/java/net/jami/datastore/main/DataStore.java
+++ b/datastore/src/main/java/net/jami/datastore/main/DataStore.java
@@ -24,15 +24,7 @@ package net.jami.datastore.main;
 
 import lombok.Getter;
 import lombok.Setter;
-<<<<<<< HEAD
-import net.jami.datastore.dao.ContactDao;
-import net.jami.datastore.dao.DeviceDao;
-import net.jami.datastore.dao.JwtDao;
-import net.jami.datastore.dao.SystemDao;
-import net.jami.datastore.dao.UserDao;
-=======
 import net.jami.datastore.dao.*;
->>>>>>> 18375d3... cleanup for local users display
 import net.jami.jams.common.authentication.AuthenticationSource;
 import net.jami.jams.common.authentication.AuthenticationSourceInfo;
 import net.jami.jams.common.authentication.AuthenticationSourceType;
diff --git a/jams-common/pom.xml b/jams-common/pom.xml
index 0f92e87d5b902990434a4ddb5b525440fa5fcbab..69dc94883f8a731a3eeb5b49bf6c22fdd5e5ef06 100644
--- a/jams-common/pom.xml
+++ b/jams-common/pom.xml
@@ -40,7 +40,7 @@
         <dependency>
             <groupId>com.nimbusds</groupId>
             <artifactId>nimbus-jose-jwt</artifactId>
-            <version>7.0.1</version>
+            <version>8.17</version>
             <scope>compile</scope>
         </dependency>
     </dependencies>
diff --git a/jams-server/src/main/java/net/jami/jams/server/servlets/api/admin/users/UserServlet.java b/jams-server/src/main/java/net/jami/jams/server/servlets/api/admin/users/UserServlet.java
index 6730905ae63c5ae91b2f438cbab8b20b4a077b71..a3f4a83c0e2dbd0aead24409b2c2ff3c828e9ad3 100644
--- a/jams-server/src/main/java/net/jami/jams/server/servlets/api/admin/users/UserServlet.java
+++ b/jams-server/src/main/java/net/jami/jams/server/servlets/api/admin/users/UserServlet.java
@@ -40,6 +40,9 @@ import net.jami.jams.common.objects.user.UserProfile;
 import net.jami.jams.server.core.workflows.RevokeUserFlow;
 
 import java.io.IOException;
+import java.security.SecureRandom;
+import java.util.HashMap;
+import java.util.stream.Collectors;
 
 import static net.jami.jams.server.Server.dataStore;
 import static net.jami.jams.server.Server.nameServer;
@@ -63,11 +66,15 @@ public class UserServlet extends HttpServlet {
         User user = new User();
         user.setUsername(req.getParameter("username"));
         user.setNeedsPasswordReset(true);
-        user.setPassword("TEMP-PASSWORD");
+        String pw = new SecureRandom().ints(12, 48, 58).mapToObj(i -> String.valueOf((char)i)).collect(Collectors.joining());
+        user.setPassword(pw);
         user.setRealm("LOCAL");
         user.setUserType(AuthenticationSourceType.LOCAL);
         if(userAuthenticationModule.createUser(user.getUserType(),user.getRealm(),nameServer,user)){
-            resp.getOutputStream().write(JsonStream.serialize(user).getBytes());
+            // resp.getOutputStream().write(JsonStream.serialize(user).getBytes());
+            HashMap<String,String> statusInfo = new HashMap<>();
+            statusInfo.put("password", pw);
+            resp.getOutputStream().write(JsonStream.serialize(statusInfo).getBytes());
             return;
         }
         resp.sendError(500,"Could not create a user successfully!");
@@ -75,7 +82,7 @@ public class UserServlet extends HttpServlet {
 
     //Update user data.
     @Override
-    protected void doPut(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
+    protected void doPut(HttpServletRequest req, HttpServletResponse resp) throws IOException {
         String username = req.getParameter("username");
         //Check if he is AD/LDAP - then return a 403, because we can't set such password.
         StatementList select = new StatementList();
@@ -96,7 +103,7 @@ public class UserServlet extends HttpServlet {
 
     //Revoke a user.
     @Override
-    protected void doDelete(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
+    protected void doDelete(HttpServletRequest req, HttpServletResponse resp) throws IOException {
         DeviceRevocationResponse devResponse = RevokeUserFlow.revokeUser(req.getParameter("username"));
         if(devResponse != null) resp.getOutputStream().write(JsonStream.serialize(devResponse).getBytes());
         else resp.sendError(500,"An exception has occurred while trying to revoke a device!");
diff --git a/jams-server/src/main/java/net/jami/jams/server/servlets/api/auth/user/UserServlet.java b/jams-server/src/main/java/net/jami/jams/server/servlets/api/auth/user/UserServlet.java
index c4ad339f119e0afa86503ca5da0400dc8f38206a..1428b70744aef82fcf37f53a2ce6efd1e61adca5 100644
--- a/jams-server/src/main/java/net/jami/jams/server/servlets/api/auth/user/UserServlet.java
+++ b/jams-server/src/main/java/net/jami/jams/server/servlets/api/auth/user/UserServlet.java
@@ -94,11 +94,12 @@ public class UserServlet extends HttpServlet {
      */
     @Override
     @ScopedServletMethod(securityGroups = AccessLevel.USER)
-    protected void doPut(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
+    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
         String username = req.getAttribute("username").toString();
         //Check if he is AD/LDAP - then return a 401, because we can't set such password.
         StatementList select = new StatementList();
         StatementElement st = new StatementElement("username","=",username,"");
+        select.addStatement(st);
         if(dataStore.getUserDao().getObjects(select).get(0).getUserType() != AuthenticationSourceType.LOCAL){
             resp.sendError(500,"The user is not a local user, therefore we cannot change his data!");
             return;
diff --git a/jams-server/src/main/resources/webapp/js/api.js b/jams-server/src/main/resources/webapp/js/api.js
index a5ad018c4d08173e90b59c66ba16dc396076d31a..56212c3b8fa23761f1b1f0dce5344a472e809233 100644
--- a/jams-server/src/main/resources/webapp/js/api.js
+++ b/jams-server/src/main/resources/webapp/js/api.js
@@ -47,7 +47,8 @@ var api_path_get_directories = '/api/auth/directories';
 var api_path_get_needs_update = '/api/admin/update';
 var api_path_get_start_update = '/api/admin/update';
 var api_path_post_create_user = '/api/admin/user';
-var api_path_put_update_user = '/api/admin/user';
+var api_path_put_update_user = '/api/auth/user';
+var api_path_put_admin_update_user = '/api/admin/user';
 var api_path_get_exists_user = '/api/admin/user';
 var api_path_get_user_directory_search ='/api/auth/directory/search';
 var api_path_get_user_needs_reset ='/api/user/needsreset';
@@ -78,7 +79,6 @@ function ajaxApiCall(api_path, request_type, data, credentials, callBackFunction
     if (window.localStorage.getItem('access_token')) {
 
         var jwt = localStorage.getItem('access_token');
-
         ajax['headers'] =  {
             "Bearer": jwt,
         }
@@ -87,7 +87,8 @@ function ajaxApiCall(api_path, request_type, data, credentials, callBackFunction
     // pass data in the header
     if (data) {
         if (api_path == api_path_get_user_directory_search || api_path == api_path_get_auth_user_search ||
-            api_path == api_path_get_user_needs_reset || (api_path == api_path_post_create_user && request_type == 'POST'))
+            api_path == api_path_get_user_needs_reset || (api_path == api_path_post_create_user && request_type == 'POST') ||
+            api_path == api_path_put_update_user)
             isSearch = true;
 
         // search dataType
diff --git a/jams-server/src/main/resources/webapp/js/new-password.js b/jams-server/src/main/resources/webapp/js/new-password.js
index 9e0c33b0e63f3a6474d3ad83093a9f64d9553e50..785d35a83e933fecb0b5f70d9fbc285dc9a4fe59 100644
--- a/jams-server/src/main/resources/webapp/js/new-password.js
+++ b/jams-server/src/main/resources/webapp/js/new-password.js
@@ -25,7 +25,6 @@ var credentials = null;
 document.getElementById("changePasswordButton").addEventListener('click', function() {
 
     event.preventDefault();
-    console.log("in click event");
     var inputPassword = $('#inputNewPassword').val();
     var inputConfirmPassword = $('#inputConfirmPassword').val();
     var oldPassword = $('#inputCurrentPassword').val();
@@ -53,15 +52,14 @@ document.getElementById("changePasswordButton").addEventListener('click', functi
     else if (inputPassword == inputConfirmPassword) {
         $('#message').html('Password Match: Welcome to Jams').css('color', '#28a745');
         if (credentials["username"] && credentials["password"] && credentials["oldPassword"]) {
-            console.log("updating local account...");
-            ajaxApiCall(api_path_post_update_user, "POST", jsonData, null, updateLocalAccountPasswordCallBackHandler);
+            ajaxApiCall(api_path_put_update_user, "POST", credentials, null, updateLocalAccountPasswordCallBackHandler);
         }
     }
 });
 
 
-function updateLocalAccountPasswordCallBackHandler() {
-    console.log("account update successful!");
+function updateLocalAccountPasswordCallBackHandler(data) {
     // now we can login normally
-    ajaxApiCall(api_path_post_auth_login, "POST", jsonData, null, signinCallBackHandler);
+    if (data.status != 500)
+        ajaxApiCall(api_path_post_auth_login, "POST", jsonData, null, signinCallBackHandler);
 }
\ No newline at end of file
diff --git a/jams-server/src/main/resources/webapp/js/search.js b/jams-server/src/main/resources/webapp/js/search.js
index 56ea4384bf0b982a04225ec6d0a7a0335b7ef910..a973a5a444f2151e1264304c132d470f6e7fd549 100644
--- a/jams-server/src/main/resources/webapp/js/search.js
+++ b/jams-server/src/main/resources/webapp/js/search.js
@@ -346,7 +346,6 @@ function submitForm(data) {
 }
 
 function handleUserProfileCreation(data) {
-    console.log(data);
     ajaxApiCall(api_path_post_create_user, 'POST', {"username": data.username}, null, handleUserCreation);
 }
 
@@ -462,7 +461,7 @@ function handleUserCreation(data) {
             " on the public nameserver, or another unknown error has occurred. " +
             "Please choose another one.");
     else
-        $('#user-pw-modal-body').text("New user successfully created. Here is the one time password: " + data.pw);
+        $('#user-pw-modal-body').text("New user successfully created. Here is the one time password: " + data.password);
 
     ajaxApiCall(api_path_get_user_directory_search, 'GET', {"queryString":"*"}, null, listAllUsers);
 }
diff --git a/jams-server/src/main/resources/webapp/js/signup.js b/jams-server/src/main/resources/webapp/js/signup.js
index 8f20f95ac9da1f6d61933f1d7b8c57b5d60c6b04..a43dfe921f0e1afaccc4dd726e2c35bf7ab90f8a 100644
--- a/jams-server/src/main/resources/webapp/js/signup.js
+++ b/jams-server/src/main/resources/webapp/js/signup.js
@@ -92,14 +92,18 @@ function createAdminCallBackHandler(data, statusCode, jqXHR) {
 
 function signinCallBackHandler(data, statusCode, jqXHR) {
 
-    if (jqXHR.status == 200 && data.access_token != 'null' && (data.needsReset == false || data.needsReset == null)) {
-    setJWT(data);
-    var tokenJSON = JSON.parse(atob(window.localStorage.getItem('access_token').split('.')[1]));
+    var tokenJSON = '';
+    if (data.access_token) {
+        setJWT(data);
+        tokenJSON = JSON.parse(atob(window.localStorage.getItem('access_token').split('.')[1]));
+    }
+
+    if (jqXHR.status == 200 && tokenJSON != '' && tokenJSON.oneTimePassword == false) {
+
     // check server configuration status
     getServerConfigStatus();
-  }  else if (jqXHR.status == 200 && tokenJSON.oneTimePassword == true) {
-      getServerConfigStatus();
-      window.location.replace("new-password.html?username=" + credentials["username"]);
+  }  else if (jqXHR.status == 200 && tokenJSON != '' && tokenJSON.oneTimePassword == true) {
+      window.location.replace("new-password.html?username=" + getUser());
   }
   else {
     invalidLogin();
diff --git a/jams-server/src/main/resources/webapp/js/user.js b/jams-server/src/main/resources/webapp/js/user.js
index ca0c9b35e47767f671ac0bdff12c854384cfee9f..d809d9657eff967382e5460f6f63257625ba4577 100644
--- a/jams-server/src/main/resources/webapp/js/user.js
+++ b/jams-server/src/main/resources/webapp/js/user.js
@@ -82,7 +82,7 @@ $(document).ready(function() {
                     'extension': $('#input-extension-update').val(),
                     'mobile': $('#input-mobile-update').val()
                 }
-                ajaxApiCall(api_path_post_update_user, 'POST', data, null, handleUserUpdate);
+                ajaxApiCall(api_path_put_update_user, 'POST', data, null, handleUserUpdate);
             });
 
         });
diff --git a/jams-server/src/main/resources/webapp/templates/new-password.html b/jams-server/src/main/resources/webapp/templates/new-password.html
index b0c0461f3efb07f0bac09c60c5ac8816fa6f11da..112bd4e3289bf34023b119fb25bd64390ccd0b5a 100644
--- a/jams-server/src/main/resources/webapp/templates/new-password.html
+++ b/jams-server/src/main/resources/webapp/templates/new-password.html
@@ -42,7 +42,6 @@
 <script src="../js/api.js" charset="utf-8"></script>
 <script src="../js/auth.js" charset="utf-8"></script>
 <script>
-    checkAuthentication();
     $(function () {
         $("#header").load("header.html");
         $("#footer").load("footer.html");