diff --git a/app/gen-server/lib/homedb/UsersManager.ts b/app/gen-server/lib/homedb/UsersManager.ts
index 48729960aec..5d6ff724487 100644
--- a/app/gen-server/lib/homedb/UsersManager.ts
+++ b/app/gen-server/lib/homedb/UsersManager.ts
@@ -337,12 +337,7 @@ export class UsersManager {
     email: string,
     manager?: EntityManager
   ): Promise<User|undefined> {
-    const normalizedEmail = normalizeEmail(email);
-    return await (manager || this._connection).createQueryBuilder()
-      .select('user')
-      .from(User, 'user')
-      .leftJoinAndSelect('user.logins', 'logins')
-      .where('email = :email', {email: normalizedEmail})
+    return await this._buildExistingUsersByLoginRequest([email], manager)
       .getOne() || undefined;
   }
 
@@ -353,12 +348,7 @@ export class UsersManager {
     emails: string[],
     manager?: EntityManager
   ): Promise<User[]> {
-    const normalizedEmails = emails.map(email=> normalizeEmail(email));
-    return await (manager || this._connection).createQueryBuilder()
-      .select('user')
-      .from(User, 'user')
-      .leftJoinAndSelect('user.logins', 'logins')
-      .where('email IN (:...emails)', {emails: normalizedEmails})
+    return await this._buildExistingUsersByLoginRequest(emails, manager)
       .getMany();
   }
 
@@ -487,6 +477,13 @@ export class UsersManager {
     });
   }
 
+  /*
+   * This function is an alias of getUserByLogin
+   * Its purpose is to be more expressive and avoid confusion when reading code.
+   * FIXME :In the future it may be used to split getUserByLogin in two distinct functions
+   * One for creation
+   * the other for retrieving users in order to make it more maintainable
+   */
   public async createUser(email: string, options: GetUserOptions = {}): Promise<User|undefined> {
     return await this.getUserByLogin(email, options);
   }
@@ -633,15 +630,15 @@ export class UsersManager {
       const emailMap = delta.users;
       const emails = Object.keys(emailMap);
       const existingUsers = await this.getExistingUsersByLogin(emails, transaction);
-      const emailsExistingUsers = existingUsers.map(user=>user.loginEmail);
-      const emailsUsersToCreate = emails.filter(email => ! emailsExistingUsers.includes(email));
-      for (const email of emailsUsersToCreate){
+      const emailsExistingUsers = existingUsers.map(user => user.loginEmail);
+      const emailsUsersToCreate = emails.filter(email => !emailsExistingUsers.includes(email));
+      const emailUsers = [...existingUsers];
+      for (const email of emailsUsersToCreate) {
         const user = await this.createUser(email, {manager: transaction});
         if (user !== undefined) {
-          existingUsers.push(user);
+          emailUsers.push(user);
         }
       }
-      const emailUsers = [...existingUsers];
       emails.forEach((email, i) => {
         const userIdAffected = emailUsers[i]!.id;
         // Org-level sharing with everyone would allow serious spamming - forbid it.
@@ -793,4 +790,16 @@ export class UsersManager {
     }
     delta.users = users;
   }
+
+  private _buildExistingUsersByLoginRequest(
+    emails: string[],
+    manager?: EntityManager
+  ) {
+    const normalizedEmails = emails.map(email=> normalizeEmail(email));
+    return (manager || this._connection).createQueryBuilder()
+      .select('user')
+      .from(User, 'user')
+      .leftJoinAndSelect('user.logins', 'logins')
+      .where('email IN (:...emails)', {emails: normalizedEmails});
+  }
 }