diff --git a/jams-common/src/main/java/net/jami/jams/common/objects/user/UserProfile.java b/jams-common/src/main/java/net/jami/jams/common/objects/user/UserProfile.java
index 3ed4f1ddc26792ebdb445cb124a2e07418b4ef85..b9a67de117c6306898f77bc4603362217c2113c6 100644
--- a/jams-common/src/main/java/net/jami/jams/common/objects/user/UserProfile.java
+++ b/jams-common/src/main/java/net/jami/jams/common/objects/user/UserProfile.java
@@ -157,4 +157,27 @@ public class UserProfile implements DatabaseObject {
                 profile.getLastName().equals(this.lastName));
     }
 
+    public void setDefaultValues() {
+        if (this.firstName == null)
+            this.firstName = "";
+        if (this.lastName == null)
+            this.lastName = "";
+        if (this.email == null)
+            this.email = "";
+        if (this.profilePicture == null)
+            this.profilePicture = "";
+        if (this.organization == null)
+            this.organization = "";
+        if (this.phoneNumber == null)
+            this.phoneNumber = "";
+        if (this.phoneNumberExtension == null)
+            this.phoneNumberExtension = "";
+        if (this.faxNumber == null)
+            this.faxNumber = "";
+        if (this.mobileNumber == null)
+            this.mobileNumber = "";
+        if (this.groupMemberships == null)
+            this.groupMemberships = new ArrayList<>();
+    }
+
 }
diff --git a/jams-server/src/main/java/net/jami/jams/server/core/workflows/AddUserToGroupFlow.java b/jams-server/src/main/java/net/jami/jams/server/core/workflows/AddUserToGroupFlow.java
index d772f7173b58e3942d40bf2dd474d4a37d6c3242..ccdf15d46fb57f3ffb9b2c3a5494615ec9b632de 100644
--- a/jams-server/src/main/java/net/jami/jams/server/core/workflows/AddUserToGroupFlow.java
+++ b/jams-server/src/main/java/net/jami/jams/server/core/workflows/AddUserToGroupFlow.java
@@ -40,22 +40,27 @@ public class AddUserToGroupFlow {
                     // otherwise, update the object.
 
                     mapping = dataStore.getUserGroupMappingsDao().getObjects(statementList).get(0);
-                    mapping.addGroup(groupName);
-                    String newGroups = mapping.getGroups();
+                    if (!mapping.getGroups().contains(groupName)) {
+                        mapping.addGroup(groupName);
+                        String newGroups = mapping.getGroups();
 
-                    StatementList update = new StatementList();
-                    StatementElement st0 = new StatementElement("groups", "=", newGroups, "");
-                    update.addStatement(st0);
-                    StatementList constraint = new StatementList();
-                    StatementElement st1 = new StatementElement("username", "=", username, "");
-                    constraint.addStatement(st1);
-                    dataStore.getUserGroupMappingsDao().updateObject(update, constraint);
+                        StatementList update = new StatementList();
+                        StatementElement st0 = new StatementElement("groups", "=", newGroups, "");
+                        update.addStatement(st0);
+                        StatementList constraint = new StatementList();
+                        StatementElement st1 = new StatementElement("username", "=", username, "");
+                        constraint.addStatement(st1);
+                        dataStore.getUserGroupMappingsDao().updateObject(update, constraint);
+                    }
                 }
 
                 if (profile != null) {
                     if (profile.getGroupMemberships() == null)
                         profile.setGroupMemberships(new ArrayList<>());
-                    profile.getGroupMemberships().add(groupName);
+
+                    if (!profile.getGroupMemberships().contains(groupName))
+                        profile.getGroupMemberships().add(groupName);
+
                     dataStore.updateUserProfile(profile);
                 }
             }
