diff --git a/src/app/attachment/controllers/AttachmentController.php b/src/app/attachment/controllers/AttachmentController.php
index c04953f2fba262b2edfe56d23e729ff05071f616..a5cadcb11ba43fc797aa350a464d199fdc574f65 100755
--- a/src/app/attachment/controllers/AttachmentController.php
+++ b/src/app/attachment/controllers/AttachmentController.php
@@ -597,10 +597,8 @@ class AttachmentController
         $finfo    = new \finfo(FILEINFO_MIME_TYPE);
         $mimeType = $finfo->buffer($fileContent);
         $pathInfo = pathinfo($pathToDocument);
-
-        $response->write($fileContent);
-        $response = $response->withAddedHeader('Content-Disposition', "attachment; filename=maarch.{$pathInfo['extension']}");
-
+        $data = $request->getQueryParams();
+        
         HistoryController::add([
             'tableName' => 'res_attachments',
             'recordId'  => $args['id'],
@@ -619,7 +617,13 @@ class AttachmentController
             'eventId'   => 'resview'
         ]);
 
-        return $response->withHeader('Content-Type', $mimeType);
+        if ($data['mode'] == 'base64') {
+            return $response->withJson(['encodedDocument' => base64_encode($fileContent), 'extension' => $pathInfo['extension'], 'mimeType' => $mimeType]);
+        } else {
+            $response->write($fileContent);
+            $response = $response->withAddedHeader('Content-Disposition', "attachment; filename=maarch.{$pathInfo['extension']}");
+            return $response->withHeader('Content-Type', $mimeType);
+        }
     }
 
     public function getByChrono(Request $request, Response $response)
diff --git a/src/app/resource/controllers/ResController.php b/src/app/resource/controllers/ResController.php
index 83be6deadeff9d98bab7e52f7ac7e50a6a3dcd25..49e15dd85d5de11ccf664127c79c73495315c5ba 100755
--- a/src/app/resource/controllers/ResController.php
+++ b/src/app/resource/controllers/ResController.php
@@ -607,13 +607,12 @@ class ResController extends ResourceControlController
 
         $finfo    = new \finfo(FILEINFO_MIME_TYPE);
         $mimeType = $finfo->buffer($fileContent);
+        $pathInfo = pathinfo($pathToDocument);
         $data = $request->getQueryParams();
 
         if ($data['mode'] == 'base64') {
-            return $response->withJson(['encodedDocument' => base64_encode($fileContent), 'mimeType' => $mimeType]);
+            return $response->withJson(['encodedDocument' => base64_encode($fileContent), 'extension' => $pathInfo['extension'], 'mimeType' => $mimeType]);
         } else {
-            $pathInfo = pathinfo($pathToDocument);
-
             $response->write($fileContent);
             $response = $response->withAddedHeader('Content-Disposition', "attachment; filename=maarch.{$pathInfo['extension']}");
             return $response->withHeader('Content-Type', $mimeType);
diff --git a/src/frontend/app/signature-book.component.html b/src/frontend/app/signature-book.component.html
index 1763a20ae1e555862b8f39b908bd94ea7fb28fe7..f987025f1d6f9422ec9bae087524bd8cebcfd6bf 100755
--- a/src/frontend/app/signature-book.component.html
+++ b/src/frontend/app/signature-book.component.html
@@ -81,7 +81,7 @@
                 <div *ngIf="leftSelectedThumbnail > 0 && signatureBook.documents[leftSelectedThumbnail].format != 'pdf' && !signatureBook.documents[leftSelectedThumbnail].isConverted" [ngStyle]="{'height': showTopLeftPanel ? '79%' : '96%'}" class="visaNoPdfWarning">
                     <div style="padding-top: 25%;">{{lang.noOverviewAvailable}}<br/><sub>{{lang.pdfVersionFile}} "{{signatureBook.documents[leftSelectedThumbnail].title}}.{{signatureBook.documents[leftSelectedThumbnail].format}}" {{lang.isNotAvailable}}.</sub></div>
                     <div class="visaPjView">
-                        <a title="{{lang.dlAttachment}}" href="../rest/attachments/{{signatureBook.documents[leftSelectedThumbnail].res_id}}/originalContent" target="_blank">
+                        <a title="{{lang.dlAttachment}}" (click)="downloadOriginalFile(signatureBook.documents[leftSelectedThumbnail].res_id)" style="cursor: pointer;">
                             <i class="fa fa-download fa-2x"></i>
                         </a>
                     </div>
@@ -180,7 +180,7 @@
                     <div *ngIf="signatureBook.attachments[rightSelectedThumbnail].format != 'pdf' && signatureBook.attachments[rightSelectedThumbnail].status != 'TMP' && !signatureBook.attachments[rightSelectedThumbnail].isConverted" [ngStyle]="{'height': showTopRightPanel ? '79%' : '96%'}" class="visaNoPdfWarning">
                         <div style="padding-top: 25%;">{{lang.noOverviewAvailable}}<br/><sub>{{lang.pdfVersionFile}} "{{signatureBook.attachments[rightSelectedThumbnail].title}}.{{signatureBook.attachments[rightSelectedThumbnail].format}}" {{lang.isNotAvailable}}.</sub></div>
                         <div class="visaPjView">
-                            <a title="{{lang.dlAttachment}}" href="../rest/attachments/{{signatureBook.attachments[rightSelectedThumbnail].res_id}}/originalContent" target="_blank">
+                            <a title="{{lang.dlAttachment}}" (click)="downloadOriginalFile(signatureBook.attachments[rightSelectedThumbnail].res_id)" style="cursor: pointer;">
                                 <i class="fa fa-download fa-2x"></i>
                             </a>
                         </div>
@@ -260,7 +260,7 @@
                 <span>{{version.relation}}</span>&nbsp;
                 <span>{{lang.object}} : </span>
                 <span>{{version.title}}</span>&nbsp;
-                <a style="color:#135F7F" title="{{lang.dlAttachment}}" href="../rest/attachments/{{version.resId}}/originalContent" target="_blank">
+                <a style="color:#135F7F" title="{{lang.dlAttachment}}" (click)="downloadOriginalFile(version.resId)" style="cursor: pointer;">
                     <i class="fa fa-download fa-2x"></i>
                 </a>
             </div>
diff --git a/src/frontend/app/signature-book.component.ts b/src/frontend/app/signature-book.component.ts
index 83d2989cc340b1189f01c7c0ff9530cfdd294840..e3d059125aac9790f991cb655ccfd17575953cde 100755
--- a/src/frontend/app/signature-book.component.ts
+++ b/src/frontend/app/signature-book.component.ts
@@ -583,6 +583,22 @@ export class SignatureBookComponent implements OnInit {
         this.appVisaWorkflow.saveVisaWorkflow();
     }
 
+    downloadOriginalFile(resId: any) {
+        const downloadLink = document.createElement('a');
+        this.http.get(`../rest/attachments/${resId}/originalContent?mode=base64`).pipe(
+            tap((data: any) => {
+                downloadLink.href = `data:${data.mimeType};base64,${data.encodedDocument}`;
+                downloadLink.setAttribute('download', `${resId}.${data.extension}`);
+                document.body.appendChild(downloadLink);
+                downloadLink.click();
+            }),
+            catchError((err: any) => {
+                this.notify.handleSoftErrors(err);
+                return of(false);
+            })
+        ).subscribe();
+    }
+
     ngOnDestroy() {
         // unsubscribe to ensure no memory leaks
         this.subscription.unsubscribe();