diff --git a/src/i18n/de/translation.json b/src/i18n/de/translation.json
index 2885c9292fa201f2bea03e5c866a21e54d28e7c1..f44cb97d291a09ffeffd964352d45b7eb1259190 100644
--- a/src/i18n/de/translation.json
+++ b/src/i18n/de/translation.json
@@ -23,6 +23,11 @@
     "remove-failed-file-button-title": "Fehlgeschlagene Datei entfernen",
     "remove-queued-file-button-title": "Datei aus der Warteschlange entfernen",
     "start-signing-process-button": "Signiervorgang starten",
+    "stop-signing-process-button": "Signiervorgang unterbrechen",
+    "show-preview": "Vorschau anzeigen",
+    "positioning-automatic": "Automatisch",
+    "positioning-manual": "Manuell",
+    "close-preview": "Vorschau schließen",
     "start-signing-process-button-running-title": "Signiervorgang läuft gerade",
     "remove-current-file-button-title": "Aktuellen Signierprozess abbrechen",
     "signed-files-label": "Signierte Dateien",
@@ -35,7 +40,7 @@
     "upload-status-file-text": "({{fileSize}}) wird hochgeladen und verarbeitet...",
     "re-upload-all-button": "Alle erneut in die Warteschlange stellen",
     "re-upload-all-button-title": "Alle fehlgeschlagen Signiervorgänge erneut in die Warteschlange stellen",
-    "signature-placement-label": "Signatur platzieren"
+    "signature-placement-label": "Vorschau"
   },
   "pdf-preview": {
     "first": "Erste",
@@ -47,7 +52,7 @@
     "next-page": "Nächste Seite",
     "last-page": "Letzte Seite",
     "page-count": "Seite {{currentPage}} von {{totalPages}}",
-    "continue": "Weiter im Signaturprozess"
+    "continue": "Platzierung bestätigen"
   },
   "error-summary": "Ein Fehler ist aufgetreten",
   "error-permission-message": "Sie müssen das Recht auf Amtssignaturen besitzen um diese Funktion nutzen zu können!",
diff --git a/src/i18n/en/translation.json b/src/i18n/en/translation.json
index 740ada4cc133678fcb5709f13f0aca5d33a18f07..45aac29d5ec0018d343950ff381a418cf7db669e 100644
--- a/src/i18n/en/translation.json
+++ b/src/i18n/en/translation.json
@@ -23,6 +23,11 @@
     "remove-failed-file-button-title": "Remove failed file",
     "remove-queued-file-button-title": "Remove file from queue",
     "start-signing-process-button": "Start signing process",
+    "stop-signing-process-button": "Stop signing process",
+    "show-preview": "Show preview",
+    "positioning-automatic": "Automatic",
+    "positioning-manual": "Manual",
+    "close-preview": "Close preview",
     "start-signing-process-button-running-title": "Signing process running",
     "remove-current-file-button-title": "Cancel current signing process",
     "signed-files-label": "Signed files",
@@ -35,7 +40,7 @@
     "upload-status-file-text": "({{fileSize}}) is currently uploading and being processed...",
     "re-upload-all-button": "Queue all",
     "re-upload-all-button-title": "Queue all failed signing processes again",
-    "signature-placement-label": "Place signature"
+    "signature-placement-label": "Preview"
   },
   "pdf-preview": {
     "first": "First",
@@ -47,7 +52,7 @@
     "next-page": "Next page",
     "last-page": "Last page",
     "page-count": "Page {{currentPage}} of {{totalPages}}",
-    "continue": "Continue signing process"
+    "continue": "Accept signature placing"
   },
   "error-summary": "An error occurred",
   "error-permission-message": "You need have permissions to use the official signature to use this function!",