diff --git a/jams-server/src/main/java/net/jami/jams/server/core/workflows/RegisterDeviceFlow.java b/jams-server/src/main/java/net/jami/jams/server/core/workflows/RegisterDeviceFlow.java
index 317a6637ffe559eda0f1e66433fb3cc96c29b621..b892994452169e21e78426a8e90a6fa59bd997af 100644
--- a/jams-server/src/main/java/net/jami/jams/server/core/workflows/RegisterDeviceFlow.java
+++ b/jams-server/src/main/java/net/jami/jams/server/core/workflows/RegisterDeviceFlow.java
@@ -52,6 +52,7 @@ public class RegisterDeviceFlow {
             StatementList statementList = new StatementList();
             statementList.addStatement(new StatementElement("username", "=", username, ""));
             User user = dataStore.getUserDao().getObjects(statementList).get(0);
+//            UserProfile userProfile = dataStore.getUserProfileDao().getObjects(statementList).get(0);
             UserProfile userProfile = userAuthenticationModule.getAuthSources()
                     .get(new AuthModuleKey(user.getRealm(),user.getUserType()))
                     .searchUserProfiles(username,"LOGON_NAME").get(0);
diff --git a/jams-server/src/main/java/net/jami/jams/server/servlets/api/admin/group/GroupServlet.java b/jams-server/src/main/java/net/jami/jams/server/servlets/api/admin/group/GroupServlet.java
index 1e91297205c6046ac94edf4f7203cb196c44ffcf..77d0d0e4288b5e4eca6d24491e8d60be3393a7b6 100644
--- a/jams-server/src/main/java/net/jami/jams/server/servlets/api/admin/group/GroupServlet.java
+++ b/jams-server/src/main/java/net/jami/jams/server/servlets/api/admin/group/GroupServlet.java
@@ -171,12 +171,6 @@ public class GroupServlet extends HttpServlet {
             List<UserProfile> validProfiles = dataStore.getUserProfileDao().getObjects(null).stream().filter(profile ->
                     profile.getGroupMemberships().remove(req.getParameter("groupName"))).collect(Collectors.toList());
 
-
-
-
-
-
-
             validProfiles.parallelStream().forEach(profile -> {
 
                 StatementList statementList = new StatementList();
@@ -207,4 +201,4 @@ public class GroupServlet extends HttpServlet {
             resp.sendError(500, "Could not delete the group successfully!");
         }
     }
-}
+}
\ No newline at end of file
diff --git a/jams-server/src/main/java/net/jami/jams/server/servlets/api/auth/directory/SearchDirectoryServlet.java b/jams-server/src/main/java/net/jami/jams/server/servlets/api/auth/directory/SearchDirectoryServlet.java
index e58e2efa3bad90bb37f95d26253fab62fc6279d9..7c3d2fdc07178c910f687d6e827c356b77b43a62 100644
--- a/jams-server/src/main/java/net/jami/jams/server/servlets/api/auth/directory/SearchDirectoryServlet.java
+++ b/jams-server/src/main/java/net/jami/jams/server/servlets/api/auth/directory/SearchDirectoryServlet.java
@@ -51,6 +51,7 @@ public class SearchDirectoryServlet extends HttpServlet {
     //The search directory function does not automatically create users, this would be costly at this point
     //right now, we will implement it when Jami supports lists of users. this is a work in progress as it
     //requires changes on the name server as well.
+    List<UserProfile> userProfiles = new ArrayList<>();
 
     /**
      *
@@ -58,26 +59,24 @@ public class SearchDirectoryServlet extends HttpServlet {
     @Override
     @JsonContent
     protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
-        List<UserProfile> userProfiles = new ArrayList<>();
-        userAuthenticationModule.getAuthSources().forEach((k, v) -> {
 
-            List<UserProfile> profiles;
+        userAuthenticationModule.getAuthSources().forEach((k, v) -> {
             if (req.getParameter("queryString").equals("*"))
-                profiles = v.searchUserProfiles(req.getParameter("queryString"), "FULL_TEXT_NAME");
+                userProfiles = v.searchUserProfiles(req.getParameter("queryString"), "FULL_TEXT_NAME");
             else {
-                profiles = v.searchUserProfiles(req.getParameter("queryString"), "FULL_TEXT_NAME");
+                userProfiles = v.searchUserProfiles(req.getParameter("queryString"), "FULL_TEXT_NAME");
                 List<UserProfile> profiles2 = v.searchUserProfiles(req.getParameter("queryString"), "LOGON_NAME");
-                for (Iterator<UserProfile> it = profiles.iterator(); it.hasNext(); ) {
+                for (Iterator<UserProfile> it = userProfiles.iterator(); it.hasNext(); ) {
                     UserProfile p = it.next();
                     for (UserProfile p2 : profiles2) {
                         if (p2.equals(p))
                             it.remove();
                     }
                 }
-                profiles.addAll(profiles2);
+                userProfiles.addAll(profiles2);
             }
 
-            profiles.parallelStream().forEach(profile -> {
+            userProfiles.parallelStream().forEach(profile -> {
                 StatementList statementList = new StatementList();
                 StatementElement statementElement = new StatementElement("username", "=", profile.getUsername(), "");
                 statementList.addStatement(statementElement);
@@ -95,7 +94,6 @@ public class SearchDirectoryServlet extends HttpServlet {
                         profile.setId(results.get(0).getJamiId());
                     }
                 }
-                userProfiles.add(profile);
             });
         });
 
diff --git a/ldap-connector/pom.xml b/ldap-connector/pom.xml
index 46acc9bbf8a64f65d64623e5eab26f98de4c618c..e34a8ae6a18dbf7e50c37f5a49e0c18bed48a9a8 100644
--- a/ldap-connector/pom.xml
+++ b/ldap-connector/pom.xml
@@ -29,6 +29,12 @@
             <version>${embedded.ldap.unit}</version>
             <scope>test</scope>
         </dependency>
+        <dependency>
+            <groupId>net.jami</groupId>
+            <artifactId>jams-server</artifactId>
+            <version>2.0</version>
+            <scope>compile</scope>
+        </dependency>
     </dependencies>
 
     <repositories>
diff --git a/ldap-connector/src/main/java/net/jami/jams/ldap/connector/service/UserProfileService.java b/ldap-connector/src/main/java/net/jami/jams/ldap/connector/service/UserProfileService.java
index f3ea3fac1c434c7f018d792ce1ad9a39102d1546..83beaca0c3d5ec02db479661816b9e1dbb820a41 100644
--- a/ldap-connector/src/main/java/net/jami/jams/ldap/connector/service/UserProfileService.java
+++ b/ldap-connector/src/main/java/net/jami/jams/ldap/connector/service/UserProfileService.java
@@ -23,6 +23,8 @@
 package net.jami.jams.ldap.connector.service;
 
 import lombok.extern.slf4j.Slf4j;
+import net.jami.jams.common.dao.StatementElement;
+import net.jami.jams.common.dao.StatementList;
 import net.jami.jams.common.objects.user.UserProfile;
 import net.jami.jams.ldap.connector.LDAPConnector;
 import org.ldaptive.Connection;
@@ -37,6 +39,8 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.stream.Collectors;
 
+import static net.jami.jams.server.Server.dataStore;
+
 @Slf4j
 public class UserProfileService {
 
@@ -57,7 +61,18 @@ public class UserProfileService {
                 SearchOperation search = new SearchOperation(connectionFactory);
                 SearchResponse res = search.execute(buildRequest(queryString,field, exactMatch));
                 if (res.getEntries().size() == 0) return new ArrayList<>();
-                return res.getEntries().stream().map(UserProfileService::profileFromResponse).collect(Collectors.toList());
+                List<UserProfile> profilesFromResponse = res.getEntries().stream().map(UserProfileService::profileFromResponse).collect(Collectors.toList());
+                for (UserProfile p: profilesFromResponse) {
+
+                    StatementList statementList = new StatementList();
+                    StatementElement st = new StatementElement("username", "=", p.getUsername(), "");
+                    statementList.addStatement(st);
+
+                    if (dataStore.getUserProfileDao().getObjects(statementList).isEmpty())
+                        dataStore.getUserProfileDao().storeObject(p);
+                }
+
+                return profilesFromResponse;
             } catch (Exception e) {
                 log.error("Could not search LDAP directory with error " + e.toString());
                 return null;
@@ -104,6 +119,7 @@ public class UserProfileService {
                     UserProfile.exposedMethods.get("set" + fieldMap.get(attribute)).invoke(userProfile, entry.getAttribute(attribute).getStringValue());
                 }
             }
+            userProfile.setDefaultValues();
             return userProfile;
         }
         catch (Exception e){