diff --git a/src/vpu-official-signature-pdf-upload.js b/src/vpu-official-signature-pdf-upload.js
index cafa7687f89fc8697914a3b9571f9f964e5b2ceb..fa4415ce66d99c66a11391c13f027850cb5aa79b 100644
--- a/src/vpu-official-signature-pdf-upload.js
+++ b/src/vpu-official-signature-pdf-upload.js
@@ -7,12 +7,14 @@ import {PdfPreview} from "./vpu-pdf-preview";
 import * as commonUtils from 'vpu-common/utils';
 import * as utils from './utils';
 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 {FileSource} from 'vpu-file-handling';
 import JSONLD from "vpu-common/jsonld";
 import {TextSwitch} from './textswitch.js';
+import nextcloudWebAppPasswordURL from 'consts:nextcloudWebAppPasswordURL';
+import nextcloudWebDavURL from 'consts:nextcloudWebDavURL';
+import {FileSink} from "../vendor/file-handling/src/file-sink";
 
 const i18n = createI18nInstance();
 
@@ -44,6 +46,7 @@ class OfficialSignaturePdfUpload extends ScopedElementsMixin(VPUSignatureLitElem
         return {
           'vpu-icon': Icon,
           'vpu-file-source': FileSource,
+          'vpu-file-sink': FileSink,
           'vpu-pdf-preview': PdfPreview,
           'vpu-mini-spinner': MiniSpinner,
           'vpu-button': Button,
@@ -253,34 +256,6 @@ class OfficialSignaturePdfUpload extends ScopedElementsMixin(VPUSignatureLitElem
         this.lang = e.detail.lang;
     }
 
-    /**
-     * Download signed pdf-files as zip
-     */
-    async zipDownloadClickHandler() {
-        // see: https://stuk.github.io/jszip/
-        let JSZip = (await import('jszip/dist/jszip.js')).default;
-        let zip = new JSZip();
-        const that = this;
-        let fileNames = [];
-
-        // add all signed pdf-files
-        this.signedFiles.forEach((file) => {
-            let fileName = file.name;
-
-            // add pseudo-random string on duplicate file name
-            if (fileNames.indexOf(fileName) !== -1) {
-                fileName = utils.baseName(fileName) + "-" + Math.random().toString(36).substring(7) + ".pdf";
-            }
-
-            fileNames.push(fileName);
-            zip.file(fileName, utils.getPDFFileBase64Content(file), {base64: true});
-        });
-
-        let content = await zip.generateAsync({type:"blob"});
-        FileSaver.saveAs(content, "signed-documents.zip");
-        that._("#zip-download-button").stop();
-    }
-
     /**
      * Re-Upload all failed files
      */
@@ -861,6 +836,11 @@ class OfficialSignaturePdfUpload extends ScopedElementsMixin(VPUSignatureLitElem
             <div class="${classMap({hidden: !this.isLoading()})}">
                 <vpu-mini-spinner></vpu-mini-spinner>
             </div>
+            <vpu-file-sink id="file-sink"
+                nextcloud-auth-url="${this.showTestNextcloudFilePicker ? nextcloudWebAppPasswordURL : ""}"
+                nextcloud-web-dav-url="${nextcloudWebDavURL}"
+                lang="${this.lang}"
+                ></vpu-file-sink>
         `;
     }
 }
diff --git a/src/vpu-signature-lit-element.js b/src/vpu-signature-lit-element.js
index b1d85636988d162fcf9b4405cc4531bc4b4197c2..6baa988da7499359eb1b31bf01cd537014d896ea 100644
--- a/src/vpu-signature-lit-element.js
+++ b/src/vpu-signature-lit-element.js
@@ -1,5 +1,7 @@
 import {LitElement} from "lit-element";
 import {EventBus} from 'vpu-common';
+import buildinfo from 'consts:buildinfo';
+import * as utils from "./utils";
 
 export default class VPUSignatureLitElement extends LitElement {
     constructor() {
@@ -12,6 +14,8 @@ export default class VPUSignatureLitElement extends LitElement {
 
         // will be set in function update
         this.fileSourceUrl = "";
+
+        this.showTestNextcloudFilePicker = buildinfo.env === 'local';
     }
 
     /**
@@ -200,4 +204,23 @@ export default class VPUSignatureLitElement extends LitElement {
 
         return organization !== null ? organization.alternateName : "";
     }
+
+    /**
+     * Download signed pdf-files as zip
+     */
+    async zipDownloadClickHandler() {
+        let files = [];
+
+        // add all signed pdf-files
+        this.signedFiles.forEach((file) => {
+            const arr = utils.convertDataURIToBinary(file.contentUrl);
+            const binaryFile = new File([arr], file.name, { type: utils.getDataURIContentType(file.contentUrl) });
+            files.push(binaryFile);
+        });
+
+        const detail = { "files": files, "filename": "signed-documents.zip" };
+        const event = new CustomEvent("vpu-file-sink-download-compressed-files", { "detail": detail });
+        this._("#file-sink").dispatchEvent(event);
+        this._("#zip-download-button").stop();
+    }
 }
diff --git a/vendor/common b/vendor/common
index 2374986a58762ae47ff115b2a6a863878b20d3cd..63b49c3a2eeae312b4a2aeec4cc2f7f0ee12b749 160000
--- a/vendor/common
+++ b/vendor/common
@@ -1 +1 @@
-Subproject commit 2374986a58762ae47ff115b2a6a863878b20d3cd
+Subproject commit 63b49c3a2eeae312b4a2aeec4cc2f7f0ee12b749
diff --git a/vendor/file-handling b/vendor/file-handling
index 39d039c761f484c6028dea6b2e0c064f04662af4..a2dcbdcac25ab88561aec86d6b7863e27deaddd1 160000
--- a/vendor/file-handling
+++ b/vendor/file-handling
@@ -1 +1 @@
-Subproject commit 39d039c761f484c6028dea6b2e0c064f04662af4
+Subproject commit a2dcbdcac25ab88561aec86d6b7863e27deaddd1