diff --git a/src/vpu-official-signature-pdf-upload.js b/src/vpu-official-signature-pdf-upload.js
index a4046e2d12c77cf8234ca029da716801903f3453..3902efa8d246d1a48103a834a050c883825aabb7 100644
--- a/src/vpu-official-signature-pdf-upload.js
+++ b/src/vpu-official-signature-pdf-upload.js
@@ -6,11 +6,11 @@ import VPUSignatureLitElement from "./vpu-signature-lit-element";
 import {PdfPreview} from "./vpu-pdf-preview";
 import * as commonUtils from 'vpu-common/utils';
 import * as utils from './utils';
-import {Icon, MiniSpinner, Button} from 'vpu-common';
+import {Button, Icon, MiniSpinner} from 'vpu-common';
 import FileSaver from 'file-saver';
 import * as commonStyles from 'vpu-common/styles';
 import {classMap} from 'lit-html/directives/class-map.js';
-import {FileUpload} from 'vpu-file-handling';
+import {FileSource} from 'vpu-file-handling';
 import JSONLD from "vpu-common/jsonld";
 import {TextSwitch} from './textswitch.js';
 
@@ -25,17 +25,12 @@ class OfficialSignaturePdfUpload extends ScopedElementsMixin(VPUSignatureLitElem
         this.signedFilesCount = 0;
         this.errorFiles = [];
         this.errorFilesCount = 0;
-        this.uploadInProgress = false;
-        this.queueingInProgress = false;
         this.uploadStatusFileName = "";
         this.uploadStatusText = "";
         this.currentFile = {};
         this.currentFileName = "";
         this.currentFilePlacementMode = "";
         this.currentFileSignaturePlacement = {};
-        this.queueBlockEnabled = false;
-        this.queuedFiles = [];
-        this.queuedFilesCount = 0;
         this.signingProcessEnabled = false;
         this.signingProcessActive = false;
         this.signaturePlacementInProgress = false;
@@ -43,15 +38,12 @@ class OfficialSignaturePdfUpload extends ScopedElementsMixin(VPUSignatureLitElem
         this.queuedFilesSignaturePlacements = [];
         this.queuedFilesPlacementModes = [];
         this.currentPreviewQueueKey = '';
-
-        // will be set in function update
-        this.signingUrl = "";
     }
 
     static get scopedElements() {
         return {
           'vpu-icon': Icon,
-          'vpu-fileupload': FileUpload,
+          'vpu-file-source': FileSource,
           'vpu-pdf-preview': PdfPreview,
           'vpu-mini-spinner': MiniSpinner,
           'vpu-button': Button,
@@ -69,7 +61,6 @@ class OfficialSignaturePdfUpload extends ScopedElementsMixin(VPUSignatureLitElem
             errorFiles: { type: Array, attribute: false },
             errorFilesCount: { type: Number, attribute: false },
             uploadInProgress: { type: Boolean, attribute: false },
-            queueingInProgress: { type: Boolean, attribute: false },
             uploadStatusFileName: { type: String, attribute: false },
             uploadStatusText: { type: String, attribute: false },
             signingProcessEnabled: { type: Boolean, attribute: false },
@@ -89,14 +80,6 @@ class OfficialSignaturePdfUpload extends ScopedElementsMixin(VPUSignatureLitElem
         setInterval(() => { this.handleQueuedFiles(); }, 1000);
     }
 
-    onQueuedFilesChanged(ev) {
-        const detail = ev.detail;
-        if (!this.queueBlockEnabled && detail.queuedFilesCount)
-            this.queueBlockEnabled = true;
-        this.queuedFiles = detail.queuedFiles;
-        this.queuedFilesCount = detail.queuedFilesCount;
-    }
-
     /**
      * Processes queued files
      */
@@ -134,14 +117,17 @@ class OfficialSignaturePdfUpload extends ScopedElementsMixin(VPUSignatureLitElem
             }
         }
 
-        await this._("#file-upload").uploadFile(file, params);
+        this.uploadStatusText = i18n.t('official-pdf-upload.upload-status-file-text', {
+            fileName: file.name,
+            fileSize: humanFileSize(file.size, false),
+        });
+
+        await this.uploadFile(file, params);
         this.uploadInProgress = false;
     }
 
     storePDFData(event) {
-        const data = event.detail;
-
-        this.queuedFilesSignaturePlacements[this.currentPreviewQueueKey] = data;
+        this.queuedFilesSignaturePlacements[this.currentPreviewQueueKey] = event.detail;
         this.signaturePlacementInProgress = false;
     }
 
@@ -208,28 +194,9 @@ class OfficialSignaturePdfUpload extends ScopedElementsMixin(VPUSignatureLitElem
     /**
      * @param ev
      */
-    onAllUploadStarted(ev) {
-        console.log("Start queuing process!");
-        this.queueingInProgress = true;
-    }
-
-    /**
-     * @param ev
-     */
-    onAllUploadFinished(ev) {
-        console.log("Finished queuing process!");
-        this.queueingInProgress = false;
-    }
-
-    /**
-     * @param ev
-     */
-    onFileUploadStarted(ev) {
-        this.uploadStatusFileName = ev.detail.fileName;
-        this.uploadStatusText = i18n.t('official-pdf-upload.upload-status-file-text', {
-            fileName: ev.detail.fileName,
-            fileSize: humanFileSize(ev.detail.fileSize, false),
-        });
+    onFileSelected(ev) {
+        console.log("File was selected: ev", ev);
+        this.queueFile(ev.detail.file);
     }
 
     addToErrorFiles(file) {
@@ -246,17 +213,17 @@ class OfficialSignaturePdfUpload extends ScopedElementsMixin(VPUSignatureLitElem
     }
 
     /**
-     * @param ev
+     * @param data
      */
-    onFileUploadFinished(ev) {
-        if (ev.detail.status !== 201) {
-            this.addToErrorFiles(ev.detail);
-        } else if (ev.detail.json["@type"] === "http://schema.org/MediaObject" ) {
+    onFileUploadFinished(data) {
+        if (data.status !== 201) {
+            this.addToErrorFiles(data);
+        } else if (data.json["@type"] === "http://schema.org/MediaObject" ) {
             // this doesn't seem to trigger an update() execution
-            this.signedFiles.push(ev.detail.json);
+            this.signedFiles.push(data.json);
             // this triggers the correct update() execution
             this.signedFilesCount++;
-            const entryPoint = ev.detail.json;
+            const entryPoint = data.json;
             this.currentFileName = entryPoint.name;
             this.endSigningProcessIfQueueEmpty();
         }
@@ -271,7 +238,7 @@ class OfficialSignaturePdfUpload extends ScopedElementsMixin(VPUSignatureLitElem
                 case "entryPointUrl":
                     JSONLD.initialize(this.entryPointUrl, (jsonld) => {
                         const apiUrlBase = jsonld.getApiUrlForEntityName("OfficiallySignedDocument");
-                        this.signingUrl = apiUrlBase + "/sign";
+                        this.fileSourceUrl = apiUrlBase + "/sign";
                     });
                     break;
             }
@@ -352,7 +319,7 @@ class OfficialSignaturePdfUpload extends ScopedElementsMixin(VPUSignatureLitElem
      */
     async fileQueueingClickHandler(file, id) {
         this.takeFailedFileFromQueue(id);
-        return this._("#file-upload").queueFile(file);
+        return this.queueFile(file);
     }
 
     /**
@@ -366,7 +333,7 @@ class OfficialSignaturePdfUpload extends ScopedElementsMixin(VPUSignatureLitElem
             return;
         }
 
-        const file = this._("#file-upload").getQueuedFile(key);
+        const file = this.getQueuedFile(key);
         this.currentFile = file;
         this.currentPreviewQueueKey = key;
         console.log(file);
@@ -380,15 +347,6 @@ class OfficialSignaturePdfUpload extends ScopedElementsMixin(VPUSignatureLitElem
             this.queuedFilesSignaturePlacements[key]);
     }
 
-    /**
-     * Takes a file off of the queue
-     *
-     * @param key
-     */
-    takeFileFromQueue(key) {
-        return this._("#file-upload").takeFileFromQueue(key);
-    }
-
     /**
      * Takes a failed file off of the queue
      *
@@ -403,7 +361,7 @@ class OfficialSignaturePdfUpload extends ScopedElementsMixin(VPUSignatureLitElem
     clearQueuedFiles() {
         this.queuedFilesSignaturePlacements = [];
         this.queuedFilesPlacementModes = [];
-        this._("#file-upload").clearQueuedFiles();
+        super.clearQueuedFiles();
     }
 
     clearSignedFiles() {
@@ -768,22 +726,18 @@ class OfficialSignaturePdfUpload extends ScopedElementsMixin(VPUSignatureLitElem
                 <div class="field">
                     <h2>${i18n.t('official-pdf-upload.upload-field-label')}</h2>
                     <div class="control">
-                        <vpu-fileupload id="file-upload"
+                        <vpu-file-source
                             allowed-mime-types="application/pdf"
                             decompress-zip
                             always-send-file
                             deferred
                             lang="${this.lang}"
-                            url="${this.signingUrl}"
+                            url="${this.fileSourceUrl}"
                             ?disabled="${this.signingProcessActive}"
                             text="${i18n.t('official-pdf-upload.upload-area-text')}"
                             button-label="${i18n.t('official-pdf-upload.upload-button-label')}"
-                            @vpu-fileupload-all-start="${this.onAllUploadStarted}"
-                            @vpu-fileupload-file-start="${this.onFileUploadStarted}"
-                            @vpu-fileupload-file-finished="${this.onFileUploadFinished}"
-                            @vpu-fileupload-all-finished="${this.onAllUploadFinished}"
-                            @vpu-fileupload-queued-files-changed="${this.onQueuedFilesChanged}"
-                            ></vpu-fileupload>
+                            @vpu-file-source-file-selected="${this.onFileSelected}"
+                            ></vpu-file-source>
                     </div>
                 </div>
                            <div id="grid-container">
@@ -792,9 +746,6 @@ class OfficialSignaturePdfUpload extends ScopedElementsMixin(VPUSignatureLitElem
                             <!-- Queued files headline and queueing spinner -->
                             <h2 class="${classMap({"is-disabled": this.isUserInterfaceDisabled()})}">
                                 ${i18n.t('official-pdf-upload.queued-files-label')}
-                                <vpu-mini-spinner id="queueing-in-progress-spinner"
-                                                  style="font-size: 0.7em"
-                                                  class="${classMap({hidden: !this.queueingInProgress})}"></vpu-mini-spinner>
                             </h2>
                             <!-- Buttons to start/stop signing process and clear queue -->
                             <div class="control field">
diff --git a/src/vpu-signature-verification.js b/src/vpu-signature-verification.js
index b87219c19c8f0c5711fefee6e894d0932d803e7d..c31dbcb0ff24c3667b5c1d20e9d167ca87fcac2c 100644
--- a/src/vpu-signature-verification.js
+++ b/src/vpu-signature-verification.js
@@ -8,7 +8,7 @@ import * as commonUtils from 'vpu-common/utils';
 import {Icon, MiniSpinner, Button} from 'vpu-common';
 import * as commonStyles from 'vpu-common/styles';
 import {classMap} from 'lit-html/directives/class-map.js';
-import {FileUpload} from 'vpu-file-handling';
+import {FileSource} from 'vpu-file-handling';
 import JSONLD from "vpu-common/jsonld";
 
 const i18n = createI18nInstance();
@@ -22,17 +22,12 @@ class SignatureVerification extends ScopedElementsMixin(VPUSignatureLitElement)
         this.verifiedFilesCount = 0;
         this.errorFiles = [];
         this.errorFilesCount = 0;
-        this.uploadInProgress = false;
-        this.queueingInProgress = false;
         this.uploadStatusFileName = "";
         this.uploadStatusText = "";
         this.currentFile = {};
         this.currentFileName = "";
         this.currentFilePlacementMode = "";
         this.currentFileSignaturePlacement = {};
-        this.queueBlockEnabled = false;
-        this.queuedFiles = [];
-        this.queuedFilesCount = 0;
         this.verificationProcessEnabled = false;
         this.verificationProcessActive = false;
         this.previewInProgress = false;
@@ -45,7 +40,7 @@ class SignatureVerification extends ScopedElementsMixin(VPUSignatureLitElement)
     static get scopedElements() {
         return {
             'vpu-icon': Icon,
-            'vpu-fileupload': FileUpload,
+            'vpu-file-source': FileSource,
             'vpu-pdf-preview': PdfPreview,
             'vpu-mini-spinner': MiniSpinner,
             'vpu-button': Button,
@@ -62,7 +57,6 @@ class SignatureVerification extends ScopedElementsMixin(VPUSignatureLitElement)
             errorFiles: { type: Array, attribute: false },
             errorFilesCount: { type: Number, attribute: false },
             uploadInProgress: { type: Boolean, attribute: false },
-            queueingInProgress: { type: Boolean, attribute: false },
             uploadStatusFileName: { type: String, attribute: false },
             uploadStatusText: { type: String, attribute: false },
             verificationProcessEnabled: { type: Boolean, attribute: false },
@@ -81,14 +75,6 @@ class SignatureVerification extends ScopedElementsMixin(VPUSignatureLitElement)
         setInterval(() => { this.handleQueuedFiles(); }, 1000);
     }
 
-    onQueuedFilesChanged(ev) {
-        const detail = ev.detail;
-        if (!this.queueBlockEnabled && detail.queuedFilesCount)
-            this.queueBlockEnabled = true;
-        this.queuedFiles = detail.queuedFiles;
-        this.queuedFilesCount = detail.queuedFilesCount;
-    }
-
     /**
      * Processes queued files
      */
@@ -115,7 +101,12 @@ class SignatureVerification extends ScopedElementsMixin(VPUSignatureLitElement)
         this.uploadInProgress = true;
         let params = {};
 
-        await this._("#file-upload").uploadFile(file, params);
+        this.uploadStatusText = i18n.t('signature-verification.upload-status-file-text', {
+            fileName: file.name,
+            fileSize: humanFileSize(file.size, false),
+        });
+
+        await this.uploadFile(file, params);
         this.uploadInProgress = false;
     }
 
@@ -167,28 +158,9 @@ class SignatureVerification extends ScopedElementsMixin(VPUSignatureLitElement)
     /**
      * @param ev
      */
-    onAllUploadStarted(ev) {
-        console.log("Start queuing process!");
-        this.queueingInProgress = true;
-    }
-
-    /**
-     * @param ev
-     */
-    onAllUploadFinished(ev) {
-        console.log("Finished queuing process!");
-        this.queueingInProgress = false;
-    }
-
-    /**
-     * @param ev
-     */
-    onFileUploadStarted(ev) {
-        this.uploadStatusFileName = ev.detail.fileName;
-        this.uploadStatusText = i18n.t('signature-verification.upload-status-file-text', {
-            fileName: ev.detail.fileName,
-            fileSize: humanFileSize(ev.detail.fileSize, false),
-        });
+    onFileSelected(ev) {
+        console.log("File was selected: ev", ev);
+        this.queueFile(ev.detail.file);
     }
 
     addToErrorFiles(file) {
@@ -205,17 +177,17 @@ class SignatureVerification extends ScopedElementsMixin(VPUSignatureLitElement)
     }
 
     /**
-     * @param ev
+     * @param data
      */
-    onFileUploadFinished(ev) {
-        if (ev.detail.status !== 201) {
-            this.addToErrorFiles(ev.detail);
-        } else if (ev.detail.json["@type"] === "https://schema.tugraz.at/ElectronicSignatureVerificationReport" ) {
+    onFileUploadFinished(data) {
+        if (data.status !== 201) {
+            this.addToErrorFiles(data);
+        } else if (data.json["@type"] === "https://schema.tugraz.at/ElectronicSignatureVerificationReport" ) {
             // this doesn't seem to trigger an update() execution
-            this.verifiedFiles.push(ev.detail.json);
+            this.verifiedFiles.push(data.json);
             // this triggers the correct update() execution
             this.verifiedFilesCount++;
-            const entryPoint = ev.detail.json;
+            const entryPoint = data.json;
             this.currentFileName = entryPoint.name;
             this.endVerificationProcessIfQueueEmpty();
         }
@@ -230,7 +202,7 @@ class SignatureVerification extends ScopedElementsMixin(VPUSignatureLitElement)
                 case "entryPointUrl":
                     JSONLD.initialize(this.entryPointUrl, (jsonld) => {
                         const apiUrlBase = jsonld.getApiUrlForEntityName("ElectronicSignatureVerificationReport");
-                        this.verificationUrl = apiUrlBase + "/create";
+                        this.fileSourceUrl = apiUrlBase + "/create";
                     });
                     break;
             }
@@ -271,7 +243,7 @@ class SignatureVerification extends ScopedElementsMixin(VPUSignatureLitElement)
      */
     async fileQueueingClickHandler(file, id) {
         this.takeFailedFileFromQueue(id);
-        return this._("#file-upload").queueFile(file);
+        return this.queueFile(file);
     }
 
     /**
@@ -284,7 +256,7 @@ class SignatureVerification extends ScopedElementsMixin(VPUSignatureLitElement)
             return;
         }
 
-        const file = this._("#file-upload").getQueuedFile(key);
+        const file = this.getQueuedFile(key);
         this.currentFile = file;
         this.currentPreviewQueueKey = key;
         console.log(file);
@@ -294,15 +266,6 @@ class SignatureVerification extends ScopedElementsMixin(VPUSignatureLitElement)
         await this._(previewTag).showPDF(file);
     }
 
-    /**
-     * Takes a file off of the queue
-     *
-     * @param key
-     */
-    takeFileFromQueue(key) {
-        return this._("#file-upload").takeFileFromQueue(key);
-    }
-
     /**
      * Takes a failed file off of the queue
      *
@@ -314,10 +277,6 @@ class SignatureVerification extends ScopedElementsMixin(VPUSignatureLitElement)
         return file;
     }
 
-    clearQueuedFiles() {
-        this._("#file-upload").clearQueuedFiles();
-    }
-
     clearVerifiedFiles() {
         this.verifiedFiles = [];
         this.verifiedFilesCount = 0;
@@ -710,22 +669,18 @@ class SignatureVerification extends ScopedElementsMixin(VPUSignatureLitElement)
                 <div class="field">
                     <h2>${i18n.t('signature-verification.upload-field-label')}</h2>
                     <div class="control">
-                        <vpu-fileupload id="file-upload"
+                        <vpu-file-source
                             allowed-mime-types="application/pdf"
                             decompress-zip
                             always-send-file
                             deferred
                             lang="${this.lang}"
-                            url="${this.verificationUrl}"
+                            url="${this.fileSourceUrl}"
                             ?disabled="${this.verificationProcessActive}"
                             text="${i18n.t('signature-verification.upload-area-text')}"
                             button-label="${i18n.t('signature-verification.upload-button-label')}"
-                            @vpu-fileupload-all-start="${this.onAllUploadStarted}"
-                            @vpu-fileupload-file-start="${this.onFileUploadStarted}"
-                            @vpu-fileupload-file-finished="${this.onFileUploadFinished}"
-                            @vpu-fileupload-all-finished="${this.onAllUploadFinished}"
-                            @vpu-fileupload-queued-files-changed="${this.onQueuedFilesChanged}"
-                            ></vpu-fileupload>
+                            @vpu-file-source-file-selected="${this.onFileSelected}"
+                            ></vpu-file-source>
                     </div>
                 </div>
                 <div id="grid-container">
@@ -734,9 +689,6 @@ class SignatureVerification extends ScopedElementsMixin(VPUSignatureLitElement)
                             <!-- Queued files headline and queueing spinner -->
                             <h2 class="${classMap({"is-disabled": this.isUserInterfaceDisabled()})}">
                                 ${i18n.t('signature-verification.queued-files-label')}
-                                <vpu-mini-spinner id="queueing-in-progress-spinner"
-                                                  style="font-size: 0.7em"
-                                                  class="${classMap({hidden: !this.queueingInProgress})}"></vpu-mini-spinner>
                             </h2>
                             <!-- Buttons to start/stop verification process and clear queue -->
                             <div class="control field">