diff --git a/apps/maarch_entreprise/actions/index_mlb.php b/apps/maarch_entreprise/actions/index_mlb.php
index 15633580720ef6970dd553e1463de00dae8e2ac8..488ad5f75121317b683ef101536b9d6f9d794bf0 100755
--- a/apps/maarch_entreprise/actions/index_mlb.php
+++ b/apps/maarch_entreprise/actions/index_mlb.php
@@ -1188,18 +1188,17 @@ function check_docserver($collId)
         $newFileName = $_SESSION['upfile']['name'];
     }
 
-    $fileInfos = array(
-        'tmpDir' => $_SESSION['config']['tmppath'],
-        'size' => $_SESSION['upfile']['size'],
-        'format' => $_SESSION['upfile']['format'],
-        'tmpFileName' => $newFileName,
-    );
-    //print_r($fileInfos);
-
-    $storeResult = $docserverControler->storeResourceOnDocserver($collId, $fileInfos);
-    //print_r($storeResult);
-    if (isset($storeResult['error']) && $storeResult['error'] != '') {
-        $_SESSION['action_error'] = $storeResult['error'];
+    $storeResult = \Docserver\controllers\DocserverController::storeResourceOnDocServer([
+        'collId'            => $collId,
+        'docserverTypeId'   => 'DOC',
+        'fileInfos'         => [
+            'tmpDir'            => $_SESSION['config']['tmppath'],
+            'tmpFileName'       => $newFileName
+        ]
+    ]);
+
+    if (isset($storeResult['errors']) && $storeResult['errors'] != '') {
+        $_SESSION['action_error'] = $storeResult['errors'];
 
         return false;
     } else {
@@ -1207,6 +1206,7 @@ function check_docserver($collId)
         $_SESSION['indexing']['destination_dir'] = $storeResult['destination_dir'];
         $_SESSION['indexing']['docserver_id'] = $storeResult['docserver_id'];
         $_SESSION['indexing']['file_destination_name'] = $storeResult['file_destination_name'];
+        $_SESSION['indexing']['fingerPrint'] = $storeResult['fingerPrint'];
         $_SESSION['action_error'] = _CHECK_FORM_OK;
 
         return true;
@@ -1762,7 +1762,6 @@ function manage_form($arrId, $history, $actionId, $label_action, $status, $collI
     }
 
     if ($core->is_module_loaded('folder')) {
-        $folderId = '';
         $folderId = get_value_fields($formValues, 'folder');
 
         if (!empty($folderId)) {
@@ -1797,14 +1796,28 @@ function manage_form($arrId, $history, $actionId, $label_action, $status, $collI
         }
     }
 
-    //print_r($_SESSION['data']);
-    $resId = $resource->load_into_db(
-        $table, $_SESSION['indexing']['destination_dir'],
-        $_SESSION['indexing']['file_destination_name'],
-        $_SESSION['indexing']['path_template'],
-        $_SESSION['indexing']['docserver_id'], $_SESSION['data'],
-        $_SESSION['config']['databasetype']
-    );
+    $data = \Resource\controllers\StoreController::prepareStorage([
+        'data'          => $_SESSION['data'],
+        'docserverId'   => $_SESSION['indexing']['docserver_id'],
+        'fileName'      => $_SESSION['indexing']['file_destination_name'],
+        'fileFormat'    => $_SESSION['upfile']['format'],
+        'fileSize'      => $_SESSION['upfile']['size'],
+        'path'          => $_SESSION['indexing']['destination_dir'],
+        'fingerPrint'   => $_SESSION['indexing']['fingerPrint']
+    ]);
+
+    $resId = \Resource\models\ResModel::create($data);
+    \Resource\controllers\ConvertThumbnailController::convert(['collId' => 'letterbox_coll', 'resId' => $resId]);
+
+    \History\controllers\HistoryController::add([
+        'tableName' => 'res_letterbox',
+        'recordId'  => $resId,
+        'eventType' => 'ADD',
+        'info'      => _DOC_CREATED,
+        'moduleId'  => 'res',
+        'eventId'   => 'resadd',
+        'userId'    => $_SESSION['user']['UserId']
+    ]);
 
     // Contact
     if (isset($_ENV['categories'][$catId]['other_cases']['contact'])) {
diff --git a/apps/maarch_entreprise/class/class_lists_Abstract.php b/apps/maarch_entreprise/class/class_lists_Abstract.php
index 058a429a3c4e280105e06914354d8f21d0f86e34..4f384ca54e03890f97daed1fd8e35fde7293c13a 100755
--- a/apps/maarch_entreprise/class/class_lists_Abstract.php
+++ b/apps/maarch_entreprise/class/class_lists_Abstract.php
@@ -1617,9 +1617,9 @@ abstract class lists_Abstract extends Database
             $return .= 'checked ';
         }
 
-        $isVersion = 'false';
+        $isVersion = false;
         if ($resultTheLine[1]['value'] > 1) {
-            $isVersion = 'true';
+            $isVersion = true;
         }
         $return .= 'onclick="setAttachmentInSignatureBook('.$resultTheLine[0]['value'].', '.$isVersion.');"/>Intégrer au parapheur';
 
diff --git a/modules/attachments/attachments_content.php b/modules/attachments/attachments_content.php
index 0c6cc8cb91404e60e3f2d68b7bdd808c23488f72..060cc51c58dc503c909fa95194ae6465e5b639de 100755
--- a/modules/attachments/attachments_content.php
+++ b/modules/attachments/attachments_content.php
@@ -318,6 +318,29 @@ if (isset($_POST['add']) && $_POST['add']) {
                                     $_SESSION['data'],
                                     $_SESSION['config']['databasetype']
                                 );
+                                if ($attachment_types == 'outgoing_mail') {
+                                    $extDocument = \Resource\models\ResModel::getExtById(['select' => ['category_id'], 'resId' => $_SESSION['doc_id']]);
+
+                                    if ($extDocument['category_id'] == 'outgoing') {
+                                        $attachment = \Attachment\models\AttachmentModel::getOnView([
+                                            'select'    => ['res_id'],
+                                            'where'     => ['res_id_master = ?', 'attachment_type = ?', 'status not in (?)'],
+                                            'data'      => [$_SESSION['doc_id'], 'outgoing_mail', ['DEL', 'OBS']],
+                                            'limit'     => 1
+                                        ]);
+                                        if (!empty($attachment[0]) && $attachment[0]['res_id'] == $id) {
+                                            \Resource\models\AdrModel::deleteDocumentAdr(['where' => ['res_id = ?', 'type = ?'], 'data' => [$_SESSION['doc_id'], 'TNL']]);
+                                            \Resource\controllers\ConvertThumbnailController::convert([
+                                                'collId'            => 'letterbox_coll',
+                                                'resId'             => $_SESSION['doc_id'],
+                                                'outgoingId'        => $id,
+                                                'isOutgoingVersion' => false
+                                            ]);
+                                        }
+                                    }
+
+                                }
+
                                 //copie de la version PDF de la pièce si mode de conversion sur le client
                                 if ($_SESSION['upfile'][$numAttach]['fileNamePdfOnTmp'] != '' && empty($templateOffice)) {
                                     //case onlyConvert
@@ -791,6 +814,27 @@ if (isset($_POST['add']) && $_POST['add']) {
             } else {
                 $stmt = $db->query("UPDATE res_version_attachments SET status = 'OBS' WHERE res_id = ?", array($previous_attachment->res_id_version));
             }
+            if ($previous_attachment->attachment_type == 'outgoing_mail') {
+                $extDocument = \Resource\models\ResModel::getExtById(['select' => ['category_id'], 'resId' => $_SESSION['doc_id']]);
+
+                if ($extDocument['category_id'] == 'outgoing') {
+                    $attachment = \Attachment\models\AttachmentModel::getOnView([
+                        'select'    => ['res_id', 'res_id_version'],
+                        'where'     => ['res_id_master = ?', 'attachment_type = ?', 'status not in (?)'],
+                        'data'      => [$_SESSION['doc_id'], 'outgoing_mail', ['DEL', 'OBS']],
+                        'limit'     => 1
+                    ]);
+                    if (!empty($attachment[0]) && ($attachment[0]['res_id'] == $previous_attachment->res_id || $attachment[0]['res_id_version'] == $previous_attachment->res_id_version)) {
+                        \Resource\models\AdrModel::deleteDocumentAdr(['where' => ['res_id = ?', 'type = ?'], 'data' => [$_SESSION['doc_id'], 'TNL']]);
+                        \Resource\controllers\ConvertThumbnailController::convert([
+                            'collId'            => 'letterbox_coll',
+                            'resId'             => $_SESSION['doc_id'],
+                            'outgoingId'        => $id,
+                            'isOutgoingVersion' => true
+                        ]);
+                    }
+                }
+            }
         }
     } else {
         $is_new_version = false;
@@ -898,6 +942,27 @@ if (isset($_POST['add']) && $_POST['add']) {
         } else {
             $stmt = $db->query('UPDATE res_version_attachments SET '.$set_update.' WHERE res_id = :res_id', $arrayPDO);
         }
+        if ($_SESSION['upfile'][0]['upAttachment'] != false) {
+            $attachment = \Attachment\models\AttachmentModel::getOnView([
+                'select'    => ['res_id', 'res_id_version', 'attachment_type'],
+                'where'     => ['res_id_master = ?', 'attachment_type = ?', 'status not in (?)'],
+                'data'      => [$_SESSION['doc_id'], 'outgoing_mail', ['DEL', 'OBS']],
+                'limit'     => 1
+            ]);
+            if (!empty($attachment[0]) && in_array($_REQUEST['res_id'], [$attachment[0]['res_id'], $attachment[0]['res_id_version']])) {
+                $extDocument = \Resource\models\ResModel::getExtById(['select' => ['category_id'], 'resId' => $_SESSION['doc_id']]);
+
+                if ($extDocument['category_id'] == 'outgoing') {
+                    \Resource\models\AdrModel::deleteDocumentAdr(['where' => ['res_id = ?', 'type = ?'], 'data' => [$_SESSION['doc_id'], 'TNL']]);
+                    \Resource\controllers\ConvertThumbnailController::convert([
+                        'collId'            => 'letterbox_coll',
+                        'resId'             => $_SESSION['doc_id'],
+                        'outgoingId'        => $id,
+                        'isOutgoingVersion' => ($_REQUEST['relation'] != 1)
+                    ]);
+                }
+            }
+        }
     }
     //copie de la version PDF de la pièce si mode de conversion sur le client
     if ($_SESSION['modules_loaded']['attachments']['convertPdf'] == true && $_SESSION['upfile'][0]['fileNamePdfOnTmp'] != '' && empty($error) && $_SESSION['upfile'][0]['upAttachment'] != false) {
diff --git a/modules/thumbnails/class/class_modules_tools.php b/modules/thumbnails/class/class_modules_tools.php
index 2a57fcfbb39bcd011febe3f507570bf569eb0d00..49a77110a7cf9bbeb5fcf3f18d6debeaefe7863f 100755
--- a/modules/thumbnails/class/class_modules_tools.php
+++ b/modules/thumbnails/class/class_modules_tools.php
@@ -135,72 +135,28 @@ class thumbnails
 		}
 	}
 	
-	public function getPathTnl($res_id, $coll_id, $table_name = false){
-		if (empty($res_id)) return '';
-		require_once("core" . DIRECTORY_SEPARATOR . "class" . DIRECTORY_SEPARATOR 
-		. "class_security.php");
-		require_once 'core/class/docservers_controler.php';
-		$docserversControler = new docservers_controler();
-		$sec = new security();
-	
-		$table = "";
-		if (isset($coll_id) 
-			&& !empty($coll_id)
-		) {
-		   $table = $sec->retrieve_table_from_coll(
-				$coll_id
-			);
-		} else {
-			$table = $_SESSION['collections'][0]['table'];
-		}
-		if ($table_name) $table = $table_name;
-		$db = new Database();
-		
-		$query = "select docserver_id from docservers where is_readonly = 'N' and coll_id = ? and docserver_type_id = 'TNL'";
-			   
-		$stmt = $db->query($query, array($coll_id));
-		$docserverId = $stmt->fetchObject()->docserver_id;
-				
-		$docserver = $docserversControler->get($docserverId);
-		
-		
-		$query = "select category_id from mlb_coll_ext"
-			   . " where res_id = ?";
-			   
-		$stmt = $db->query($query, array($res_id));
-
-		$catId = $stmt->fetchObject()->category_id;
-
-		$query = "SELECT res_id, filename FROM res_view_attachments WHERE status <> 'DEL' and status <> 'OBS' "
-                    . "and res_id_master = ? and attachment_type = 'outgoing_mail' order by res_id desc";
-			   
-		$stmt = $db->query($query, array($res_id));
-
-		$isOutgoingPj = $stmt->fetchObject();
+	public function getPathTnl($res_id, $coll_id, $table_name = false)
+    {
+		if (empty($res_id)) {
+		    return '';
+        }
 
-		if($catId == 'outgoing' && !empty($isOutgoingPj)){
-			// $stmt = $db->query("SELECT tnl_path, tnl_filename FROM res_attachments WHERE res_id_master = ? AND status NOT IN ('DEL','OBS','TMP') AND type_id = '1'", array($res_id));
-				$stmtPdf = $db->query(
-                    "SELECT tnl_path, tnl_filename
-                     FROM res_attachments
-                     WHERE filename=? AND (status = 'TRA' or status = 'A_TRA')", array(substr($isOutgoingPj->filename, 0, strrpos($isOutgoingPj->filename, ".")).'.pdf')
-                );
+        $tnlAdr = \Resource\models\AdrModel::getTypedDocumentAdrByResId([
+            'select'    => ['docserver_id', 'path', 'filename'],
+            'resId'     => $res_id,
+            'type'      => 'TNL'
+        ]);
+        if (empty($tnlAdr)) {
+            return '';
+        }
+        $docserver = \Docserver\models\DocserverModel::getByDocserverId([
+            'select'        => ['path_template'],
+            'docserverId'   => $tnlAdr['docserver_id']
+        ]);
+        $tnlPath = str_replace("#", DIRECTORY_SEPARATOR , $tnlAdr['path']);
+        $path = $docserver['path_template'] . DIRECTORY_SEPARATOR . $tnlPath . $tnlAdr['filename'];
+        $path = str_replace("//", "/", $path);
 
-                $linePdf = $stmtPdf->fetchObject();
-                if(!empty($linePdf)){
-                    $data = $linePdf;
-                }
-		}else{
-			$stmt = $db->query("SELECT tnl_path, tnl_filename FROM $table WHERE res_id = ?", array($res_id));
-			$data = $stmt->fetchObject();
-		}
-		
-		$tnlPath = str_replace("#", DIRECTORY_SEPARATOR , $data->tnl_path);
-		$tnlFilename = $data->tnl_filename;
-		if ($tnlFilename == '-1') $tnlFilename = '';
-		$path=$docserver->path_template . DIRECTORY_SEPARATOR . $tnlPath . $tnlFilename;
-		$path = str_replace("//","/",$path);
-		
 		return $path;
 	}
 
diff --git a/modules/thumbnails/doc_thumb.php b/modules/thumbnails/doc_thumb.php
index 4452589bd127c19d86abbcabc7ddeb3bc629daca..58056a3f8d6c630b14c68248dff35939a983ceab 100755
--- a/modules/thumbnails/doc_thumb.php
+++ b/modules/thumbnails/doc_thumb.php
@@ -7,8 +7,12 @@
 
 	$tnl = new thumbnails();
 	if (empty($advanced)) {
-		if (isset($_REQUEST['tablename'])) $path = $tnl->getPathTnl($resId, $collId,$_REQUEST['tablename']);
-		else $path = $tnl->getPathTnl($resId, $collId); // Old Behaviour
+		if (isset($_REQUEST['tablename'])) {
+		    $path = $tnl->getPathTnl($resId, $collId,$_REQUEST['tablename']);
+        }
+		else {
+		    $path = $tnl->getPathTnl($resId, $collId);
+		}
 	} else {
 		$path = $tnl->getTnlPathWithColl(['resId' => $resId, 'collId' => $collId]); // New Behaviour
 	}
diff --git a/sql/develop.sql b/sql/develop.sql
index 31c0dc50cdf34c7736d278c639d09136c22ce7e3..93f539828cedc72f141f8ebdf6a7963a5d864157 100644
--- a/sql/develop.sql
+++ b/sql/develop.sql
@@ -132,6 +132,29 @@ ALTER TABLE users ADD COLUMN failed_authentication INTEGER DEFAULT 0;
 ALTER TABLE users DROP COLUMN IF EXISTS locked_until;
 ALTER TABLE users ADD COLUMN locked_until TIMESTAMP without time zone;
 
+/* Convert */
+DROP TABLE IF EXISTS adr_letterbox;
+CREATE TABLE adr_letterbox
+(
+  id serial NOT NULL,
+  res_id bigint NOT NULL,
+  type character varying(32) NOT NULL,
+  docserver_id character varying(32) NOT NULL,
+  path character varying(255) NOT NULL,
+  filename character varying(255) NOT NULL,
+  fingerprint character varying(255) DEFAULT NULL::character varying,
+  CONSTRAINT adr_letterbox_pkey PRIMARY KEY (id),
+  CONSTRAINT adr_letterbox_unique_key UNIQUE (res_id, type)
+)
+WITH (OIDS=FALSE);
+DO $$ BEGIN
+  IF (SELECT count(attname) FROM pg_attribute WHERE attrelid = (SELECT oid FROM pg_class WHERE relname = 'res_letterbox') AND attname = 'tnl_path') = 1 THEN
+    INSERT INTO adr_letterbox (res_id, type, docserver_id, path, filename) SELECT res_id, 'TNL', 'TNL_MLB', tnl_path, tnl_filename FROM res_letterbox WHERE tnl_path IS NOT NULL AND tnl_path != 'ERR'
+    ALTER TABLE res_letterbox DROP COLUMN IF EXISTS tnl_path;
+    ALTER TABLE res_letterbox DROP COLUMN IF EXISTS tnl_filename;
+  END IF;
+END$$;
+
 /* Refactoring */
 DROP VIEW IF EXISTS af_view_customer_target_view;
 DROP VIEW IF EXISTS af_view_customer_view;
diff --git a/sql/structure.sql b/sql/structure.sql
index 1944f352eb0e28ffbfe9a1d02b84fec500c11873..f68a7f43386a55146069020321932d5daf0ae8c3 100755
--- a/sql/structure.sql
+++ b/sql/structure.sql
@@ -1356,8 +1356,6 @@ CREATE TABLE res_letterbox
   locker_user_id character varying(255) DEFAULT NULL::character varying,
   locker_time timestamp without time zone,
   confidentiality character(1),
-  tnl_path character varying(255) DEFAULT NULL::character varying,
-  tnl_filename character varying(255) DEFAULT NULL::character varying,
   convert_result character varying(10) DEFAULT NULL::character varying,
   convert_attempts integer DEFAULT NULL::integer,
   fulltext_result character varying(10) DEFAULT NULL::character varying,
@@ -1375,15 +1373,15 @@ WITH (OIDS=FALSE);
 
 CREATE TABLE adr_letterbox
 (
+  id serial NOT NULL,
   res_id bigint NOT NULL,
+  type character varying(32) NOT NULL,
   docserver_id character varying(32) NOT NULL,
-  path character varying(255) DEFAULT NULL::character varying,
-  filename character varying(255) DEFAULT NULL::character varying,
-  offset_doc character varying(255) DEFAULT NULL::character varying,
+  path character varying(255) NOT NULL,
+  filename character varying(255) NOT NULL,
   fingerprint character varying(255) DEFAULT NULL::character varying,
-  adr_priority integer NOT NULL,
-  adr_type character varying(32) NOT NULL DEFAULT 'DOC'::character varying,
-  CONSTRAINT adr_letterbox_pkey PRIMARY KEY (res_id, docserver_id)
+  CONSTRAINT adr_letterbox_pkey PRIMARY KEY (id),
+  CONSTRAINT adr_letterbox_unique_key UNIQUE (res_id, type)
 )
 WITH (OIDS=FALSE);
 
diff --git a/src/app/attachment/models/AttachmentModelAbstract.php b/src/app/attachment/models/AttachmentModelAbstract.php
index 0f4864ce516547e5af29aeb08f46ec66dcf7e57c..503302a425553e9f8ad527fc092b7c1fd0866acd 100644
--- a/src/app/attachment/models/AttachmentModelAbstract.php
+++ b/src/app/attachment/models/AttachmentModelAbstract.php
@@ -40,11 +40,11 @@ abstract class AttachmentModelAbstract
 
     public static function getById(array $aArgs)
     {
-        ValidatorModel::notEmpty($aArgs, ['id', 'isVersion']);
+        ValidatorModel::notEmpty($aArgs, ['id']);
         ValidatorModel::intVal($aArgs, ['id']);
-        ValidatorModel::stringType($aArgs, ['isVersion']);
+        ValidatorModel::boolType($aArgs, ['isVersion']);
 
-        if ($aArgs['isVersion'] == 'true') {
+        if (!empty($aArgs['isVersion'])) {
             $table = 'res_version_attachments';
         } else {
             $table = 'res_attachments';
@@ -113,7 +113,7 @@ abstract class AttachmentModelAbstract
         $originalAttachment = AttachmentModel::getById([
             'select'    => ['path', 'filename'],
             'id'        => $aArgs['id'],
-            'isVersion' => (empty($aArgs['isVersion']) ? 'false' : 'true')
+            'isVersion' => $aArgs['isVersion']
         ]);
 
         $PdfFilename = substr($originalAttachment['filename'], 0, strrpos($originalAttachment['filename'], '.')) . '.pdf';
diff --git a/src/app/resource/controllers/ResController.php b/src/app/resource/controllers/ResController.php
index e9f32e34fefc478627b9f4871648a10d8b29b7ce..6e1feb5bcda1c88ce3c9f07935a9c6c63d89eeec 100755
--- a/src/app/resource/controllers/ResController.php
+++ b/src/app/resource/controllers/ResController.php
@@ -87,6 +87,15 @@ class ResController
             return $response->withStatus(500)->withJson(['errors' => '[ResController create] ' . $resId['errors']]);
         }
 
+        HistoryController::add([
+            'tableName' => 'res_letterbox',
+            'recordId'  => $resId,
+            'eventType' => 'ADD',
+            'info'      => _DOC_ADDED,
+            'moduleId'  => 'res',
+            'eventId'   => 'resadd',
+        ]);
+
         return $response->withJson(['resId' => $resId]);
     }
 
@@ -197,7 +206,7 @@ class ResController
             if (!empty($attachment[0])) {
                 $attachmentTodisplay = $attachment[0];
                 $id = (empty($attachmentTodisplay['res_id']) ? $attachmentTodisplay['res_id_version'] : $attachmentTodisplay['res_id']);
-                $isVersion = (empty($attachmentTodisplay['res_id']) ? true : false);
+                $isVersion = empty($attachmentTodisplay['res_id']);
 
                 $convertedAttachment = AttachmentModel::getConvertedPdfById(['select' => ['docserver_id', 'path', 'filename'], 'id' => $id, 'isVersion' => $isVersion]);
                 if (!empty($convertedAttachment)) {
@@ -284,7 +293,6 @@ class ResController
             }
         }
 
-
         if (empty($fileContent)) {
             $fileContent = file_get_contents($pathToDocument);
         }
@@ -299,6 +307,15 @@ class ResController
         $response->write($fileContent);
         $response = $response->withAddedHeader('Content-Disposition', "inline; filename=maarch.{$pathInfo['extension']}");
 
+        HistoryController::add([
+            'tableName' => 'res_letterbox',
+            'recordId'  => $aArgs['resId'],
+            'eventType' => 'VIEW',
+            'info'      => _DOC_DISPLAYING . " : {$aArgs['resId']}",
+            'moduleId'  => 'res',
+            'eventId'   => 'resview',
+        ]);
+
         return $response->withHeader('Content-Type', $mimeType);
     }
 
diff --git a/src/app/resource/controllers/StoreController.php b/src/app/resource/controllers/StoreController.php
index c7babd9d4d1f76cc635d57f67f1c0292055c7879..c0b7801fb1ed9d3e8b8679841483f9a6be1c652e 100644
--- a/src/app/resource/controllers/StoreController.php
+++ b/src/app/resource/controllers/StoreController.php
@@ -73,6 +73,7 @@ class StoreController
             $resId = false;
             if ($aArgs['table'] == 'res_letterbox') {
                 $resId = ResModel::create($data);
+                ConvertThumbnailController::convert(['collId' => 'letterbox_coll', 'resId' => 260]);
             } elseif ($aArgs['table'] == 'res_attachments') {
                 $resId = AttachmentModel::create($data);
             }
@@ -119,7 +120,7 @@ class StoreController
 
     public static function prepareStorage(array $aArgs)
     {
-        ValidatorModel::notEmpty($aArgs, ['data', 'docserverId', 'status', 'fileName', 'fileFormat', 'fileSize', 'path', 'fingerPrint']);
+        ValidatorModel::notEmpty($aArgs, ['data', 'docserverId', 'fileName', 'fileFormat', 'fileSize', 'path', 'fingerPrint']);
         ValidatorModel::stringType($aArgs, ['docserverId', 'status', 'fileName', 'fileFormat', 'path', 'fingerPrint']);
         ValidatorModel::arrayType($aArgs, ['data']);
         ValidatorModel::intVal($aArgs, ['fileSize']);
diff --git a/src/app/signatureBook/controllers/SignatureBookController.php b/src/app/signatureBook/controllers/SignatureBookController.php
index 3fafd3b2f201bb78458db90e3386cbf949004ad7..c51f0ee0e2cce0626cd8cc9bb6286b4808232eb0 100644
--- a/src/app/signatureBook/controllers/SignatureBookController.php
+++ b/src/app/signatureBook/controllers/SignatureBookController.php
@@ -117,7 +117,7 @@ class SignatureBookController
         $isVersion = ($data['table'] == 'res_attachments' ? 'false' : 'true');
         $user = UserModel::getByUserId(['userId' => $GLOBALS['userId'], 'select' => ['id']]);
         if (!AttachmentModel::hasAttachmentsSignedForUserById(['id' => $aArgs['resId'], 'isVersion' => $isVersion, 'user_serial_id' => $user['id']])) {
-            $attachment = AttachmentModel::getById(['id' => $aArgs['resId'], 'isVersion' => $isVersion, 'select' => ['res_id_master']]);
+            $attachment = AttachmentModel::getById(['id' => $aArgs['resId'], 'isVersion' => ($data['table'] == 'res_attachments'), 'select' => ['res_id_master']]);
             ListInstanceModel::update([
                 'set'   => ['signatory' => 'false'],
                 'where' => ['res_id = ?', 'item_id = ?', 'difflist_type = ?'],
diff --git a/src/core/lang/lang-en.php b/src/core/lang/lang-en.php
index d54d87e37d09669cd09c1903da1c529ee52b8ea8..4a4cb83e5c85d75af2c507b0e8e65d869053b51b 100644
--- a/src/core/lang/lang-en.php
+++ b/src/core/lang/lang-en.php
@@ -129,6 +129,8 @@ define('_ACCOUNT_LOCKED_UNTIL', 'Too many connections attemps. Account locked un
 define('_MAX_SIZE_UPLOAD_REACHED', 'File maximum size is exceeded');
 define('_PATH_OF_DOCSERVER_UNAPPROACHABLE', 'Inaccessible Docserver path');
 define('_BACK_FROM_VACATION', 'back from vacation');
+define('_DOC_DISPLAYING', 'Displaying document');
+define('_DOC_ADDED', 'Document added');
 
 // LISTS
 define('_DOCUMENTS_LIST_WITH_ATTACHMENTS', 'List with filters and responses');
diff --git a/src/core/lang/lang-fr.php b/src/core/lang/lang-fr.php
index 4c966781852c4fb5ab575f6779b1850746832249..4d2e64cac8438e5e9e1c6ddc5f5562a1e4be9be7 100644
--- a/src/core/lang/lang-fr.php
+++ b/src/core/lang/lang-fr.php
@@ -129,6 +129,8 @@ define('_ACCOUNT_LOCKED_UNTIL', 'Nombre de tentatives de connexion dépassée. C
 define('_MAX_SIZE_UPLOAD_REACHED', 'Taille maximum de fichier dépassée');
 define('_PATH_OF_DOCSERVER_UNAPPROACHABLE', 'Chemin de la zone de stockage inaccessible');
 define('_BACK_FROM_VACATION', 'de retour de son absence');
+define('_DOC_DISPLAYING', 'Visualisation du document');
+define('_DOC_ADDED', 'Document ajouté');
 
 // LISTS
 define('_DOCUMENTS_LIST_WITH_ATTACHMENTS', 'Liste avec filtres et réponses');