diff --git a/.gitignore b/.gitignore
index da3020b182d2c60134fa550800ac0093a74a9667..d7c05e82fc786dce7cfb6292edd0202c06636a20 100755
--- a/.gitignore
+++ b/.gitignore
@@ -1,5 +1,5 @@
 /.angular/cache
-config/config.xml
+config/config.json
 .vscode/
 .*.swp
 .phplint-cache
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 9c30766bf84ffe73759e7cda8efab85c72ae3ac4..db4341fa6305ca29c4ce2f7cfa354de92a5b80e7 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -17,7 +17,8 @@ before_script:
   - mkdir -p /opt/maarchparapheur/docservers/{documents,attachments,signatures,esigned_documents,original_documents}
   - ln -s $CI_PROJECT_DIR /var/www/html/MaarchParapheur
   - cd /var/www/html/MaarchParapheur
-  - sed 's!<server>.*</server>!<server>postgres</server>!;s!<password>.*</password>!<password>maarch</password>!;s!<name>.*</name>!<name>MaarchParapheur</name>!;s!<user>.*</user>!<user>maarch</user>!;s!<enable>.*</enable>!<enable>true</enable>!' config/config.xml.default > config/config.xml
+  - > 
+    sed 's!"server": .*,!"server": "postgres",!; s!"name": .*,!"name": "MaarchParapheur",!; s!"user": .*,!"user": "maarch",!; s!"password": .*,!"password": "maarch",!;s!"enable": .*,!"enable": true,!' config/config.default.json > config/config.json
   - sed -i 's/rights="none" pattern="PDF"/rights="read | write" pattern="PDF"/' /etc/ImageMagick-6/policy.xml
   - php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
   - php composer-setup.php
