diff --git a/jami-nameserver/src/main/java/net/jami/jams/nameserver/PublicNameServer.java b/jami-nameserver/src/main/java/net/jami/jams/nameserver/PublicNameServer.java
index 2859cd8d854b9b66c86a5fb9eeb8bd5eb018628e..9c346af89dfc94a697f85e8be7c72920d36aefbd 100644
--- a/jami-nameserver/src/main/java/net/jami/jams/nameserver/PublicNameServer.java
+++ b/jami-nameserver/src/main/java/net/jami/jams/nameserver/PublicNameServer.java
@@ -23,6 +23,7 @@
 package net.jami.jams.nameserver;
 
 import com.google.gson.Gson;
+import com.google.gson.JsonObject;
 
 import lombok.extern.slf4j.Slf4j;
 
@@ -30,8 +31,6 @@ import net.jami.jams.common.jami.NameLookupResponse;
 import net.jami.jams.common.jami.NameRegistrationRequest;
 import net.jami.jams.common.jami.NameServer;
 import net.jami.jams.common.serialization.adapters.GsonFactory;
-import net.minidev.json.JSONObject;
-import net.minidev.json.parser.JSONParser;
 
 import java.net.HttpURLConnection;
 import java.net.URL;
@@ -90,20 +89,15 @@ public class PublicNameServer implements NameServer {
             URL url = new URL(nameserverURI + "/addr/" + address);
             HttpURLConnection con = (HttpURLConnection) url.openConnection();
             con.setRequestMethod("GET");
-            if (con.getResponseCode() == 200) {
-                StringBuilder responseData = new StringBuilder();
-                int respSize = Integer.parseInt(con.getHeaderField("Content-Length"));
-                int currentSize = 0;
-                while (currentSize < respSize) {
-                    responseData.append((char) con.getInputStream().read());
-                    currentSize++;
-                }
-                log.info("Response received from public nameserver {} ", responseData);
-                JSONParser parser = new JSONParser();
-                JSONObject json = (JSONObject) parser.parse(responseData.toString());
-                return json.getAsString("name");
+            if (con.getResponseCode() != 200) {
+                return null;
             }
-            return null;
+
+            String responseData = new String(con.getInputStream().readAllBytes());
+
+            log.info("Response received from public nameserver {} ", responseData);
+            JsonObject json = gson.fromJson(responseData.toString(), JsonObject.class);
+            return json.get("name").getAsString();
         } catch (Exception e) {
             log.info("An error occurred while querying the public nameserver {} ", e.toString());
             return null;
diff --git a/jams-react-client/src/components/ServerParameters/ServerParameters.tsx b/jams-react-client/src/components/ServerParameters/ServerParameters.tsx
index 01cf480e8b004fca6d9cafc76d7a8d3b8c18b9a9..644e30269341447df802efde0582aabde7bc10ac 100644
--- a/jams-react-client/src/components/ServerParameters/ServerParameters.tsx
+++ b/jams-react-client/src/components/ServerParameters/ServerParameters.tsx
@@ -14,7 +14,10 @@ import * as tool from "../../tools";
 
 import axios from "axios";
 import configApiCall from "../../api";
-import { api_path_post_install_server } from "../../globalUrls";
+import {
+  api_path_post_install_server,
+  backend_address,
+} from "../../globalUrls";
 import auth from "auth";
 import * as Yup from "yup";
 
@@ -40,15 +43,17 @@ const useStyles = makeStyles((theme) => ({
   },
 }));
 
-export default function ServerParameters(props) {
+export default function ServerParameters({ setError, setErrorMessage }) {
   // Formik validation fields
-  const initialValues = { domain: window.location.origin };
+  const initialValues = { domain: backend_address.origin };
   const validationSchema = Yup.object().shape({
     domain: Yup.string().required(
       i18next.t("domain_is_required", "Domain is required.")
     ),
   });
 
+  type Settings = Yup.InferType<typeof validationSchema>;
+
   const certificateRevocationTypes = [
     { value: 300000, label: i18next.t("5_minutes", "5 minutes") },
     { value: 600000, label: i18next.t("10_minutes", "10 minutes") },
@@ -108,7 +113,7 @@ export default function ServerParameters(props) {
     });
   }
 
-  function handleSubmit(values) {
+  function handleSubmit(values: Settings) {
     let jsonData = {};
     let re = new RegExp(/^http[s]?:\/\/\w+(\.\w+)*(:[0-9]+)?\/?(\/[.\w]*)*$/);
     let nohttpre = new RegExp(/^\w+(\.\w+)*(:[0-9]+)?\/?(\/[.\w]*)*$/);
@@ -133,8 +138,8 @@ export default function ServerParameters(props) {
           console.log("Error installing server parameters: " + error);
         });
     } else {
-      props.setError(true);
-      props.setErrorMessage(
+      setError(true);
+      setErrorMessage(
         i18next.t(
           "please_enter_valid_cors_domain_url",
           "Please enter a valid CORS domain URL."
@@ -173,15 +178,14 @@ export default function ServerParameters(props) {
         handleSubmit(values);
       }}
     >
-      {(props) => {
-        const {
-          values,
-          touched,
-          errors,
-          handleSubmit,
-          handleChange,
-          handleBlur,
-        } = props;
+      {({
+        values,
+        touched,
+        errors,
+        handleSubmit,
+        handleChange,
+        handleBlur,
+      }) => {
         return (
           <form className={classes.form} noValidate onSubmit={handleSubmit}>
             <Typography variant="h5" gutterBottom color="primary">
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 99d171b477a3b29b7e4e93cb4eae5a33991ba735..cbdf62a44fcde1008e70f9c041fe44235bac8ea4 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
@@ -104,68 +104,22 @@ public class Server {
         dataStore = new DataStore("jdbc:derby:jams;create=true");
 
         // Create image folder if it doesn't exist.
-        File imagesFolder = new File("." + File.separator + "images");
-        if (!imagesFolder.exists()) {
-            boolean created = imagesFolder.mkdirs();
-            if (created) {
-                log.info("Created images folder");
-            } else {
-                log.error("Failed to create images folder");
-                System.exit(-1);
-            }
-        }
+        createImageFolder();
 
-        isInstalled.set(
-                new File(System.getProperty("user.dir") + File.separator + "config.json").exists());
+        File configJsonFile =
+                new File(System.getProperty("user.dir") + File.separator + "config.json");
+        isInstalled.set(configJsonFile.exists());
         log.info("Server is already installed: " + isInstalled.get());
-        ServerSettings serverSettings = null;
+
         if (isInstalled.get()) {
             try {
-                Reader reader =
-                        new FileReader(
-                                new File(
-                                        System.getProperty("user.dir")
-                                                + File.separator
-                                                + "config.json"));
-                serverSettings = gson.fromJson(reader, ServerSettings.class);
-                certificateAuthority =
-                        CryptoEngineLoader.loadCertificateAuthority(
-                                serverSettings.getCaConfiguration(), dataStore);
-                userAuthenticationModule =
-                        AuthModuleLoader.loadAuthenticationModule(dataStore, certificateAuthority);
-                if (serverSettings.getLdapConfiguration() != null)
-                    userAuthenticationModule.attachAuthSource(
-                            AuthenticationSourceType.LDAP, serverSettings.getLdapConfiguration());
-                if (serverSettings.getActiveDirectoryConfiguration() != null) {
-                    userAuthenticationModule.attachAuthSource(
-                            AuthenticationSourceType.AD,
-                            serverSettings.getActiveDirectoryConfiguration());
-                }
-                if (serverSettings.getLocalDirectoryConfiguration() != null) {
-                    LocalAuthSettings settings =
-                            gson.fromJson(
-                                    serverSettings.getLocalDirectoryConfiguration(),
-                                    LocalAuthSettings.class);
-                    if (settings.getPublicNames())
-                        nameServer = new PublicNameServer(settings.getPublicNameServer());
-                    else
-                        nameServer =
-                                new LocalNameServer(
-                                        dataStore,
-                                        userAuthenticationModule,
-                                        serverSettings.getServerPublicURI());
-                } else
-                    nameServer =
-                            new LocalNameServer(
-                                    dataStore,
-                                    userAuthenticationModule,
-                                    serverSettings.getServerPublicURI());
-
-                licenseService.loadLicense();
+                Reader reader = new FileReader(configJsonFile);
+                loadConfig(reader);
                 log.info("All services are UP and ready for use...");
             } catch (Exception e) {
                 log.error(
                         "Could not load configuration file or initialize some components - this is critical");
+                System.exit(1);
             }
         } else {
             certificateAuthority = CryptoEngineLoader.loadCertificateAuthority(null, dataStore);
@@ -183,6 +137,60 @@ public class Server {
         }
     }
 
+    private static void createImageFolder() {
+        File imagesFolder = new File("." + File.separator + "images");
+        if (!imagesFolder.exists()) {
+            boolean created = imagesFolder.mkdirs();
+            if (created) {
+                log.info("Created images folder");
+            } else {
+                log.error("Failed to create images folder");
+                System.exit(-1);
+            }
+        }
+    }
+
+    private static void loadConfig(Reader reader) {
+        ServerSettings serverSettings = gson.fromJson(reader, ServerSettings.class);
+
+        certificateAuthority =
+                CryptoEngineLoader.loadCertificateAuthority(
+                        serverSettings.getCaConfiguration(), dataStore);
+        userAuthenticationModule =
+                AuthModuleLoader.loadAuthenticationModule(dataStore, certificateAuthority);
+
+        if (serverSettings.getLdapConfiguration() != null)
+            userAuthenticationModule.attachAuthSource(
+                    AuthenticationSourceType.LDAP, serverSettings.getLdapConfiguration());
+
+        if (serverSettings.getActiveDirectoryConfiguration() != null) {
+            userAuthenticationModule.attachAuthSource(
+                    AuthenticationSourceType.AD, serverSettings.getActiveDirectoryConfiguration());
+        }
+
+        if (serverSettings.getLocalDirectoryConfiguration() != null) {
+            LocalAuthSettings settings =
+                    gson.fromJson(
+                            serverSettings.getLocalDirectoryConfiguration(),
+                            LocalAuthSettings.class);
+            if (settings.getPublicNames())
+                nameServer = new PublicNameServer(settings.getPublicNameServer());
+            else
+                nameServer =
+                        new LocalNameServer(
+                                dataStore,
+                                userAuthenticationModule,
+                                serverSettings.getServerPublicURI());
+        } else
+            nameServer =
+                    new LocalNameServer(
+                            dataStore,
+                            userAuthenticationModule,
+                            serverSettings.getServerPublicURI());
+
+        licenseService.loadLicense();
+    }
+
     public static void startGUI() throws Exception {
         boolean ready = false;
         while (!ready) {
@@ -190,6 +198,7 @@ public class Server {
             if (userAuthenticationModule.getAuthModulePubKey() != null) {
                 ready = true;
             }
+            Thread.sleep(10);
         }
         log.info("Authentication module is ready!");
         if (Desktop.isDesktopSupported()
diff --git a/jams-server/src/main/java/net/jami/jams/server/servlets/api/jaminameserver/AddressServlet.java b/jams-server/src/main/java/net/jami/jams/server/servlets/api/jaminameserver/AddressServlet.java
index e2e06a045721d0253471dfa014f145a917c04c44..bc435aef0c752a1af2cf54722bc8497734ee9fa0 100644
--- a/jams-server/src/main/java/net/jami/jams/server/servlets/api/jaminameserver/AddressServlet.java
+++ b/jams-server/src/main/java/net/jami/jams/server/servlets/api/jaminameserver/AddressServlet.java
@@ -24,6 +24,8 @@ package net.jami.jams.server.servlets.api.jaminameserver;
 
 import static net.jami.jams.server.Server.nameServer;
 
+import com.google.gson.Gson;
+
 import jakarta.servlet.ServletException;
 import jakarta.servlet.annotation.WebServlet;
 import jakarta.servlet.http.HttpServlet;
@@ -31,11 +33,12 @@ import jakarta.servlet.http.HttpServletRequest;
 import jakarta.servlet.http.HttpServletResponse;
 
 import net.jami.jams.common.annotations.JsonContent;
+import net.jami.jams.common.serialization.adapters.GsonFactory;
 import net.jami.jams.common.serialization.tomcat.TomcatCustomErrorHandler;
 
-import org.json.JSONObject;
-
 import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
 
 @WebServlet("/api/nameserver/addr/*")
 public class AddressServlet extends HttpServlet {
@@ -62,12 +65,14 @@ public class AddressServlet extends HttpServlet {
         String[] path = req.getPathInfo().split("/");
         String username = nameServer.getNameFromAddress(path[path.length - 1]);
 
-        JSONObject obj = new JSONObject();
-        obj.put("name", username);
-
-        resp.setContentType("application/json;charset=UTF-8");
-        if (username == null)
+        if (username == null) {
             TomcatCustomErrorHandler.sendCustomError(resp, 404, "Address not found!");
-        else resp.getWriter().write(obj.toString());
+            return;
+        }
+
+        Gson gson = GsonFactory.createGson();
+        Map<String, String> response = new HashMap<>();
+        response.put("name", username);
+        resp.getWriter().write(gson.toJson(response));
     }
 }