diff --git a/apps/maarch_entreprise/actions/sendFileWS.php b/apps/maarch_entreprise/actions/sendFileWS.php
index e2e8ff84c594e0c58ec0156b78873f580dcedec3..a75fe2dd663ecb8308df466eff07a2af89338658 100644
--- a/apps/maarch_entreprise/actions/sendFileWS.php
+++ b/apps/maarch_entreprise/actions/sendFileWS.php
@@ -10,7 +10,7 @@ function manage_send($aId)
 
     foreach ($aId as $resId) {
         $document = \Resource\models\ResModel::getById(['resId' => $resId, 'select' => ['res_id', 'format', 'path', 'filename']]);
-        $docserver = \Docserver\models\DocserverModel::getByCollId(['collId' => 'letterbox_coll', 'priority' => true, 'select' => ['path_template']]);
+        $docserver = \Docserver\models\DocserverModel::getFirstByTypeId(['typeId' => 'DOC', 'select' => ['path_template']]);
 
         $file = file_get_contents($docserver['path_template'] . str_replace('#', '/', $document['path']) . $document['filename']);
         $encodedFile = base64_encode($file);
diff --git a/core/Test/DocserverControllerTest.php b/core/Test/DocserverControllerTest.php
index 9974b39b783b073c82495638390405741e60526a..8a30d15acefe78fdcea7d91b5e2638b3bc007690 100644
--- a/core/Test/DocserverControllerTest.php
+++ b/core/Test/DocserverControllerTest.php
@@ -9,44 +9,62 @@
 
 use PHPUnit\Framework\TestCase;
 
-class DocserverControllerTest extends TestCase {
-
+class DocserverControllerTest extends TestCase
+{
     private static $id = null;
-    public function testGet(){
+
+    public function testGet()
+    {
         $docserverController = new \Docserver\controllers\DocserverController();
+
         $environment    = \Slim\Http\Environment::mock(['REQUEST_METHOD' => 'GET']);
         $request        = \Slim\Http\Request::createFromEnvironment($environment);
-        $aArgs = [];
-        $fullRequest = \httpRequestCustom::addContentInBody($aArgs, $request);
-        $response     = $docserverController->get($fullRequest, new \Slim\Http\Response());
+
+        $response     = $docserverController->get($request, new \Slim\Http\Response());
         $responseBody = json_decode((string)$response->getBody());
-        $this->assertNotNull($responseBody);
-    }    
 
-    public function testCreate(){
+        $this->assertNotEmpty($responseBody->docservers);
+        $this->assertNotEmpty($responseBody->types);
+    }
+
+    public function testCreate()
+    {
         $docserverController = new \Docserver\controllers\DocserverController();
+
+        //  CREATE
         $environment    = \Slim\Http\Environment::mock(['REQUEST_METHOD' => 'POST']);
         $request        = \Slim\Http\Request::createFromEnvironment($environment);
+
         $aArgs = [
             'docserver_id'           =>  'NEW_DOCSERVER',
             'docserver_type_id'      =>  'DOC',
             'device_label'           =>  'new docserver',
             'size_limit_number'      =>  50000000000,
-            'path_template'          =>  '/var/docserversDEV/dev1804/archive_transfer/',
+            'path_template'          =>  '/tmp/',
             'coll_id'                =>  'letterbox_coll',
             'priority_number'        =>  99,
             'adr_priority_number'    =>  99
         ];
         $fullRequest = \httpRequestCustom::addContentInBody($aArgs, $request);
-        $response     = $docserverController->create($fullRequest, new \Slim\Http\Response(),$aArgs);
+
+        $response     = $docserverController->create($fullRequest, new \Slim\Http\Response());
         $responseBody = json_decode((string)$response->getBody());
+
         self::$id = $responseBody->docserver;
         $this->assertInternalType('int', self::$id);
 
-        $response     = $docserverController->getById($fullRequest, new \Slim\Http\Response(),['id' =>  self::$id]);
-        $responseBody = json_decode((string)$response->getBody());
+        //  READ
+        $environment    = \Slim\Http\Environment::mock(['REQUEST_METHOD' => 'GET']);
+        $request        = \Slim\Http\Request::createFromEnvironment($environment);
+        $response       = $docserverController->getById($request, new \Slim\Http\Response(), ['id' =>  self::$id]);
+        $responseBody   = json_decode((string)$response->getBody());
+
         $this->assertSame('NEW_DOCSERVER', $responseBody->docserver_id);
 
+        //  CREATE
+        $environment    = \Slim\Http\Environment::mock(['REQUEST_METHOD' => 'POST']);
+        $request        = \Slim\Http\Request::createFromEnvironment($environment);
+
         $aArgs = [
             'docserver_id'           =>  'WRONG_PATH',
             'docserver_type_id'      =>  'DOC',
@@ -58,11 +76,15 @@ class DocserverControllerTest extends TestCase {
             'adr_priority_number'    =>  99
         ];
         $fullRequest = \httpRequestCustom::addContentInBody($aArgs, $request);
-        $response     = $docserverController->create($fullRequest, new \Slim\Http\Response(),$aArgs);
+        $response     = $docserverController->create($fullRequest, new \Slim\Http\Response());
         $responseBody = json_decode((string)$response->getBody());
         
         $this->assertSame(_PATH_OF_DOCSERVER_UNAPPROACHABLE, $responseBody->errors);
 
+        //  CREATE
+        $environment    = \Slim\Http\Environment::mock(['REQUEST_METHOD' => 'POST']);
+        $request        = \Slim\Http\Request::createFromEnvironment($environment);
+
         $aArgs = [
             'docserver_id'           =>  'BAD_REQUEST',
             'docserver_type_id'      =>  'DOC',
@@ -74,11 +96,15 @@ class DocserverControllerTest extends TestCase {
             'adr_priority_number'    =>  99
         ];
         $fullRequest = \httpRequestCustom::addContentInBody($aArgs, $request);
-        $response     = $docserverController->create($fullRequest, new \Slim\Http\Response(),$aArgs);
+        $response     = $docserverController->create($fullRequest, new \Slim\Http\Response());
         $responseBody = json_decode((string)$response->getBody());
         
         $this->assertSame('Bad Request', $responseBody->errors);
 
+        //  CREATE
+        $environment    = \Slim\Http\Environment::mock(['REQUEST_METHOD' => 'POST']);
+        $request        = \Slim\Http\Request::createFromEnvironment($environment);
+
         $aArgs = [
             'docserver_id'           =>  'NEW_DOCSERVER',
             'docserver_type_id'      =>  'DOC',
@@ -90,29 +116,45 @@ class DocserverControllerTest extends TestCase {
             'adr_priority_number'    =>  99
         ];
         $fullRequest = \httpRequestCustom::addContentInBody($aArgs, $request);
-        $response     = $docserverController->create($fullRequest, new \Slim\Http\Response(),$aArgs);
+        $response     = $docserverController->create($fullRequest, new \Slim\Http\Response());
         $responseBody = json_decode((string)$response->getBody());
         
         $this->assertSame(_ID. ' ' . _ALREADY_EXISTS, $responseBody->errors);
     }
 
-    public function testUpdate(){
+    public function testUpdate()
+    {
         $docserverController = new \Docserver\controllers\DocserverController();
+
+        //  UPDATE
         $environment    = \Slim\Http\Environment::mock(['REQUEST_METHOD' => 'PUT']);
         $request        = \Slim\Http\Request::createFromEnvironment($environment);
         $aArgs = [
             'docserver_type_id'      =>  'DOC',
             'device_label'           =>  'updated docserver',
             'size_limit_number'      =>  50000000000,
-            'path_template'          =>  '/var/docserversDEV/dev1804/archive_transfer/',
+            'path_template'          =>  '/tmp/',
             'priority_number'        =>  99,
             'adr_priority_number'    =>  99
         ];
         $fullRequest = \httpRequestCustom::addContentInBody($aArgs, $request);
-        $response     = $docserverController->update($fullRequest, new \Slim\Http\Response(),['id' => self::$id]);
+        $response     = $docserverController->update($fullRequest, new \Slim\Http\Response(), ['id' => self::$id]);
         $responseBody = json_decode((string)$response->getBody());
+
         $this->assertSame('success', $responseBody->success);
 
+        //  READ
+        $environment    = \Slim\Http\Environment::mock(['REQUEST_METHOD' => 'GET']);
+        $request        = \Slim\Http\Request::createFromEnvironment($environment);
+        $response       = $docserverController->getById($request, new \Slim\Http\Response(), ['id' =>  self::$id]);
+        $responseBody   = json_decode((string)$response->getBody());
+
+        $this->assertSame('updated docserver', $responseBody->device_label);
+
+        //  UPDATE
+        $environment    = \Slim\Http\Environment::mock(['REQUEST_METHOD' => 'PUT']);
+        $request        = \Slim\Http\Request::createFromEnvironment($environment);
+
         $aArgs = [
             'docserver_type_id'      =>  'DOC',
             'device_label'           =>  'updated docserver',
@@ -122,48 +164,56 @@ class DocserverControllerTest extends TestCase {
             'adr_priority_number'    =>  99
         ];
         $fullRequest = \httpRequestCustom::addContentInBody($aArgs, $request);
-        $response     = $docserverController->update($fullRequest, new \Slim\Http\Response(),['id' => self::$id]);
+        $response     = $docserverController->update($fullRequest, new \Slim\Http\Response(), ['id' => self::$id]);
         $responseBody = json_decode((string)$response->getBody());
+
         $this->assertSame(_PATH_OF_DOCSERVER_UNAPPROACHABLE, $responseBody->errors);
 
+        //  UPDATE
+        $environment    = \Slim\Http\Environment::mock(['REQUEST_METHOD' => 'PUT']);
+        $request        = \Slim\Http\Request::createFromEnvironment($environment);
+
         $aArgs = [
             'docserver_type_id'      =>  'DOC',
             'device_label'           =>  'updated docserver',
             'size_limit_number'      =>  50000000000,
-            'path_template'          =>  '/var/docserversDEV/dev1804/archive_transfer/',
+            'path_template'          =>  '/tmp/',
             'priority_number'        =>  99,
             'adr_priority_number'    =>  99
         ];
         $fullRequest = \httpRequestCustom::addContentInBody($aArgs, $request);
-        $response     = $docserverController->update($fullRequest, new \Slim\Http\Response(),['id' => 12345]);
+        $response     = $docserverController->update($fullRequest, new \Slim\Http\Response(), ['id' => 12345]);
         $responseBody = json_decode((string)$response->getBody());
+
         $this->assertSame('Docserver not found', $responseBody->errors);
     }
 
-    public function testDelete(){
+    public function testDelete()
+    {
         $docserverController = new \Docserver\controllers\DocserverController();
+
+        //  DELETE
         $environment    = \Slim\Http\Environment::mock(['REQUEST_METHOD' => 'DELETE']);
         $request        = \Slim\Http\Request::createFromEnvironment($environment);
-        $aArgs = [
-            'id'           =>  self::$id
-        ];
-        $fullRequest = \httpRequestCustom::addContentInBody($aArgs, $request);
-        $response     = $docserverController->delete($fullRequest, new \Slim\Http\Response(),$aArgs);
-        $responseBody = json_decode((string)$response->getBody());
-        $this->assertsame('success',$responseBody->success);
+        $response       = $docserverController->delete($request, new \Slim\Http\Response(), ['id' => self::$id]);
+        $responseBody   = json_decode((string)$response->getBody());
 
-        $aArgs = [
-            'id'           =>  self::$id
-        ];
-        $fullRequest = \httpRequestCustom::addContentInBody($aArgs, $request);
-        $response     = $docserverController->delete($fullRequest, new \Slim\Http\Response(),$aArgs);
-        $responseBody = json_decode((string)$response->getBody());
-        $this->assertSame('Docserver does not exist', $responseBody->errors);
-    }
+        $this->assertsame('success', $responseBody->success);
 
-    
+        //  READ
+        $environment    = \Slim\Http\Environment::mock(['REQUEST_METHOD' => 'GET']);
+        $request        = \Slim\Http\Request::createFromEnvironment($environment);
+        $response       = $docserverController->getById($request, new \Slim\Http\Response(), ['id' =>  self::$id]);
+        $responseBody   = json_decode((string)$response->getBody());
 
-    
+        $this->assertSame('Docserver not found', $responseBody->errors);
 
+        //  DELETE
+        $environment    = \Slim\Http\Environment::mock(['REQUEST_METHOD' => 'DELETE']);
+        $request        = \Slim\Http\Request::createFromEnvironment($environment);
+        $response       = $docserverController->delete($request, new \Slim\Http\Response(), ['id' => self::$id]);
+        $responseBody   = json_decode((string)$response->getBody());
 
-}
\ No newline at end of file
+        $this->assertSame('Docserver does not exist', $responseBody->errors);
+    }
+}
diff --git a/modules/visa/sign_file.php b/modules/visa/sign_file.php
index 99f6d74f51e06e64f05084d7477885721482ea13..87fa9be01f5f3b8c4944c8382e355cc92de83053 100755
--- a/modules/visa/sign_file.php
+++ b/modules/visa/sign_file.php
@@ -48,7 +48,7 @@ if (!empty($_REQUEST['id']) && !empty($_REQUEST['collId'])) {
             exit;
         }
 
-        $docserver = \Docserver\models\DocserverModel::getByTypeId(['docserver_type_id' => 'TEMPLATES', 'select' => ['path_template']]);
+        $docserver = \Docserver\models\DocserverModel::getFirstByTypeId(['typeId' => 'TEMPLATES', 'select' => ['path_template']]);
         $pathToWantedSignature = $docserver['path_template'] . str_replace('#', '/', $signature->signature_path) . $signature->signature_file_name;
     } else {
         $pathToWantedSignature = $_SESSION['user']['pathToSignature'][0];
diff --git a/phpunit.xml b/phpunit.xml
index 8204ef76f6a392e828f62f0415d43a294265f73b..3c6aabdd704cb5cdc1d051ecf1cef639b2278f8a 100755
--- a/phpunit.xml
+++ b/phpunit.xml
@@ -9,6 +9,7 @@
             <file>core/Test/ContactControllerTest.php</file>
             <file>core/Test/ContactGroupControllerTest.php</file>
             <file>core/Test/ContactTypeControllerTest.php</file>
+            <file>core/Test/DocserverControllerTest.php</file>
             <file>core/Test/DoctypeControllerTest.php</file>
             <file>core/Test/EntityControllerTest.php</file>
             <file>core/Test/GroupControllerTest.php</file>
diff --git a/src/app/docserver/controllers/DocserverTypeController.php b/src/app/docserver/controllers/DocserverTypeController.php
index 0766d2ab446c769842425db1e1767b3208163fef..158c7685c41151779a7099d01303e44dc6de3716 100644
--- a/src/app/docserver/controllers/DocserverTypeController.php
+++ b/src/app/docserver/controllers/DocserverTypeController.php
@@ -44,21 +44,4 @@ class DocserverTypeController
 
         return $response->withJson($docserverType);
     }
-
-    public function delete(Request $request, Response $response, array $aArgs)
-    {
-        if (!ServiceModel::hasService(['id' => 'admin_docservers', 'userId' => $GLOBALS['userId'], 'location' => 'apps', 'type' => 'admin'])) {
-            return $response->withStatus(403)->withJson(['errors' => 'Service forbidden']);
-        }
-
-        $docserverType = DocserverTypeModel::getById(['id' => $aArgs['id']]);
-
-        if(empty($docserverType)){
-            return $response->withStatus(400)->withJson(['errors' => 'Docserver Type does not exist']);
-        }
-
-        DocserverTypeModel::delete(['id' => $aArgs['id']]);
-
-        return $response->withJson(['docserverTypes' => DocserverTypeModel::get()]);
-    }
 }
diff --git a/src/app/docserver/models/DocserverModelAbstract.php b/src/app/docserver/models/DocserverModelAbstract.php
index d6dd85f0d3fd54a3642e5a082a026a7865e365c1..2314732c1eb4805458e55e60115e2f9d554f89ae 100644
--- a/src/app/docserver/models/DocserverModelAbstract.php
+++ b/src/app/docserver/models/DocserverModelAbstract.php
@@ -72,17 +72,19 @@ class DocserverModelAbstract
         return $aDocserver[0];
     }
 
-    public static function getByTypeId(array $aArgs)
+    public static function getFirstByTypeId(array $aArgs)
     {
-        ValidatorModel::notEmpty($aArgs, ['docserver_type_id']);
-        ValidatorModel::stringType($aArgs, ['docserver_type_id']);
+        ValidatorModel::notEmpty($aArgs, ['typeId']);
+        ValidatorModel::stringType($aArgs, ['typeId']);
         ValidatorModel::arrayType($aArgs, ['select']);
 
         $aDocserver = DatabaseModel::select([
             'select'    => empty($aArgs['select']) ? ['*'] : $aArgs['select'],
             'table'     => ['docservers'],
             'where'     => ['docserver_type_id = ?'],
-            'data'      => [$aArgs['docserver_type_id']]
+            'data'      => [$aArgs['typeId']],
+            'order_by'  => ['priority_number'],
+            'limit'     => 1
         ]);
 
         if (empty($aDocserver[0])) {
@@ -92,30 +94,6 @@ class DocserverModelAbstract
         return $aDocserver[0];
     }
 
-    public static function getByCollId(array $aArgs)
-    {
-        ValidatorModel::notEmpty($aArgs, ['collId']);
-        ValidatorModel::stringType($aArgs, ['collId']);
-        ValidatorModel::boolType($aArgs, ['priority']);
-
-        $data = [
-            'select'    => empty($aArgs['select']) ? ['*'] : $aArgs['select'],
-            'table'     => ['docservers'],
-            'where'     => ['coll_id = ?'],
-            'data'      => [$aArgs['collId']]
-        ];
-        if (!empty($aArgs['priority'])) {
-            $data['order_by'] = ['priority_number'];
-        }
-        $aReturn = DatabaseModel::select($data);
-
-        if (!empty($aArgs['priority'])) {
-            return $aReturn[0];
-        }
-
-        return $aReturn;
-    }
-
     public static function create(array $aArgs)
     {
         ValidatorModel::notEmpty($aArgs, ['docserver_id', 'docserver_type_id', 'device_label', 'path_template', 'coll_id', 'size_limit_number', 'priority_number', 'adr_priority_number', 'is_readonly']);
diff --git a/src/app/docserver/models/DocserverTypeModelAbstract.php b/src/app/docserver/models/DocserverTypeModelAbstract.php
index 61831cfb0bf925170ca1f8bc428ee8359559ddb5..1f5cc38bcae54b7f43f8285db1d97629893b0952 100644
--- a/src/app/docserver/models/DocserverTypeModelAbstract.php
+++ b/src/app/docserver/models/DocserverTypeModelAbstract.php
@@ -10,7 +10,6 @@
 /**
 * @brief DocserverType Model
 * @author dev@maarch.org
-* @ingroup core
 */
 
 namespace Docserver\models;
@@ -50,46 +49,4 @@ class DocserverTypeModelAbstract
 
         return $aDocserverType[0];
     }
-
-    public static function create(array $aArgs = [])
-    {
-        ValidatorModel::notEmpty($aArgs, ['docserver_type_id']);
-        ValidatorModel::stringType($aArgs, ['docserver_type_id']);
-
-        DatabaseModel::insert([
-            'table'         => 'docserver_types',
-            'columnsValues' => $aArgs
-        ]);
-
-        return true;
-    }
-
-    public static function update(array $aArgs = [])
-    {
-        ValidatorModel::notEmpty($aArgs, ['docserver_type_id']);
-        ValidatorModel::stringType($aArgs, ['docserver_type_id']);
-
-        DatabaseModel::update([
-            'table'     => 'docserver_types',
-            'set'       => $aArgs,
-            'where'     => ['docserver_type_id = ?'],
-            'data'      => [$aArgs['docserver_type_id']]
-        ]);
-
-        return true;
-    }
-
-    public static function delete(array $aArgs)
-    {
-        ValidatorModel::notEmpty($aArgs, ['id']);
-        ValidatorModel::stringType($aArgs, ['id']);
-
-        DatabaseModel::delete([
-            'table' => 'docserver_types',
-            'where' => ['docserver_type_id = ?'],
-            'data'  => [$aArgs['id']]
-        ]);
-
-        return true;
-    }
 }
diff --git a/src/app/group/models/GroupModelAbstract.php b/src/app/group/models/GroupModelAbstract.php
index 0cc8eb78ae951fb89b4f1526c0b93b9fa9491d70..f1850ef3125b3b3b1cc0bfd030e52947c5dbc16d 100644
--- a/src/app/group/models/GroupModelAbstract.php
+++ b/src/app/group/models/GroupModelAbstract.php
@@ -359,7 +359,7 @@ abstract class GroupModelAbstract
                 'group_id'  => $aArgs['newGroupId']
             ],
             'where'     => $where,
-            'data'      => [$aArgs['groupId'], $aArgs['ignoredUsers']]
+            'data'      => $data
         ]);
 
         return true;
diff --git a/src/app/signatureBook/controllers/SignatureBookController.php b/src/app/signatureBook/controllers/SignatureBookController.php
index a92f25b7172cd34543cf7571f5abe315c4703881..47f53aea24b2b35fd8f9efd95642ab3d01a3c97b 100644
--- a/src/app/signatureBook/controllers/SignatureBookController.php
+++ b/src/app/signatureBook/controllers/SignatureBookController.php
@@ -43,8 +43,8 @@ class SignatureBookController
         if (!ResController::hasRightByResId(['resId' => $resId, 'userId' => $GLOBALS['userId']])) {
             return $response->withStatus(403)->withJson(['errors' => 'Document out of perimeter']);
         }
-        $docserver = DocserverModel::getByTypeId(['docserver_type_id' => 'TEMPLATES', 'select' => ['path_template']]);
-        if (!file_exists($docserver['path_template'])) {
+        $docserver = DocserverModel::getFirstByTypeId(['typeId' => 'TEMPLATES', 'select' => ['path_template']]);
+        if (empty($docserver['path_template']) || !file_exists($docserver['path_template'])) {
             return $response->withStatus(500)->withJson(['errors' => _UNREACHABLE_DOCSERVER]);
         }
 
diff --git a/src/app/template/controllers/TemplateController.php b/src/app/template/controllers/TemplateController.php
index 97e8b19321c911d2904a24bca4d7391a9d4468d1..354e78a52f994edad661fafd389e9bb276313c0e 100644
--- a/src/app/template/controllers/TemplateController.php
+++ b/src/app/template/controllers/TemplateController.php
@@ -32,7 +32,7 @@ class TemplateController
         }
 
         if ($template['template_type'] == 'OFFICE') {
-            $docserver = DocserverModel::getByTypeId(['docserver_type_id' => 'TEMPLATES', 'select' => ['path_template']]);
+            $docserver = DocserverModel::getFirstByTypeId(['typeId' => 'TEMPLATES', 'select' => ['path_template']]);
 
             $pathOnDocserver = DocserverController::createPathOnDocServer(['path' => $docserver['path_template']]);
             $docinfo = DocserverController::getNextFileNameInDocServer(['pathOnDocserver' => $pathOnDocserver['pathToDocServer']]);
diff --git a/src/app/user/controllers/UserController.php b/src/app/user/controllers/UserController.php
index 0cca9a0e2553b5c3b7efcb1fc204b10abf0d9e66..df8f174f624119cb0fbc9e82c4f81c6c34046a4f 100644
--- a/src/app/user/controllers/UserController.php
+++ b/src/app/user/controllers/UserController.php
@@ -472,8 +472,8 @@ class UserController
             return $response->withStatus(400)->withJson(['errors' => 'Signature does not exist']);
         }
 
-        $docserver = DocserverModel::getByTypeId(['docserver_type_id' => 'TEMPLATES', 'select' => ['path_template']]);
-        if (!file_exists($docserver['path_template'])) {
+        $docserver = DocserverModel::getFirstByTypeId(['typeId' => 'TEMPLATES', 'select' => ['path_template']]);
+        if (empty($docserver['path_template']) || !file_exists($docserver['path_template'])) {
             return [];
         }