diff --git a/ad-connector/src/main/java/net/jami/jams/ad/connector/ADConnector.java b/ad-connector/src/main/java/net/jami/jams/ad/connector/ADConnector.java
index 610e4e952e14a37ed899bbaeda2c538208d9f2e9..0b270ced2c0e647c4310554f1058a180161add2f 100644
--- a/ad-connector/src/main/java/net/jami/jams/ad/connector/ADConnector.java
+++ b/ad-connector/src/main/java/net/jami/jams/ad/connector/ADConnector.java
@@ -4,6 +4,7 @@ import com.imperva.ddc.core.query.Endpoint;
 import com.jsoniter.JsonIterator;
 import lombok.extern.slf4j.Slf4j;
 import net.jami.jams.ad.connector.service.AuthenticationService;
+import net.jami.jams.ad.connector.service.UserProfileService;
 import net.jami.jams.common.authentication.AuthenticationSource;
 import net.jami.jams.common.authentication.AuthenticationSourceInfo;
 import net.jami.jams.common.authentication.AuthenticationSourceType;
@@ -19,7 +20,8 @@ public class ADConnector implements AuthenticationSource {
 
     private static final ConcurrentLinkedQueue<Endpoint> endpoints = new ConcurrentLinkedQueue<>();
     private static ActiveDirectorySettings settings;
-    private AuthenticationService authenticationService = new AuthenticationService();
+    private final AuthenticationService authenticationService = new AuthenticationService();
+    private final UserProfileService userProfileService = new UserProfileService();
 
     public ADConnector(String settings) {
         JsoniterRegistry.initCodecs();
@@ -65,11 +67,10 @@ public class ADConnector implements AuthenticationSource {
     }
 
     @Override
-    public UserProfile getUserProfile(String username) {
-        return null;
+    public UserProfile getUserProfile(String queryString, String field) {
+        return userProfileService.getUserProfile(queryString,field);
     }
 
-
     @Override
     public boolean authenticate(String username, String password) {
         try {
diff --git a/ad-connector/src/main/java/net/jami/jams/ad/connector/service/UserProfileService.java b/ad-connector/src/main/java/net/jami/jams/ad/connector/service/UserProfileService.java
index be611eec61c396467ae7fed577b312e96a8b0074..73d9943b9e5df2e6c3900a1af89e9ecdea82c540 100644
--- a/ad-connector/src/main/java/net/jami/jams/ad/connector/service/UserProfileService.java
+++ b/ad-connector/src/main/java/net/jami/jams/ad/connector/service/UserProfileService.java
@@ -1,7 +1,94 @@
 package net.jami.jams.ad.connector.service;
 
+import com.imperva.ddc.core.Connector;
+import com.imperva.ddc.core.language.PhraseOperator;
+import com.imperva.ddc.core.language.QueryAssembler;
+import com.imperva.ddc.core.language.Sentence;
+import com.imperva.ddc.core.language.SentenceOperator;
+import com.imperva.ddc.core.query.*;
+import lombok.extern.slf4j.Slf4j;
+import net.jami.jams.ad.connector.ADConnector;
+import net.jami.jams.common.objects.user.UserProfile;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.stream.Collectors;
+
+@Slf4j
 public class UserProfileService {
 
+    private static final HashMap<String,String> fieldMap = new HashMap<>();
+
+    static{
+        fieldMap.put("givenname","FirstName");
+        fieldMap.put("sn","LastName");
+        fieldMap.put("thumbnailPhoto","ProfilePicture");
+        fieldMap.put("mail","Email");
+        fieldMap.put("telephoneNumber","PhoneNumber");
+        fieldMap.put("mobile","MobileNumber");
+        fieldMap.put("facsimileTelephoneNumber","FaxNumber");
+        fieldMap.put("extensionName","PhoneNumberExtension");
+        fieldMap.put("o","Organization");
+    }
+
+    public UserProfile getUserProfile(String queryString, String field){
+        Endpoint endpoint = ADConnector.getConnection();
+        try{
+            QueryRequest queryRequest = buildRequest(endpoint);
+            Sentence sentence = null;
+            if(field.equals("LOGON_NAME")){
+                sentence = new QueryAssembler().addPhrase(FieldType.LOGON_NAME, PhraseOperator.EQUAL, queryString)
+                        .closeSentence();
+            }
+            if(field.equals("FULL_TEXT_NAME")) {
+                sentence = new QueryAssembler().addPhrase(FieldType.FIRST_NAME, PhraseOperator.EQUAL, queryString)
+                        .addPhrase(FieldType.LAST_NAME, PhraseOperator.EQUAL, queryString)
+                        .closeSentence(SentenceOperator.OR);
+            }
+            queryRequest.addSearchSentence(sentence);
+            QueryResponse queryResponse;
+            try(Connector connector = new Connector(queryRequest)) {
+                queryResponse = connector.execute();
+            }
+            List<Field> fields = queryResponse.getAll().stream().map(EntityResponse::getValue).collect(Collectors.toList()).get(0);
+            return profileFromResponse(fields);
+        }
+        catch (Exception e){
+            log.error("Could not find entity with specified parameters.");
+            return null;
+        }
+        finally {
+            ADConnector.returnConnection(endpoint);
+        }
+    }
+
+
+    public static QueryRequest buildRequest(Endpoint endpoint) {
+        QueryRequest queryRequest = new QueryRequest();
+        queryRequest.setDirectoryType(DirectoryType.MS_ACTIVE_DIRECTORY);
+        queryRequest.setEndpoints(new ArrayList<>() {{ add(endpoint);}});
+        queryRequest.setSizeLimit(1);
+        queryRequest.setTimeLimit(1000);
+        queryRequest.setObjectType(ObjectType.USER);
+        for(String field : fieldMap.keySet()) queryRequest.addRequestedField(field);
+        return queryRequest;
+    }
+
+    public static UserProfile profileFromResponse(List<Field> fields){
+        //Use reflection to remap.
+        try {
+            UserProfile userProfile = new UserProfile();
+            for (Field field : fields) {
+                UserProfile.exposedMethods.get("set" + fieldMap.get(field.getName())).invoke(userProfile, field.getValue());
+            }
+            return userProfile;
+        }
+        catch (Exception e){
+            log.error("An error occured while trying to invoke methods: " + e.toString());
+            return null;
+        }
+    }
 
 
 }
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 a142753ab8b1c015f89d56b7ad7e6412d3858f0e..c8acdbe60ea623b4a9ce9eed0ccb454120c54d9c 100644
--- a/datastore/src/main/java/net/jami/datastore/main/DataStore.java
+++ b/datastore/src/main/java/net/jami/datastore/main/DataStore.java
@@ -47,7 +47,7 @@ public class DataStore implements AuthenticationSource {
     }
 
     @Override
-    public UserProfile getUserProfile(String username) {
+    public UserProfile getUserProfile(String queryString, String field) {
         return null;
     }
 
diff --git a/jams-common/src/main/java/net/jami/jams/common/authentication/AuthenticationSource.java b/jams-common/src/main/java/net/jami/jams/common/authentication/AuthenticationSource.java
index f00b6d9598e9dea13632e75eef0232bd57e7d9ec..d2c95a25827bbc58d1f9df1fa8a379eb1c19084a 100644
--- a/jams-common/src/main/java/net/jami/jams/common/authentication/AuthenticationSource.java
+++ b/jams-common/src/main/java/net/jami/jams/common/authentication/AuthenticationSource.java
@@ -6,7 +6,7 @@ import net.jami.jams.common.objects.user.UserProfile;
 public interface AuthenticationSource {
 
     boolean createUser(User user);
-    UserProfile getUserProfile(String username);
+    UserProfile getUserProfile(String queryString, String field);
     boolean authenticate(String username, String password);
     AuthenticationSourceInfo getInfo();
     boolean testConfiguration(String configuration);
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 92ce57987b27a24d981edb5d1ccc8284b8bc8e0f..19f47b105e2016d89d4b9f9c5cb3fc612894f695 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
@@ -3,12 +3,33 @@ package net.jami.jams.common.objects.user;
 import lombok.Getter;
 import lombok.Setter;
 
+import java.lang.reflect.Method;
+import java.util.HashMap;
+
 @Getter
 @Setter
 public class UserProfile {
+
+
+    public static HashMap<String, Method> exposedMethods = new HashMap<>();
+
+    static{
+        for(Method method: UserProfile.class.getMethods()){
+            exposedMethods.put(method.getName(),method);
+        }
+    }
+
+
     private String firstName;
     private String lastName;
     private String phoneNumber;
+    private String phoneNumberExtension;
+    private String mobileNumber;
+    private String faxNumber;
     private String profilePicture;
     private String email;
+    private String organization;
+
+
+
 }
diff --git a/jams-server/src/main/java/net/jami/jams/server/Server.java b/jams-server/src/main/java/net/jami/jams/server/Server.java
index cc584dab3d7df0b2b0aa7e82da397a17026c13bb..757241b7a1cdf80b1221eb37dc1946383f6fe4a6 100644
--- a/jams-server/src/main/java/net/jami/jams/server/Server.java
+++ b/jams-server/src/main/java/net/jami/jams/server/Server.java
@@ -3,9 +3,12 @@ package net.jami.jams.server;
 import lombok.extern.slf4j.Slf4j;
 import net.jami.datastore.main.DataStore;
 import net.jami.jams.common.authentication.AuthenticationSource;
+import net.jami.jams.common.authentication.AuthenticationSourceType;
 import net.jami.jams.common.cryptoengineapi.CertificateAuthority;
+import net.jami.jams.common.objects.user.UserProfile;
 import net.jami.jams.common.serialization.JsoniterRegistry;
 import net.jami.jams.server.core.TomcatLauncher;
+import net.jami.jams.server.core.usermanagement.AuthModuleKey;
 import net.jami.jams.server.core.usermanagement.UserAuthenticationModule;
 import net.jami.jams.server.startup.CryptoEngineLoader;
 import net.jami.jams.server.startup.LibraryLoader;
@@ -54,8 +57,12 @@ public class Server {
         try {
             InputStream path;
             ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
-            path = classLoader.getResourceAsStream("ldapconfig.json");
-            userAuthenticationModule.attachLDAPAuthSource(new String(path.readAllBytes()));
+            path = classLoader.getResourceAsStream("adsampleconfig.json");
+            userAuthenticationModule.attachADAuthSource(new String(path.readAllBytes()));
+            UserProfile userProfile = userAuthenticationModule.getAuthenticationSources()
+                    .get(new AuthModuleKey("SAVOIRFAIRELINU", AuthenticationSourceType.AD))
+                    .getUserProfile("fsidokhine","LOGON_NAME");
+            System.out.println(userProfile);
         } catch (Exception e) {
             log.error("Could not load and inject active directory connector with error: " + e.toString());
         }
diff --git a/jams-server/src/main/java/net/jami/jams/server/core/usermanagement/UserAuthenticationModule.java b/jams-server/src/main/java/net/jami/jams/server/core/usermanagement/UserAuthenticationModule.java
index 09cba5f150f08fe7128a009df3222819bb1cb2da..ce11e6b98a5b20723e068b01551fcd34e6cb6ede 100644
--- a/jams-server/src/main/java/net/jami/jams/server/core/usermanagement/UserAuthenticationModule.java
+++ b/jams-server/src/main/java/net/jami/jams/server/core/usermanagement/UserAuthenticationModule.java
@@ -1,5 +1,6 @@
 package net.jami.jams.server.core.usermanagement;
 
+import lombok.Getter;
 import lombok.extern.slf4j.Slf4j;
 import net.jami.jams.common.authentication.AuthenticationSource;
 import net.jami.jams.common.authentication.AuthenticationSourceType;
@@ -14,6 +15,7 @@ import java.util.HashMap;
 import static net.jami.jams.server.Server.dataStore;
 
 @Slf4j
+@Getter
 public class UserAuthenticationModule {
     //This contains the DOMAIN-SOURCE.
     //In general there is at most 2 here.
diff --git a/jams-server/src/main/java/net/jami/jams/server/startup/CryptoEngineLoader.java b/jams-server/src/main/java/net/jami/jams/server/startup/CryptoEngineLoader.java
index 165b90c1dc8a63eac5eabfef3af9d092770412c2..d594213f495eecb79893707f7522be5ae5cd8c71 100644
--- a/jams-server/src/main/java/net/jami/jams/server/startup/CryptoEngineLoader.java
+++ b/jams-server/src/main/java/net/jami/jams/server/startup/CryptoEngineLoader.java
@@ -22,7 +22,7 @@ public class CryptoEngineLoader {
             List<SystemAccount> accounts = dataStore.getSystemDao().getObjects(statementList);
             if(accounts.size() == 0){
                 log.info("This is an fresh install, and it has no CA or any system accounts - if there is a config.json" +
-                        "file in your directory, this means the install is broken and you should delete and restart!");
+                        " file in your directory, this means the install is broken and you should delete and restart!");
             }
             else{
                 statementList = new StatementList();
diff --git a/ldap-connector/src/main/java/net/jami/jams/ldap/connector/LDAPConnector.java b/ldap-connector/src/main/java/net/jami/jams/ldap/connector/LDAPConnector.java
index 3e646a51460524fc21374503ce73fbc8790ba2cd..f1b7461b12d692c83940fb2f76a48d4f5c08f3ec 100644
--- a/ldap-connector/src/main/java/net/jami/jams/ldap/connector/LDAPConnector.java
+++ b/ldap-connector/src/main/java/net/jami/jams/ldap/connector/LDAPConnector.java
@@ -42,7 +42,7 @@ public class LDAPConnector implements AuthenticationSource {
     }
 
     @Override
-    public UserProfile getUserProfile(String username) {
+    public UserProfile getUserProfile(String queryString, String field) {
         return null;
     }