diff --git a/config/config.default.json b/config/config.default.json
new file mode 100644
index 0000000000000000000000000000000000000000..946ec10de12dc771868d3c8ec257f47cf65390f6
--- /dev/null
+++ b/config/config.default.json
@@ -0,0 +1,80 @@
+{
+    "config": {
+        "sessionTime": 10080,
+        "timezone": "Europe/Paris",
+        "customLangPathDirectory": ""
+    },
+    "database": [
+        {
+            "server": "localhost",
+            "port": 5432,
+            "type": "POSTGRESQL",
+            "name": "maarch",
+            "user": "maarch",
+            "password": "maarch"
+        }
+    ],
+    "electronicSignature": {
+        "enable": false,
+        "certPath": "/var/www/html/MaarchParapheur/samples/certs/MP_final_certificate.crt",
+        "privateKeyPath": "/var/www/html/MaarchParapheur/samples/certs/MP_private.key",
+        "password": "maarch",
+        "certInfo": {
+            "name": "Maarch",
+            "location": "Paris",
+            "reason": "Signature Maarch Parapheur",
+            "contactInfo": "Maarch SAS, société du groupe Archiveco"
+        }
+    },
+    "textWithDigitalSignature": true,
+    "docaposteSignature": {
+        "enable": false,
+        "url": "https://test.contralia.fr:443/Contralia/api/v2",
+        "user": "",
+        "password": "",
+        "offerCode": "",
+        "organizationalUnitCode": "",
+        "signatureIdOverride": ""
+    },
+    "metaSignSignature": {
+        "enable": false,
+        "url": "",
+        "port": "",
+        "instance": "",
+        "certPath": "",
+        "certPass": "",
+        "certType": "",
+        "metaSign": {
+            "inDelegationOf": "",
+            "secret": {
+                "password": "",
+                "type": ""
+            },
+            "signatureKeyId": "",
+            "signatureProfile": {
+                "signaturePolicyOid": "",
+                "attachment": "",
+                "format": "",
+                "augmentationLevel": "",
+                "signatureAlgoId": "",
+                "archive": "",
+                "requireSigningTime": ""
+            }
+        }
+    },
+    "signatureModes": {
+        "mode": [
+            {
+                "id": "rgs_2stars",
+                "color": "#FF0000",
+                "issuer": "",
+                "subject": "",
+                "keyUsage": "digitalSignature"
+            },
+            {
+                "id": "external",
+                "color": "#FF0000"
+            }
+        ]
+    }
+}
\ No newline at end of file
diff --git a/config/config.xml.default b/config/config.xml.default
deleted file mode 100755
index 16f1e791a98da36b9594e0811d00aeada2e4c376..0000000000000000000000000000000000000000
--- a/config/config.xml.default
+++ /dev/null
@@ -1,108 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<ROOT>
-    <config>
-        <sessionTime>10080</sessionTime> <!-- minutes -->
-        <timezone>Europe/Paris</timezone>
-        <customLangPathDirectory></customLangPathDirectory>
-    </config>
-    <database>
-        <server>localhost</server>
-        <port>5432</port>
-        <type>POSTGRESQL</type>
-        <name>maarch</name>
-        <user>maarch</user>
-        <password>maarch</password>
-    </database>
-    <electronicSignature>
-        <enable>false</enable>
-        <certPath>/var/www/html/MaarchParapheur/samples/certs/MP_final_certificate.crt</certPath><!-- .crt or .p12 or .pem -->
-        <privateKeyPath>/var/www/html/MaarchParapheur/samples/certs/MP_private.key</privateKeyPath><!-- if private key and certificate are in the same file, put the same path -->
-        <password>maarch</password>
-        <certInfo>
-            <name>Maarch</name>
-            <location>Paris</location>
-            <reason>Signature Maarch Parapheur</reason>
-            <contactInfo>Maarch SAS, société du groupe Archiveco</contactInfo>
-        </certInfo>
-    </electronicSignature>
-    <textWithDigitalSignature>true</textWithDigitalSignature>
-    <docaposteSignature>
-        <enable>false</enable>
-        <url>https://test.contralia.fr:443/Contralia/api/v2</url>
-        <user></user>
-        <password></password>
-        <offerCode></offerCode>
-        <organizationalUnitCode></organizationalUnitCode>
-        <signatureIdOverride></signatureIdOverride> <!-- 1 for provider (fournisseur) signature, 2 for Contralia signature, leave blank to use client signature (default) -->
-    </docaposteSignature>
-    <metaSignSignature>
-        <enable>false</enable>
-        <url></url>
-        <port></port>
-        <instance></instance>
-        <certPath></certPath>
-        <certPass></certPass>
-        <certType></certType>
-        <metaSign>
-            <inDelegationOf></inDelegationOf>
-            <secret>
-                <password></password>
-                <type></type>
-            </secret>
-            <signatureKeyId></signatureKeyId>
-            <signatureProfile>
-                <signaturePolicyOid></signaturePolicyOid>
-                <attachment></attachment>
-                <format></format>
-                <augmentationLevel></augmentationLevel>
-                <signatureAlgoId></signatureAlgoId>
-                <archive></archive>
-                <requireSigningTime></requireSigningTime>
-            </signatureProfile>
-        </metaSign>
-    </metaSignSignature>
-    <!-- Sort by the more secure to the less secure mode -->
-    <signatureModes>
-        <!-- <mode>
-            <id>rgs_2stars_timestamped</id>
-            <color>#FF0000</color>
-            <issuer>ChamberSign</issuer>
-            <subject></subject>
-            <keyUsage>digitalSignature</keyUsage>
-        </mode> -->
-        <mode>
-            <id>rgs_2stars</id>
-            <color>#FF0000</color>
-            <issuer></issuer>
-            <subject></subject>
-            <keyUsage>digitalSignature</keyUsage>
-        </mode>
-        <!-- <mode>
-            <id>inca_card_eidas</id>
-            <color>#FFA500</color>
-            <issuer></issuer>
-            <subject></subject>
-            <keyUsage>digitalSignature</keyUsage>
-        </mode> -->
-        <!-- <mode>
-            <id>inca_card</id>
-            <color>#FFA500</color>
-            <issuer></issuer>
-            <subject></subject>
-            <keyUsage>digitalSignature</keyUsage>
-        </mode> -->
-        <!-- <mode>
-            <id>eidas_metasign</id>
-            <color>#00FF00</color>
-            <keyUsage>metaSignSignature</keyUsage>
-        </mode> -->
-        <!-- <mode>
-            <id>eidas</id>
-            <color>#00FF00</color>
-        </mode> -->
-        <mode>
-            <id>external</id>
-            <color>#FF0000</color>
-        </mode>
-    </signatureModes>
-</ROOT>
diff --git a/rest/index.php b/rest/index.php
index 2f455c90a5d282a73a8972fb35aba4034ef6e358..6fc30fccd47df48c65761133f524da4bd02eb161 100755
--- a/rest/index.php
+++ b/rest/index.php
@@ -36,7 +36,7 @@ $app->add(function (\Slim\Psr7\Request $request, \Psr\Http\Server\RequestHandler
     $response = new \SrcCore\http\Response();
 
     $configPath = \SrcCore\models\CoreConfigModel::getConfigPath();
-    if (!is_file($configPath . '/config.xml')) {
+    if (!is_file($configPath . '/config.json')) {
         return $response->withStatus(400)->withJson(['errors' => 'Configuration file is missing']);
     }
 
diff --git a/src/app/document/controllers/CertificateSignatureController.php b/src/app/document/controllers/CertificateSignatureController.php
index f5b7e6c9631feae67dab9bb37af40466f93a49b3..821d84520efbe9b1d58ead72e26b92b32b23fdfa 100755
--- a/src/app/document/controllers/CertificateSignatureController.php
+++ b/src/app/document/controllers/CertificateSignatureController.php
@@ -172,8 +172,8 @@ class CertificateSignatureController
                 __DIR__ . '/fonts/dejavu-fonts-ttf-2.37/ttf/DejaVuSans.ttf'
             );
 
-            $loadedXml = CoreConfigModel::getConfig();
-            if ($loadedXml->textWithDigitalSignature == 'true' && $signatureInfo['type'] != 'SVG') {
+            $loadedJson = CoreConfigModel::getConfig();
+            if ($loadedJson['textWithDigitalSignature'] && $signatureInfo['type'] != 'SVG') {
                 $textBlock = new \SetaPDF_Core_Text_Block($font, 6);
                 $textBlock->setWidth($signatureFieldWith);
                 $textBlock->setLineHeight(14);
@@ -301,23 +301,23 @@ class CertificateSignatureController
 
     public static function signWithServerCertificate(\setasign\Fpdi\Tcpdf\Fpdi &$pdf)
     {
-        $loadedXml = CoreConfigModel::getConfig();
+        $loadedJson = CoreConfigModel::getConfig();
 
-        if ($loadedXml->electronicSignature->enable == 'true') {
-            $certPath       = realpath((string)$loadedXml->electronicSignature->certPath);
-            $privateKeyPath = realpath((string)$loadedXml->electronicSignature->privateKeyPath);
+        if ($loadedJson['electronicSignature']['enable'] == 'true') {
+            $certPath       = realpath($loadedJson['electronicSignature']['certPath']);
+            $privateKeyPath = realpath($loadedJson['electronicSignature']['privateKeyPath']);
             if (!is_file($certPath) || !is_file($privateKeyPath)) {
                 return ['errors' => 'Signature with server certificate failed : certPath or privateKeyPath is not valid'];
             }
             $certificate = 'file://' . $certPath;
             $privateKey = 'file://' . $privateKeyPath;
             $info = [
-                'Name'        => (string)$loadedXml->electronicSignature->certInfo->name,
-                'Location'    => (string)$loadedXml->electronicSignature->certInfo->location,
-                'Reason'      => (string)$loadedXml->electronicSignature->certInfo->reason,
-                'ContactInfo' => (string)$loadedXml->electronicSignature->certInfo->contactInfo
+                'Name'        => $loadedJson['electronicSignature']['certInfo']['name'],
+                'Location'    => $loadedJson['electronicSignature']['certInfo']['location'],
+                'Reason'      => $loadedJson['electronicSignature']['certInfo']['reason'],
+                'ContactInfo' => $loadedJson['electronicSignature']['certInfo']['contactInfo']
             ];
-            $pdf->setSignature($certificate, $privateKey, (string)$loadedXml->electronicSignature->password, '', 2, $info);
+            $pdf->setSignature($certificate, $privateKey, $loadedJson['electronicSignature']['password'], '', 2, $info);
         }
 
         return true;
diff --git a/src/app/document/controllers/DigitalSignatureController.php b/src/app/document/controllers/DigitalSignatureController.php
index 7e470ff605249c69097134a821606868147b15c6..41259284f05cca03267f4816512b099907a7a632 100755
--- a/src/app/document/controllers/DigitalSignatureController.php
+++ b/src/app/document/controllers/DigitalSignatureController.php
@@ -94,15 +94,15 @@ class DigitalSignatureController
 
     public static function getConfig()
     {
-        $loadedXml = CoreConfigModel::getConfig();
-        if ($loadedXml->docaposteSignature->enable == 'true') {
+        $loadedJson = CoreConfigModel::getConfig();
+        if ($loadedJson['docaposteSignature']['enable'] == 'true') {
             $config = [
-                'url'                    => (string)$loadedXml->docaposteSignature->url,
-                'user'                   => (string)$loadedXml->docaposteSignature->user,
-                'password'               => (string)$loadedXml->docaposteSignature->password,
-                'offerCode'              => (string)$loadedXml->docaposteSignature->offerCode,
-                'organizationalUnitCode' => (string)$loadedXml->docaposteSignature->organizationalUnitCode,
-                'signatureIdOverride'    => (string)$loadedXml->docaposteSignature->signatureIdOverride
+                'url'                    => $loadedJson['docaposteSignature']['url'],
+                'user'                   => $loadedJson['docaposteSignature']['user'],
+                'password'               => $loadedJson['docaposteSignature']['password'],
+                'offerCode'              => $loadedJson['docaposteSignature']['offerCode'],
+                'organizationalUnitCode' => $loadedJson['docaposteSignature']['organizationalUnitCode'],
+                'signatureIdOverride'    => $loadedJson['docaposteSignature']['signatureIdOverride']
             ];
             if (in_array($config['signatureIdOverride'], ['1', '2'])) {
                 $config['signatureIdOverride'] = (int)$config['signatureIdOverride'];
@@ -229,8 +229,8 @@ class DigitalSignatureController
                     __DIR__ . '/fonts/dejavu-fonts-ttf-2.37/ttf/DejaVuSans.ttf'
                 );
 
-                $loadedXml = CoreConfigModel::getConfig();
-                if ($loadedXml->textWithDigitalSignature == 'true') {
+                $loadedJson = CoreConfigModel::getConfig();
+                if ($loadedJson['textWithDigitalSignature']) {
                     $textBlock = new \SetaPDF_Core_Text_Block($font, 7);
                     $textBlock->setWidth($signatureFieldWith);
                     $textBlock->setLineHeight(14);
diff --git a/src/app/document/controllers/DocumentController.php b/src/app/document/controllers/DocumentController.php
index 100aa796bcff5891f0a5b2faf9fba9c836442d28..c61799e38735195f915ba0481b99881bd3f37d14 100644
--- a/src/app/document/controllers/DocumentController.php
+++ b/src/app/document/controllers/DocumentController.php
@@ -540,8 +540,8 @@ class DocumentController
 
 
         $libDir    = CoreConfigModel::getLibrariesDirectory();
-        $loadedXml = CoreConfigModel::getConfig();
-        if (($loadedXml->docaposteSignature->enable == 'true' || $loadedXml->metaSignSignature->enable == 'true') && 
+        $loadedJson = CoreConfigModel::getConfig();
+        if (($loadedJson['docaposteSignature']['enable'] || $loadedJson['metaSignSignature']['enable']) && 
             ($hasEidas || $hasMetaSignSignature) && (empty($libDir) || !is_file($libDir . 'SetaPDF-Signer/library/SetaPDF/Autoload.php'))) {
             return $response->withStatus(500)->withJson(['errors' => 'SetaPDF-Signer library is not installed', 'lang' => 'setAPdfSignerError']);
         }
@@ -781,13 +781,13 @@ class DocumentController
             'orderBy' => ['"order" asc']
         ]);
 
-        if ($loadedXml->docaposteSignature->enable == 'true' && $hasEidas) {
+        if ($loadedJson['docaposteSignature']['enable'] && $hasEidas) {
             $result = DigitalSignatureController::createTransaction(['documentId' => $id, 'workflow' => $workflow, 'encodedDocument' => $encodedDocument['encodedDocument']]);
             if (!empty($result['errors'])) {
                 return $response->withStatus(500)->withJson(['errors' => $result['errors']]);
             }
         }
-        if ($loadedXml->metaSignSignature->enable == 'true' && $hasMetaSignSignature) {
+        if ($loadedJson['metaSignSignature']['enable'] && $hasMetaSignSignature) {
             $metaSignInit = MetaSignSignatureController::init();
             if (!empty($metaSignInit['errors'])) {
                 return $response->withStatus($metaSignInit['code'])->withJson(['errors' => $metaSignInit['errors']]);
@@ -851,7 +851,7 @@ class DocumentController
 
 
         $libDir    = CoreConfigModel::getLibrariesDirectory();
-        $loadedXml = CoreConfigModel::getConfig();
+        $loadedJson = CoreConfigModel::getConfig();
         $tmpPath   = CoreConfigModel::getTmpPath();
 
         if ($workflow['mode'] == 'sign' && $workflow['signature_mode'] != 'stamp') {
@@ -868,10 +868,10 @@ class DocumentController
             }
         }
 
-        if (in_array($workflow['signature_mode'], ['eidas', 'inca_card_eidas']) && $loadedXml->docaposteSignature->enable != 'true') {
+        if (in_array($workflow['signature_mode'], ['eidas', 'inca_card_eidas']) && !$loadedJson['docaposteSignature']['enable']) {
             return $response->withStatus(400)->withJson(['errors' => 'docaposteSignature is disabled', 'lang' => 'docaposteSignatureDisabled']);
         }
-        if ($workflow['signature_mode'] == 'eidas_metasign' && $loadedXml->metaSignSignature->enable != 'true') {
+        if ($workflow['signature_mode'] == 'eidas_metasign' && !$loadedJson['metaSignSignature']['enable']) {
             return $response->withStatus(400)->withJson(['errors' => 'metaSignSignature is disabled', 'lang' => 'metaSignSignatureDisabled']);
         }
 
@@ -905,7 +905,7 @@ class DocumentController
             if (DocumentController::ACTIONS[$args['actionId']] == 'VAL' && in_array($workflow['signature_mode'], ['rgs_2stars', 'rgs_2stars_timestamped', 'inca_card', 'inca_card_eidas'])) {
                 if (!empty($body['step']) && $body['step'] == 'hashCertificate') {
                     $signWithServerCertificate = false;
-                    if (DocumentController::ACTIONS[$args['actionId']] == 'VAL' && $workflow['mode'] == 'sign' && $loadedXml->electronicSignature->enable == 'true') {
+                    if (DocumentController::ACTIONS[$args['actionId']] == 'VAL' && $workflow['mode'] == 'sign' && $loadedJson['electronicSignature']['enable']) {
                         $signWithServerCertificate = true;
                     }
 
@@ -959,7 +959,7 @@ class DocumentController
                 }
                 $affectedPages = $control['affectedPages'];
 
-                if (DocumentController::ACTIONS[$args['actionId']] == 'VAL' && $workflow['mode'] == 'sign' && $loadedXml->electronicSignature->enable == 'true') {
+                if (DocumentController::ACTIONS[$args['actionId']] == 'VAL' && $workflow['mode'] == 'sign' && $loadedJson['electronicSignature']['enable']) {
                     $control = CertificateSignatureController::signWithServerCertificate($pdf);
                     if (!empty($control['errors'])) {
                         return $response->withStatus(400)->withJson(['errors' => $control['errors']]);
@@ -1103,7 +1103,7 @@ class DocumentController
                 $docserver          = DocserverModel::getByType(['type' => 'ESIGN', 'select' => ['path']]);
                 $pathToDocument     = $docserver['path'] . $adr[0]['path'] . $adr[0]['filename'];
 
-                if ($loadedXml->metaSignSignature->enable == 'true' && $workflow['signature_mode'] == 'eidas_metasign') {
+                if ($loadedJson['metaSignSignature']['enable'] && $workflow['signature_mode'] == 'eidas_metasign') {
                     $pathToDocument = MetaSignSignatureController::getDocumentPath(['documentId' => (int) $args['id']]);
                 }
                 $tmpPath            = CoreConfigModel::getTmpPath();
@@ -1144,7 +1144,7 @@ class DocumentController
                                     $signPosX  = ($signature['positionX'] * $format['width']) / 100;
                                     $signPosY  = ($signature['positionY'] * $format['height']) / 100;
                                 }
-                                if ($loadedXml->docaposteSignature->enable == 'true' && !empty($workflow['digital_signature_id']) && in_array($workflow['signature_mode'], ['eidas', 'inca_card_eidas'])) {
+                                if ($loadedJson['docaposteSignature']['enable'] && !empty($workflow['digital_signature_id']) && in_array($workflow['signature_mode'], ['eidas', 'inca_card_eidas'])) {
                                     $return = DigitalSignatureController::signHashes([
                                         'signatureId'   => $workflow['digital_signature_id'],
                                         'documentId'    => $args['id'],
@@ -1158,7 +1158,7 @@ class DocumentController
                                         'isLastSignature'   => !isset($body['signatures'][$key + 1]),
                                         'workflowId'        => $workflow['id']
                                     ]);
-                                } else if ($loadedXml->metaSignSignature->enable == 'true' && $workflow['signature_mode'] == 'eidas_metasign') {
+                                } else if ($loadedJson['metaSignSignature']['enable'] && $workflow['signature_mode'] == 'eidas_metasign') {
                                     $return = MetaSignSignatureController::signDocument([
                                         'documentId'    => (int) $args['id'],
                                         'signatureInfo' => [
@@ -1179,7 +1179,7 @@ class DocumentController
                         }
                     }
                 }
-                if (!$imageSignature && $loadedXml->docaposteSignature->enable == 'true' && !empty($workflow['digital_signature_id']) && in_array($workflow['signature_mode'], ['eidas', 'inca_card_eidas'])) {
+                if (!$imageSignature && $loadedJson['docaposteSignature']['enable'] && !empty($workflow['digital_signature_id']) && in_array($workflow['signature_mode'], ['eidas', 'inca_card_eidas'])) {
                     $return = DigitalSignatureController::signHashes([
                         'signatureId'       => $workflow['digital_signature_id'],
                         'documentId'        => $args['id'],
@@ -1190,7 +1190,7 @@ class DocumentController
                         return $response->withStatus(400)->withJson($return);
                     }
                 }
-                if (!$imageSignature && $loadedXml->metaSignSignature->enable == 'true' && $workflow['signature_mode'] == 'eidas_metasign') {
+                if (!$imageSignature && $loadedJson['metaSignSignature']['enable'] && $workflow['signature_mode'] == 'eidas_metasign') {
                     $return = MetaSignSignatureController::signDocument(['documentId' => (int) $args['id'], 'isLastSignature' => true]);
                     if (!empty($return['errors'])) {
                         return $response->withStatus($return['code'])->withJson(['errors' => $return['errors']]);
@@ -1198,7 +1198,7 @@ class DocumentController
                 }
             } elseif (DocumentController::ACTIONS[$args['actionId']] == 'REF' && 
                 $workflow['mode'] == 'sign' && 
-                $loadedXml->docaposteSignature->enable == 'true' && 
+                $loadedJson['docaposteSignature']['enable'] && 
                 !empty($workflow['digital_signature_id']) && in_array($workflow['signature_mode'], ['eidas', 'inca_card_eidas'])) {
 
                 $return = DigitalSignatureController::abort(['signatureId' => $workflow['digital_signature_id'], 'documentId' => $args['id']]);
diff --git a/src/app/document/controllers/MetaSignSignatureController.php b/src/app/document/controllers/MetaSignSignatureController.php
index 67fa497546af7d15ad2bbf2b98da7118adcd6908..995ceb439190bd229db9062c315ded906a66c9f4 100644
--- a/src/app/document/controllers/MetaSignSignatureController.php
+++ b/src/app/document/controllers/MetaSignSignatureController.php
@@ -35,36 +35,35 @@ class MetaSignSignatureController
      */
     private static function getConfig()
     {
-        $loadedXml = CoreConfigModel::getConfig();
-        if ($loadedXml->metaSignSignature->enable == 'true') {
-            $config = [
-                'url'       => (string)$loadedXml->metaSignSignature->url,
-                'port'      => (string)$loadedXml->metaSignSignature->port,
-                'instance'  => (string)$loadedXml->metaSignSignature->instance,
-                'certPath'  => (string)$loadedXml->metaSignSignature->certPath,
-                'certPass'  => (string)$loadedXml->metaSignSignature->certPass,
-                'certType'  => (string)$loadedXml->metaSignSignature->certType,
+        $loadedJson = CoreConfigModel::getConfig();
+        if ($loadedJson['metaSignSignature']['enable']) {
+            return [
+                'url'       => $loadedJson['metaSignSignature']['url'],
+                'port'      => $loadedJson['metaSignSignature']['port'],
+                'instance'  => $loadedJson['metaSignSignature']['instance'],
+                'certPath'  => $loadedJson['metaSignSignature']['certPath'],
+                'certPass'  => $loadedJson['metaSignSignature']['certPass'],
+                'certType'  => $loadedJson['metaSignSignature']['certType'],
                 'metaSign'  => [
-                    'inDelegationOf' => (string)$loadedXml->metaSignSignature->metaSign->inDelegationOf,
+                    'inDelegationOf' => $loadedJson['metaSignSignature']['metaSign']['inDelegationOf'],
                     'secret' => [
-                        "password"   => (string)$loadedXml->metaSignSignature->metaSign->secret->password,
-                        "type"       => (string)$loadedXml->metaSignSignature->metaSign->secret->type
+                        "password"   => $loadedJson['metaSignSignature']['metaSign']['secret']['password'],
+                        "type"       => $loadedJson['metaSignSignature']['metaSign']['secret']['type']
                     ],
-                    'signatureKeyId'    => (string)$loadedXml->metaSignSignature->metaSign->signatureKeyId,
+                    'signatureKeyId'    => $loadedJson['metaSignSignature']['metaSign']['signatureKeyId'],
                     'signatureProfile'  => [
                         'profile' => [
-                            'signaturePolicyOid' => (string)$loadedXml->metaSignSignature->metaSign->signatureProfile->signaturePolicyOid,
-                            'attachment'         => (string)$loadedXml->metaSignSignature->metaSign->signatureProfile->attachment,
-                            'format'             => (string)$loadedXml->metaSignSignature->metaSign->signatureProfile->format,
-                            'augmentationLevel'  => (string)$loadedXml->metaSignSignature->metaSign->signatureProfile->augmentationLevel,
-                            'signatureAlgoId'    => (string)$loadedXml->metaSignSignature->metaSign->signatureProfile->signatureAlgoId,
-                            'archive'            => (string)$loadedXml->metaSignSignature->metaSign->signatureProfile->archive,
-                            'requireSigningTime' => (string)$loadedXml->metaSignSignature->metaSign->signatureProfile->requireSigningTime,
+                            'signaturePolicyOid' => $loadedJson['metaSignSignature']['metaSign']['signatureProfile']['signaturePolicyOid'],
+                            'attachment'         => $loadedJson['metaSignSignature']['metaSign']['signatureProfile']['attachment'],
+                            'format'             => $loadedJson['metaSignSignature']['metaSign']['signatureProfile']['format'],
+                            'augmentationLevel'  => $loadedJson['metaSignSignature']['metaSign']['signatureProfile']['augmentationLevel'],
+                            'signatureAlgoId'    => $loadedJson['metaSignSignature']['metaSign']['signatureProfile']['signatureAlgoId'],
+                            'archive'            => $loadedJson['metaSignSignature']['metaSign']['signatureProfile']['archive'],
+                            'requireSigningTime' => $loadedJson['metaSignSignature']['metaSign']['signatureProfile']['requireSigningTime'],
                         ]
                     ]
                 ]
             ];
-            return $config;
         } else {
             return false;
         }
@@ -213,8 +212,8 @@ class MetaSignSignatureController
                 __DIR__ . '/fonts/dejavu-fonts-ttf-2.37/ttf/DejaVuSans.ttf'
             );
 
-            $loadedXml = CoreConfigModel::getConfig();
-            if ($loadedXml->textWithDigitalSignature == 'true') {
+            $loadedJson = CoreConfigModel::getConfig();
+            if ($loadedJson['textWithDigitalSignature']) {
                 $textBlock = new \SetaPDF_Core_Text_Block($font, 7);
                 $textBlock->setWidth($signatureFieldWith);
                 $textBlock->setLineHeight(14);
diff --git a/src/core/controllers/AuthenticationController.php b/src/core/controllers/AuthenticationController.php
index ac8fdd4173ce470accbf5ad5018603e2bee261f4..840563feadc86b8c8d81af0da6b58deb67c16fe6 100755
--- a/src/core/controllers/AuthenticationController.php
+++ b/src/core/controllers/AuthenticationController.php
@@ -408,12 +408,10 @@ class AuthenticationController
     {
         $sessionTime = AuthenticationController::MAX_DURATION_TOKEN;
 
-        $loadedXml = CoreConfigModel::getConfig();
-        if ($loadedXml) {
-            if (!empty($loadedXml->config->sessionTime)) {
-                if ($sessionTime > (int)$loadedXml->config->sessionTime) {
-                    $sessionTime = (int)$loadedXml->config->sessionTime;
-                }
+        $loadedJson = CoreConfigModel::getConfig();
+        if (!empty($loadedJson['config']['sessionTime'])) {
+            if ($sessionTime > $loadedJson['config']['sessionTime']) {
+                $sessionTime = $loadedJson['config']['sessionTime'];
             }
         }
 
@@ -433,11 +431,10 @@ class AuthenticationController
     {
         $sessionTime = AuthenticationController::MAX_DURATION_TOKEN;
 
-        $loadedXml = CoreConfigModel::getConfig();
-        if ($loadedXml) {
-            if (!empty($loadedXml->config->sessionTime)) {
-                $sessionTime = (int)$loadedXml->config->sessionTime;
-            }
+        $loadedJson = CoreConfigModel::getConfig();
+
+        if (!empty($loadedJson['config']['sessionTime'])) {
+            $sessionTime = $loadedJson['config']['sessionTime'];
         }
 
         $token = [
diff --git a/src/core/controllers/LanguageController.php b/src/core/controllers/LanguageController.php
index 7ac71ae275b35f6ed4a251f736cc303bdbbb9ecc..ccb53d48861de8da42072fc5458aa1abd0e05566 100644
--- a/src/core/controllers/LanguageController.php
+++ b/src/core/controllers/LanguageController.php
@@ -48,9 +48,9 @@ class LanguageController
     {
         $files = array_diff(scandir('lang'), ['..', '.']);
 
-        $loadedXml = CoreConfigModel::getConfig();
-        if (!empty((string)$loadedXml->config->customLangPathDirectory)) {
-            $overloadDirectory = (string)$loadedXml->config->customLangPathDirectory;
+        $loadedJson = CoreConfigModel::getConfig();
+        if (!empty($loadedJson['config']['customLangPathDirectory'])) {
+            $overloadDirectory = $loadedJson['config']['customLangPathDirectory'];
             $files = array_merge($files, array_diff(scandir($overloadDirectory), ['..', '.']));
         }
 
@@ -76,9 +76,9 @@ class LanguageController
             $language = json_decode($file, true);
         }
 
-        $loadedXml = CoreConfigModel::getConfig();
-        if (!empty((string)$loadedXml->config->customLangPathDirectory)) {
-            $overloadDirectory = rtrim((string)$loadedXml->config->customLangPathDirectory, '/');
+        $loadedJson = CoreConfigModel::getConfig();
+        if (!empty($loadedJson['config']['customLangPathDirectory'])) {
+            $overloadDirectory = rtrim($loadedJson['config']['customLangPathDirectory'], '/');
             $overloadFile = "{$overloadDirectory}/{$args['language']}.json";
 
             if (is_file($overloadFile)) {
diff --git a/src/core/models/CoreConfigModel.php b/src/core/models/CoreConfigModel.php
index ddeb6659bfe8ed582438a70a62d48a2e3d14db61..a4132a43afefd298f72ae77c1db5c6f175ab6095 100755
--- a/src/core/models/CoreConfigModel.php
+++ b/src/core/models/CoreConfigModel.php
@@ -28,9 +28,9 @@ class CoreConfigModel
     {
         $path = CoreConfigModel::getConfigPath();
 
-        $loadedXml = CoreConfigModel::getXmlLoaded(['path' => $path . '/config.xml']);
+        $loadedJson = CoreConfigModel::getJsonLoaded(['path' => $path . '/config.json']);
 
-        return $loadedXml;
+        return $loadedJson;
     }
 
     /**
@@ -41,13 +41,10 @@ class CoreConfigModel
     public static function getTimezone()
     {
         $timezone = 'Europe/Paris';
+        $loadedJson = CoreConfigModel::getConfig();
 
-        $loadedXml = CoreConfigModel::getConfig();
-
-        if ($loadedXml) {
-            if (!empty((string)$loadedXml->config->timezone)) {
-                $timezone = (string)$loadedXml->config->timezone;
-            }
+        if (!empty($loadedJson['config']['timezone'])) {
+            $timezone = $loadedJson['config']['timezone'];
         }
 
         return $timezone;
@@ -86,6 +83,20 @@ class CoreConfigModel
         return $xmlfile;
     }
 
+    public static function getJsonLoaded(array $args)
+    {
+        ValidatorModel::notEmpty($args, ['path']);
+        ValidatorModel::stringType($args, ['path']);
+
+        $jsonFile = null;
+        if (file_exists($args['path'])) {
+            $jsonFile = file_get_contents($args['path']);
+            $jsonFile = json_decode($jsonFile, true);
+        }
+
+        return $jsonFile;
+    }
+
     public static function getEncryptKey()
     {
         if (!empty($_SERVER['MAARCH_ENCRYPT_KEY'])) {
@@ -132,23 +143,11 @@ class CoreConfigModel
     public static function getSignatureModes()
     {
         $modes = [];
-
         $config = CoreConfigModel::getConfig();
 
-        if ($config) {
-            if (!empty($config->signatureModes->mode)) {
-                foreach ($config->signatureModes->mode as $mode) {
-                    $modes[] = [
-                        'id'       => (string)$mode->id,
-                        'color'    => (string)$mode->color,
-                        'issuer'   => (string)$mode->issuer,
-                        'subject'  => (string)$mode->subject,
-                        'keyUsage' => (string)$mode->keyUsage
-                    ];
-                }
-            }
+        if (!empty($config['signatureModes']['mode'])) {
+            $modes = $config['signatureModes']['mode'];
         }
-
         $modes[] = ['id' => 'stamp', 'color' => '#808080'];
         $modes[] = ['id' => 'note', 'color' => '#473632'];
 
diff --git a/src/core/models/DatabasePDO.php b/src/core/models/DatabasePDO.php
index e47f6c31a80b3ac35ea81f79bf5eeff31f055ebe..dec10e46f7d05ebf4a099ae162c2d9d7b8a9899f 100755
--- a/src/core/models/DatabasePDO.php
+++ b/src/core/models/DatabasePDO.php
@@ -28,22 +28,23 @@ class DatabasePDO
         }
 
         if (!empty($args['configPath'])) {
-            $loadedXml = CoreConfigModel::getXmlLoaded(['path' => $args['configPath'] . '/config.xml']);
+            $loaderJson = CoreConfigModel::getJsonLoaded(['path' => $args['configPath'] . '/config.json']);
         } else {
-            $loadedXml = CoreConfigModel::getConfig();
+            $loaderJson = CoreConfigModel::getConfig();
         }
 
-        if (!$loadedXml) {
+        if (!$loaderJson) {
             throw new \Exception('Configuration file can not be read');
         }
 
-        foreach ($loadedXml->database as $key => $database) {
-            $server     = (string)$database->server;
-            $port       = (string)$database->port;
-            $name       = (string)$database->name;
-            $user       = (string)$database->user;
-            $password   = (string)$database->password;
-            self::$type = (string)$database->type;
+
+        foreach ($loaderJson['database'] as $key => $database) {
+            $server     = $database['server'];
+            $port       = $database['port'];
+            $name       = $database['name'];
+            $user       = $database['user'];
+            $password   = $database['password'];
+            self::$type = $database['type'];
 
             $formattedDriver = 'pgsql';
             if (self::$type == 'POSTGRESQL') {
@@ -79,7 +80,7 @@ class DatabasePDO
                     self::$pdo = new \PDO($dsn, $user, $password, $options);
                     break;
                 } catch (\PDOException $PDOException) {
-                    if (!empty($loadedXml->{$key.'1'})) {
+                    if (!empty($loaderJson['database'][$key + 1])) {
                         continue;
                     } else {
                         throw new \Exception($PDOException->getMessage());
diff --git a/test/unitTests/define.php b/test/unitTests/define.php
index 393e7af7f2ecd5a0de496db1e7d171f995268383..febfd3b97f20c8a027119b983edc42866e9a3b20 100755
--- a/test/unitTests/define.php
+++ b/test/unitTests/define.php
@@ -10,7 +10,7 @@
 require_once 'vendor/autoload.php';
 
 $id = 1;
-if (empty($_SERVER['CONFIG_DIR']) && is_file("{$_SERVER['PWD']}/config/config.xml")) {
+if (empty($_SERVER['CONFIG_DIR']) && is_file("{$_SERVER['PWD']}/config/config.json")) {
     $_SERVER['CONFIG_DIR'] = "{$_SERVER['PWD']}/config/";
 }