diff --git a/src/vpu-pdf-preview.js b/src/vpu-pdf-preview.js
index 50652e9749232d0223a906e77d795f798a2333ff..2d07e9051767bd34a41ebf7658e95c94f09f6793 100644
--- a/src/vpu-pdf-preview.js
+++ b/src/vpu-pdf-preview.js
@@ -24,6 +24,7 @@ export class PdfPreview extends ScopedElementsMixin(VPULitElement) {
         this.isShowPage = false;
         this.isPageLoaded = false;
         this.isPageRenderingInProgress = false;
+        this.isShowPlacement = true;
         this.canvas = null;
         this.fabricCanvas = null;
     }
@@ -45,6 +46,7 @@ export class PdfPreview extends ScopedElementsMixin(VPULitElement) {
             isShowPage: { type: Boolean, attribute: false },
             isPageRenderingInProgress: { type: Boolean, attribute: false },
             isPageLoaded: { type: Boolean, attribute: false },
+            isShowPlacement: { type: Boolean, attribute: false },
         };
     }
 
@@ -101,8 +103,10 @@ export class PdfPreview extends ScopedElementsMixin(VPULitElement) {
      * Initialize and load the PDF
      *
      * @param file
+     * @param isShowPlacement
      */
-    async showPDF(file) {
+    async showPDF(file, isShowPlacement = false) {
+        this.isShowPlacement = isShowPlacement;
         this.isShowPage = true;
         let reader = new FileReader();
 
@@ -190,7 +194,7 @@ export class PdfPreview extends ScopedElementsMixin(VPULitElement) {
         }
     }
 
-    sendContinueEvent() {
+    sendAcceptEvent() {
         // TODO: add coordinates from this.fabricCanvas.item(0);
         const item = this.fabricCanvas.item(0);
         console.log(this.fabricCanvas.item(0));
@@ -200,7 +204,7 @@ export class PdfPreview extends ScopedElementsMixin(VPULitElement) {
             "posY": item.get('translateY'),
             "rotation": item.get('angle')
         };
-        const event = new CustomEvent("vpu-pdf-preview-continue",
+        const event = new CustomEvent("vpu-pdf-preview-accept",
             { "detail": data, bubbles: true, composed: true });
         this.dispatchEvent(event);
     }
@@ -238,6 +242,14 @@ export class PdfPreview extends ScopedElementsMixin(VPULitElement) {
                 left: 0;
                 border: solid 1px black;
             }
+
+            .buttons {
+                display: flex;
+            }
+
+            .buttons > * {
+                margin-right: 3px;
+            }
         `;
     }
 
@@ -252,33 +264,32 @@ export class PdfPreview extends ScopedElementsMixin(VPULitElement) {
                 <vpu-mini-spinner class="${classMap({hidden: this.isPageLoaded})}"></vpu-mini-spinner>
                 <div class="${classMap({hidden: !this.isPageLoaded})}">
                     <div id="pdf-meta">
-                        <div>
-                            <button class="button is-small"
+                        <div class="buttons">
+                            <button class="button"
                                     title="${i18n.t('pdf-preview.first-page')}"
                                     @click="${async () => { await this.showPage(1); } }"
                                     ?disabled="${this.isPageRenderingInProgress}">${i18n.t('pdf-preview.first')}</button>
-                            <button class="button is-small"
+                            <button class="button"
                                     title="${i18n.t('pdf-preview.previous-page')}"
                                     @click="${async () => { if (this.currentPage > 1) await this.showPage(--this.currentPage); } }"
                                     ?disabled="${this.isPageRenderingInProgress}">${i18n.t('pdf-preview.previous')}</button>
                             <input type="number" id="pdf-page-no" min="1" value="${this.currentPage}">
-                            <button class="button is-small"
+                            <button class="button"
                                     title="${i18n.t('pdf-preview.next-page')}"
                                     @click="${async () => { if (this.currentPage < this.totalPages) await this.showPage(++this.currentPage); } }"
                                     ?disabled="${this.isPageRenderingInProgress}">${i18n.t('pdf-preview.next')}</button>
-                            <button class="button is-small"
+                            <button class="button"
                                     title="${i18n.t('pdf-preview.last-page')}"
                                     @click="${async () => { await this.showPage(this.totalPages); } }"
                                     ?disabled="${this.isPageRenderingInProgress}">${i18n.t('pdf-preview.last')}</button>
-                            <button class="button is-primary"
-                                    style="float: right"
-                                    @click="${() => { this.sendContinueEvent(); } }">${i18n.t('pdf-preview.continue')}</button>
+                            <button class="button is-primary ${classMap({hidden: !this.isShowPlacement})}"
+                                    @click="${() => { this.sendAcceptEvent(); } }">${i18n.t('pdf-preview.continue')}</button>
                         </div>
                         ${i18n.t('pdf-preview.page-count', {currentPage: this.currentPage, totalPages: this.totalPages, })}
                     </div>
                     <div id="canvas-wrapper" class="${classMap({hidden: this.isPageRenderingInProgress})}">
                         <canvas id="pdf-canvas"></canvas>
-                        <canvas id="fabric-canvas"></canvas>
+                        <canvas id="fabric-canvas" class="${classMap({hidden: !this.isShowPlacement})}"></canvas>
                     </div>
                     <div class="${classMap({hidden: !this.isPageRenderingInProgress})}"><vpu-mini-spinner id="page-loader"></vpu-mini-spinner></div>
                 </div>
diff --git a/src/vpu-qualified-signature-pdf-upload.js b/src/vpu-qualified-signature-pdf-upload.js
index 0561c44e6f2f337171222ed406cac4e66c06b27e..c049f10cecefadbd56d7feca67ccdb4add0b6324 100644
--- a/src/vpu-qualified-signature-pdf-upload.js
+++ b/src/vpu-qualified-signature-pdf-upload.js
@@ -37,6 +37,9 @@ class QualifiedSignaturePdfUpload extends ScopedElementsMixin(VPUSignatureLitEle
         this.queuedFilesCount = 0;
         this.signingProcessEnabled = false;
         this.signaturePlacementInProgress = false;
+        this.queuedFilesSignaturePlacements = [];
+        this.queuedFilesPlacementModes = [];
+        this.currentPreviewQueueKey = '';
 
         // will be set in function update
         this.signingRequestUrl = "";
@@ -71,6 +74,7 @@ class QualifiedSignaturePdfUpload extends ScopedElementsMixin(VPUSignatureLitEle
             queueBlockEnabled: { type: Boolean, attribute: false },
             currentFile: { type: Object, attribute: false },
             currentFileName: { type: String, attribute: false },
+            signaturePlacementInProgress: { type: Boolean, attribute: false },
             isSignaturePlacement: { type: Boolean, attribute: false },
         };
     }
@@ -105,11 +109,12 @@ class QualifiedSignaturePdfUpload extends ScopedElementsMixin(VPUSignatureLitEle
             return;
         }
 
-        if (!this.signingProcessEnabled || this.externalAuthInProgress ||
-            this.uploadInProgress || this.signaturePlacementInProgress) {
+        if (!this.signingProcessEnabled || this.externalAuthInProgress || this.uploadInProgress) {
             return;
         }
 
+        this.signaturePlacementInProgress = false;
+
         // seems like keys are sorted, not in the order they were added
         const keys = Object.keys(this.queuedFiles);
 
@@ -118,20 +123,17 @@ class QualifiedSignaturePdfUpload extends ScopedElementsMixin(VPUSignatureLitEle
 
         // take the file off the queue
         const file = this.takeFileFromQueue(key);
-
         this.currentFile = file;
 
-        // start signature placement process
-        this.signaturePlacementInProgress = true;
-        await this._("vpu-pdf-preview").showPDF(file);
-
-        // this.uploadInProgress = true;
-        // await this._("#file-upload").uploadFile(file);
-        // this.uploadInProgress = false;
+        const data = this.queuedFilesPlacementModes[key] === "manual" ?
+            this.queuedFilesSignaturePlacements[key] : {};
+        this.uploadInProgress = true;
+        await this._("#file-upload").uploadFile(file, data);
+        this.uploadInProgress = false;
     }
 
     async startUpload(event) {
-        this.signaturePlacementInProgress = false;
+        // this.signaturePlacementInProgress = false;
         const data = event.detail;
         console.log(data);
 
@@ -141,6 +143,25 @@ class QualifiedSignaturePdfUpload extends ScopedElementsMixin(VPUSignatureLitEle
         this.uploadInProgress = false;
     }
 
+    storePDFData(event) {
+        const data = event.detail;
+        console.log(data);
+
+        this.queuedFilesSignaturePlacements[this.currentPreviewQueueKey] = data;
+        this.signaturePlacementInProgress = false;
+    }
+
+    queuePlacementSwitch(key, name) {
+        this.queuedFilesPlacementModes[key] = name;
+        console.log(name);
+
+        if (name === "manual") {
+            this.showPreview(key);
+        } else if (this.currentPreviewQueueKey === key) {
+            this.signaturePlacementInProgress = false;
+        }
+    }
+
     onReceiveIframeMessage(event) {
         const data = event.data;
 
@@ -361,6 +382,25 @@ class QualifiedSignaturePdfUpload extends ScopedElementsMixin(VPUSignatureLitEle
         return this._("#file-upload").queueFile(file);
     }
 
+    /**
+     * Shows the preview
+     *
+     * @param key
+     */
+    async showPreview(key) {
+        if (this.signingProcessEnabled) {
+            return;
+        }
+
+        const file = this._("#file-upload").getQueuedFile(key);
+        this.currentFile = file;
+        this.currentPreviewQueueKey = key;
+        console.log(file);
+        // start signature placement process
+        this.signaturePlacementInProgress = true;
+        await this._("vpu-pdf-preview").showPDF(file, this.queuedFilesPlacementModes[key] === "manual");
+    }
+
     /**
      * Takes a file off of the queue
      *
@@ -404,6 +444,10 @@ class QualifiedSignaturePdfUpload extends ScopedElementsMixin(VPUSignatureLitEle
                 margin-right: 0;
                 min-width: 320px;
             }
+
+            #pdf-preview .file {
+                margin-bottom: 10px;
+            }
  
             h2 {
                 margin-bottom: inherit;
@@ -416,7 +460,7 @@ class QualifiedSignaturePdfUpload extends ScopedElementsMixin(VPUSignatureLitEle
             #iframe {
                 width: 100%;
                 height: 240px;
-                border: none;
+                border: solid 1px black;
                 /* keeps the A-Trust webpage aligned left */
                 max-width: 335px;
             }
@@ -463,10 +507,20 @@ class QualifiedSignaturePdfUpload extends ScopedElementsMixin(VPUSignatureLitEle
     getQueuedFilesHtml() {
         return this.queuedFiles.map((file, id) => html`
             <div class="file">
-                <a class="is-remove"
+                <a title="${i18n.t('qualified-pdf-upload.show-preview')}"
+                    @click="${() => { this.showPreview(id); }}">
+                    ${file.name} (${humanFileSize(file.size)})</a>
+                <button class="button"
+                    ?disabled="${this.signingProcessEnabled}"
                     title="${i18n.t('qualified-pdf-upload.remove-queued-file-button-title')}"
-                    @click="${() => {this.takeFileFromQueue(id);}}">
-                    ${file.name} (${humanFileSize(file.size)}) <vpu-icon name="close" style="font-size: 0.7em"></vpu-icon></a>
+                    @click="${() => { this.takeFileFromQueue(id); }}">
+                    <vpu-icon name="close" style="font-size: 0.7em"></vpu-icon></button>
+                <vpu-textswitch name1="auto"
+                    name2="manual"
+                    value1="${i18n.t('qualified-pdf-upload.positioning-automatic')}"
+                    value2="${i18n.t('qualified-pdf-upload.positioning-manual')}"
+                    ?disabled="${this.signingProcessEnabled}"
+                    @change=${ (e) => this.queuePlacementSwitch(id, e.target.name) }></vpu-textswitch>
             </div>
         `);
     }
@@ -509,7 +563,6 @@ class QualifiedSignaturePdfUpload extends ScopedElementsMixin(VPUSignatureLitEle
     render() {
         return html`
             <div class="${classMap({hidden: !this.isLoggedIn() || !this.hasSignaturePermissions() || this.isLoading()})}">
-                <vpu-textswitch name1="auto" name2="manual" value1="Automatic" value2="Manual" @change=${ (e) => console.log(e.target.name) }></vpu-textswitch>
                 <div class="field">
                     <h2>${i18n.t('qualified-pdf-upload.upload-field-label')}</h2>
                     <div class="control">
@@ -536,16 +589,27 @@ class QualifiedSignaturePdfUpload extends ScopedElementsMixin(VPUSignatureLitEle
                         </div>
                         <div class="control">
                             <button @click="${() => { this.signingProcessEnabled = true; }}"
-                                    ?disabled="${this.signingProcessEnabled || this.queuedFilesCount === 0}"
-                                    title="${this.signingProcessEnabled ? i18n.t('qualified-pdf-upload.start-signing-process-button-running-title') : ""}"
-                                    class="button is-primary">
+                                    ?disabled="${this.queuedFilesCount === 0}"
+                                    class="button is-primary ${classMap({hidden: this.signingProcessEnabled})}">
                                 ${i18n.t('qualified-pdf-upload.start-signing-process-button')}
                             </button>
+                            <button @click="${() => { this.signingProcessEnabled = false; this.externalAuthInProgress = false; }}"
+                                    ?disabled="${this.queuedFilesCount === 0}"
+                                    class="button ${classMap({hidden: !this.signingProcessEnabled})}">
+                                ${i18n.t('qualified-pdf-upload.stop-signing-process-button')}
+                            </button>
                         </div>
                     </div>
                     <div id="pdf-preview" class="field ${classMap({hidden: !this.signaturePlacementInProgress})}">
                         <h2>${i18n.t('qualified-pdf-upload.signature-placement-label')}</h2>
-                        <vpu-pdf-preview lang="${this.lang}" @vpu-pdf-preview-continue="${this.startUpload}"></vpu-pdf-preview>
+                        <div class="file">
+                            <a class="is-remove" title="${i18n.t('qualified-pdf-upload.close-preview')}"
+                                @click="${() => { this.signaturePlacementInProgress = false; }}">
+                                ${this.currentFile.name} (${humanFileSize(this.currentFile !== undefined ? this.currentFile.size : 0)})
+                                <vpu-icon name="close" style="font-size: 0.7em"></vpu-icon>
+                            </a>
+                        </div>
+                        <vpu-pdf-preview lang="${this.lang}" @vpu-pdf-preview-accept="${this.storePDFData}"></vpu-pdf-preview>
                     </div>
                     <div class="field notification is-info ${classMap({hidden: !this.uploadInProgress})}">
                         <vpu-mini-spinner></vpu-mini-spinner>
diff --git a/vendor/file-upload b/vendor/file-upload
index bec521efb3be0441efb1d69252fa559fa5699d0b..08c606bcc34d462cb3ce1dc4876240c220ca6a50 160000
--- a/vendor/file-upload
+++ b/vendor/file-upload
@@ -1 +1 @@
-Subproject commit bec521efb3be0441efb1d69252fa559fa5699d0b
+Subproject commit 08c606bcc34d462cb3ce1dc4876240c220ca6a50