diff --git a/src/dbp-official-signature-pdf-upload.js b/src/dbp-official-signature-pdf-upload.js
index 10f6a1fc730d732d62e61c5024e39965d8d633f4..ec542717621a0cc6f06c95831ab0deb9d850a4b3 100644
--- a/src/dbp-official-signature-pdf-upload.js
+++ b/src/dbp-official-signature-pdf-upload.js
@@ -17,6 +17,7 @@ import nextcloudWebDavURL from 'consts:nextcloudWebDavURL';
 import nextcloudName from 'consts:nextcloudName';
 import {FileSink} from "@dbp-toolkit/file-handling";
 import {name as pkgName} from './../package.json';
+import {getPDFSignatureCount} from './utils.js';
 
 const i18n = createI18nInstance();
 
@@ -42,6 +43,7 @@ class OfficialSignaturePdfUpload extends ScopedElementsMixin(DBPSignatureLitElem
         this.withSigBlock = false;
         this.queuedFilesSignaturePlacements = [];
         this.queuedFilesPlacementModes = [];
+        this.queuedFilesMissingPlacement = [];
         this.currentPreviewQueueKey = '';
     }
 
@@ -101,12 +103,28 @@ class OfficialSignaturePdfUpload extends ScopedElementsMixin(DBPSignatureLitElem
         if (!this.signingProcessEnabled || this.uploadInProgress) {
             return;
         }
-
         this.signaturePlacementInProgress = false;
 
-        const key = Object.keys(this.queuedFiles)[0];
+        // Validate that all PDFs with a signature have manual placement
+        this.queuedFilesMissingPlacement = [];
+        for (const [key, file] of Object.entries(this.queuedFiles)) {
+            let isManual = this.queuedFilesPlacementModes[key] === 'manual';
+            if (!isManual) {
+                let sigCount = await getPDFSignatureCount(file);
+                if (sigCount > 0)
+                    this.queuedFilesMissingPlacement[key] = true;
+            }
+        }
+
+        // Some have a signature but are not "manual", stop everything
+        if (Object.keys(this.queuedFilesMissingPlacement).length) {
+            this.signingProcessEnabled = false;
+            this.signingProcessActive = false;
+            return;
+        }
 
         // take the file off the queue
+        const key = Object.keys(this.queuedFiles)[0];
         let file = this.takeFileFromQueue(key);
         this.currentFile = file;
 
@@ -136,7 +154,13 @@ class OfficialSignaturePdfUpload extends ScopedElementsMixin(DBPSignatureLitElem
     }
 
     storePDFData(event) {
-        this.queuedFilesSignaturePlacements[this.currentPreviewQueueKey] = event.detail;
+        let placement = event.detail;
+        let placementMode = 'manual';
+
+        let key = this.currentPreviewQueueKey;
+        this.queuedFilesSignaturePlacements[key] = placement;
+        this.queuedFilesPlacementModes[key] = placementMode;
+        delete this.queuedFilesMissingPlacement[key];
         this.signaturePlacementInProgress = false;
     }
 
@@ -338,6 +362,7 @@ class OfficialSignaturePdfUpload extends ScopedElementsMixin(DBPSignatureLitElem
     clearQueuedFiles() {
         this.queuedFilesSignaturePlacements = [];
         this.queuedFilesPlacementModes = [];
+        this.queuedFilesMissingPlacement = [];
         super.clearQueuedFiles();
     }
 
@@ -492,9 +517,14 @@ class OfficialSignaturePdfUpload extends ScopedElementsMixin(DBPSignatureLitElem
             .file-block div.bottom-line {
                 display: grid;
                 align-items: center;
-                grid-template-columns: auto 190px;
-                grid-gap: 10px;
-                margin-top: 10px;
+                grid-template-columns: auto auto;
+                grid-gap: 6px;
+                margin-top: 6px;
+            }
+
+            .file-block .error-line {
+                margin-top: 6px;
+                color: var(--dbp-override-danger-bg-color);
             }
 
             .file-block.error div.bottom-line {
@@ -558,6 +588,10 @@ class OfficialSignaturePdfUpload extends ScopedElementsMixin(DBPSignatureLitElem
                 border-top: 1px solid black;            
             }
 
+            .placement-missing {
+                border: solid 2px var(--dbp-override-danger-bg-color);
+            }
+
             /* Handling for small displays (like mobile devices) */
             @media (max-width: 680px) {
                 /* Modal preview, upload and external auth */
@@ -601,10 +635,12 @@ class OfficialSignaturePdfUpload extends ScopedElementsMixin(DBPSignatureLitElem
      */
     getQueuedFilesHtml() {
         const ids = Object.keys(this.queuedFiles);
+
         let results = [];
 
         ids.forEach((id) => {
             const file = this.queuedFiles[id];
+            const placementMissing = this.queuedFilesMissingPlacement[id];
 
             results.push(html`
                 <div class="file-block">
@@ -625,12 +661,17 @@ class OfficialSignaturePdfUpload extends ScopedElementsMixin(DBPSignatureLitElem
                         <dbp-textswitch name1="auto"
                             name2="manual"
                             name="${this.queuedFilesPlacementModes[id] || "auto"}"
-                            class="switch"
+                            class="${classMap({'placement-missing': placementMissing, 'switch': true})}"
                             value1="${i18n.t('official-pdf-upload.positioning-automatic')}"
                             value2="${i18n.t('official-pdf-upload.positioning-manual')}"
                             ?disabled="${this.signingProcessEnabled}"
                             @change=${ (e) => this.queuePlacementSwitch(id, e.target.name) }></dbp-textswitch>
                     </div>
+                    <div class="error-line">
+                        ${ this.queuedFilesMissingPlacement[id] ? html`
+                        Bestehende Signatur vorhanden, manuelle Positionierung nötig.
+                        ` : '' }
+                    </div>
                 </div>
             `);
         });