diff --git a/.gitmodules b/.gitmodules
index 3b3c691f7f8342abdff652f1f546c7a4fa0080ab..91f7fe424fe0b8f3b8ee2b9c0e3f36389f47c0dd 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -1,21 +1,3 @@
-[submodule "vendor/auth"]
-	path = vendor/auth
-	url = git@gitlab.tugraz.at:VPU/WebComponents/Auth.git
-[submodule "vendor/common"]
-	path = vendor/common
-	url = git@gitlab.tugraz.at:VPU/WebComponents/Common.git
-[submodule "vendor/notification"]
-	path = vendor/notification
-	url = git@gitlab.tugraz.at:VPU/WebComponents/Notification.git
-[submodule "vendor/language-select"]
-	path = vendor/language-select
-	url = git@gitlab.tugraz.at:VPU/WebComponents/LanguageSelect.git
-[submodule "vendor/person-profile"]
-	path = vendor/person-profile
-	url = git@gitlab.tugraz.at:VPU/WebComponents/PersonProfile.git
-[submodule "vendor/app-shell"]
-	path = vendor/app-shell
-	url = git@gitlab.tugraz.at:VPU/Apps/AppShell.git
-[submodule "vendor/file-handling"]
-	path = vendor/file-handling
-	url = git@gitlab.tugraz.at:VPU/WebComponents/FileHandling.git
+[submodule "vendor/toolkit"]
+	path = vendor/toolkit
+	url = git@gitlab.tugraz.at:dbp/web-components/toolkit.git
diff --git a/package-lock.json b/package-lock.json
index 299c80dd2953d78497e9707b80eee0ab0fb62fd0..038c5425662d8330042c3902b1aa3910b059807b 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -2563,16 +2563,16 @@
       }
     },
     "@open-wc/dedupe-mixin": {
-      "version": "1.2.17",
-      "resolved": "https://registry.npmjs.org/@open-wc/dedupe-mixin/-/dedupe-mixin-1.2.17.tgz",
-      "integrity": "sha512-9A3WohqNxEloJa4y1DuBL5zH12cNRNW1vsrkiaLMnOGuQdhibs2XY1oliudsKpvIeNjDXRVRPUdIIzn65BypCw=="
+      "version": "1.2.18",
+      "resolved": "https://registry.npmjs.org/@open-wc/dedupe-mixin/-/dedupe-mixin-1.2.18.tgz",
+      "integrity": "sha512-1HpblP5edeENi0SKms7B+PKYdxHMBIQpaf0nAgTVsZeYgM9OJ3r9nrK/0MOUBZODAOZ1quvO3wlpuljq2hZPWA=="
     },
     "@open-wc/scoped-elements": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/@open-wc/scoped-elements/-/scoped-elements-1.1.1.tgz",
-      "integrity": "sha512-Fx9bFOA14xGeNFQpSeyp6GmqW1vJyETr1qlem9pDS3hlK/HpWUtoBRAPyo4yexjY+aeSsenUeAYDXzPWQgeWXw==",
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/@open-wc/scoped-elements/-/scoped-elements-1.1.2.tgz",
+      "integrity": "sha512-2aZ8Ibfxhn1+ipBTvL8l84JTzptmGOd5NiLqlojn4QJQnJ/mEQXf9+g/Jj991ga+3nt1R+vRlO4JSrgqkCiyIQ==",
       "requires": {
-        "@open-wc/dedupe-mixin": "^1.2.17",
+        "@open-wc/dedupe-mixin": "^1.2.18",
         "lit-html": "^1.0.0"
       }
     },
@@ -2656,59 +2656,59 @@
       }
     },
     "@sentry/browser": {
-      "version": "5.15.5",
-      "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-5.15.5.tgz",
-      "integrity": "sha512-rqDvjk/EvogfdbZ4TiEpxM/lwpPKmq23z9YKEO4q81+1SwJNua53H60dOk9HpRU8nOJ1g84TMKT2Ov8H7sqDWA==",
+      "version": "5.19.2",
+      "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-5.19.2.tgz",
+      "integrity": "sha512-o6Z532n+0N5ANDzgR9GN+Q6CU7zVlIJvBEW234rBiB+ZZj6XwTLS1dD+JexGr8lCo8PeXI2rypKcj1jUGLVW8w==",
       "requires": {
-        "@sentry/core": "5.15.5",
-        "@sentry/types": "5.15.5",
-        "@sentry/utils": "5.15.5",
+        "@sentry/core": "5.19.2",
+        "@sentry/types": "5.19.2",
+        "@sentry/utils": "5.19.2",
         "tslib": "^1.9.3"
       }
     },
     "@sentry/core": {
-      "version": "5.15.5",
-      "resolved": "https://registry.npmjs.org/@sentry/core/-/core-5.15.5.tgz",
-      "integrity": "sha512-enxBLv5eibBMqcWyr+vApqeix8uqkfn0iGsD3piKvoMXCgKsrfMwlb/qo9Ox0lKr71qIlZVt+9/A2vZohdgnlg==",
-      "requires": {
-        "@sentry/hub": "5.15.5",
-        "@sentry/minimal": "5.15.5",
-        "@sentry/types": "5.15.5",
-        "@sentry/utils": "5.15.5",
+      "version": "5.19.2",
+      "resolved": "https://registry.npmjs.org/@sentry/core/-/core-5.19.2.tgz",
+      "integrity": "sha512-sfbBsVXpA0WYJUichz5IhvqKD8xJUfQvsszrTsUKa7PQAMAboOmuh6bo8KquaVQnAZyZWZU08UduvlSV3tA7tw==",
+      "requires": {
+        "@sentry/hub": "5.19.2",
+        "@sentry/minimal": "5.19.2",
+        "@sentry/types": "5.19.2",
+        "@sentry/utils": "5.19.2",
         "tslib": "^1.9.3"
       }
     },
     "@sentry/hub": {
-      "version": "5.15.5",
-      "resolved": "https://registry.npmjs.org/@sentry/hub/-/hub-5.15.5.tgz",
-      "integrity": "sha512-zX9o49PcNIVMA4BZHe//GkbQ4Jx+nVofqU/Il32/IbwKhcpPlhGX3c1sOVQo4uag3cqd/JuQsk+DML9TKkN0Lw==",
+      "version": "5.19.2",
+      "resolved": "https://registry.npmjs.org/@sentry/hub/-/hub-5.19.2.tgz",
+      "integrity": "sha512-2KkEYX4q9TDCOiaVEo2kQ1W0IXyZxJxZtIjDdFQyes9T4ubYlKHAbvCjTxHSQv37lDO4t7sOIApWG9rlkHzlEA==",
       "requires": {
-        "@sentry/types": "5.15.5",
-        "@sentry/utils": "5.15.5",
+        "@sentry/types": "5.19.2",
+        "@sentry/utils": "5.19.2",
         "tslib": "^1.9.3"
       }
     },
     "@sentry/minimal": {
-      "version": "5.15.5",
-      "resolved": "https://registry.npmjs.org/@sentry/minimal/-/minimal-5.15.5.tgz",
-      "integrity": "sha512-zQkkJ1l9AjmU/Us5IrOTzu7bic4sTPKCatptXvLSTfyKW7N6K9MPIIFeSpZf9o1yM2sRYdK7GV08wS2eCT3JYw==",
+      "version": "5.19.2",
+      "resolved": "https://registry.npmjs.org/@sentry/minimal/-/minimal-5.19.2.tgz",
+      "integrity": "sha512-rApEOkjy+ZmkeqEItgFvUFxe5l+dht9AumuUzq74pWp+HJqxxv9IVTusKppBsE1adjtmyhwK4O3Wr8qyc75xlw==",
       "requires": {
-        "@sentry/hub": "5.15.5",
-        "@sentry/types": "5.15.5",
+        "@sentry/hub": "5.19.2",
+        "@sentry/types": "5.19.2",
         "tslib": "^1.9.3"
       }
     },
     "@sentry/types": {
-      "version": "5.15.5",
-      "resolved": "https://registry.npmjs.org/@sentry/types/-/types-5.15.5.tgz",
-      "integrity": "sha512-F9A5W7ucgQLJUG4LXw1ZIy4iLevrYZzbeZ7GJ09aMlmXH9PqGThm1t5LSZlVpZvUfQ2rYA8NU6BdKJSt7B5LPw=="
+      "version": "5.19.2",
+      "resolved": "https://registry.npmjs.org/@sentry/types/-/types-5.19.2.tgz",
+      "integrity": "sha512-O6zkW8oM1qK5Uma9+B/UMlmlm9/gkw9MooqycWuEhIaKfDBj/yVbwb/UTiJmNkGc5VJQo0v1uXUZZQt6/Xq1GA=="
     },
     "@sentry/utils": {
-      "version": "5.15.5",
-      "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-5.15.5.tgz",
-      "integrity": "sha512-Nl9gl/MGnzSkuKeo3QaefoD/OJrFLB8HmwQ7HUbTXb6E7yyEzNKAQMHXGkwNAjbdYyYbd42iABP6Y5F/h39NtA==",
+      "version": "5.19.2",
+      "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-5.19.2.tgz",
+      "integrity": "sha512-gEPkC0CJwvIWqcTcPSdIzqJkJa9N5vZzUZyBvdu1oiyJu7MfazpJEvj3whfJMysSfXJQxoJ+a1IPrA73VY23VA==",
       "requires": {
-        "@sentry/types": "5.15.5",
+        "@sentry/types": "5.19.2",
         "tslib": "^1.9.3"
       }
     },
@@ -3157,9 +3157,9 @@
       "optional": true
     },
     "aws4": {
-      "version": "1.9.1",
-      "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.9.1.tgz",
-      "integrity": "sha512-wMHVg2EOHaMRxbzgFJ9gtjOOCrI80OHLG14rxi28XwOW8ux6IiEbRCGGGqCtdAIg4FQCbW20k9RsT4y3gJlFug==",
+      "version": "1.10.0",
+      "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.10.0.tgz",
+      "integrity": "sha512-3YDiu347mtVtjpyV3u5kVqQLP242c06zwDOgpeRnybmXlYYsLbtTrUBUm8i8srONt+FWobl5aibnU1030PeeuA==",
       "optional": true
     },
     "axios": {
@@ -3466,6 +3466,7 @@
       "requires": {
         "anymatch": "~3.1.1",
         "braces": "~3.0.2",
+        "fsevents": "~2.1.2",
         "glob-parent": "~5.1.0",
         "is-binary-path": "~2.1.0",
         "is-glob": "~4.0.1",
@@ -4250,9 +4251,9 @@
       "dev": true
     },
     "escodegen": {
-      "version": "1.14.1",
-      "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.1.tgz",
-      "integrity": "sha512-Bmt7NcRySdIfNPfU2ZoXDrrXsG9ZjvDxcAlMfDUgRBjLOWTuIACXPBFJH7Z+cLb40JeQco5toikyc9t9P8E9SQ==",
+      "version": "1.14.3",
+      "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz",
+      "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==",
       "optional": true,
       "requires": {
         "esprima": "^4.0.1",
@@ -4863,6 +4864,13 @@
       "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
       "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
     },
+    "fsevents": {
+      "version": "2.1.3",
+      "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz",
+      "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==",
+      "dev": true,
+      "optional": true
+    },
     "function-bind": {
       "version": "1.1.1",
       "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
@@ -5219,9 +5227,9 @@
       }
     },
     "i18next": {
-      "version": "19.5.1",
-      "resolved": "https://registry.npmjs.org/i18next/-/i18next-19.5.1.tgz",
-      "integrity": "sha512-e6lGMiTyb51F9PPInUTTDg8YbwcWXZYX18svaX2NUUWEphJKP7oG5HMlbZ+K84AXqw4AeBnwRrOlS9ickqcCBg==",
+      "version": "19.6.0",
+      "resolved": "https://registry.npmjs.org/i18next/-/i18next-19.6.0.tgz",
+      "integrity": "sha512-t+pA7iN2WtwS1UQc4PFKHDIO4HYZIl2Wo8UC8gqt70Q1qY50FflAF5vV4IbQEqy4DuK3I9wv3BL1PMvkk238WA==",
       "requires": {
         "@babel/runtime": "^7.10.1"
       }
@@ -5625,9 +5633,9 @@
       }
     },
     "jquery": {
-      "version": "3.5.0",
-      "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.5.0.tgz",
-      "integrity": "sha512-Xb7SVYMvygPxbFMpTFQiHh1J7HClEaThguL15N/Gg37Lri/qKyhRGZYzHRyLH8Stq3Aow0LsHO2O2ci86fCrNQ=="
+      "version": "3.5.1",
+      "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.5.1.tgz",
+      "integrity": "sha512-XwIBPqcMn57FxfT+Go5pzySnm4KWkT1Tv7gjrpT1srtf8Weynl6R273VJ5GjkRb51IzMp5nbaPjJXMWeju2MKg=="
     },
     "js-sha256": {
       "version": "0.9.0",
@@ -5697,9 +5705,9 @@
       },
       "dependencies": {
         "acorn": {
-          "version": "7.2.0",
-          "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.2.0.tgz",
-          "integrity": "sha512-apwXVmYVpQ34m/i71vrApRrRKCWQnZZF1+npOD0WV5xZFfwWOmKGQ2RWlfdy9vWITsenisM8M0Qeq8agcFHNiQ==",
+          "version": "7.3.1",
+          "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.3.1.tgz",
+          "integrity": "sha512-tLc0wSnatxAQHVHUapaHdz72pi9KUyHjq5KyHjGg9Y8Ifdc79pTh2XvI6I1/chZbnM7QtNKzh66ooDogPZSleA==",
           "optional": true
         },
         "parse5": {
@@ -5875,9 +5883,9 @@
       }
     },
     "keycloak-js": {
-      "version": "8.0.2",
-      "resolved": "https://registry.npmjs.org/keycloak-js/-/keycloak-js-8.0.2.tgz",
-      "integrity": "sha512-5Jy5rHx0oURTtj2T6LSMLiqyHzDzPr6ZnaY1fwCBlMsiMx7RVsIBeysYZ5yy29ojH9IMzNJzlZvuLKbEOCmgDQ==",
+      "version": "10.0.2",
+      "resolved": "https://registry.npmjs.org/keycloak-js/-/keycloak-js-10.0.2.tgz",
+      "integrity": "sha512-7nkg4Ob1khHGcNbuK36AMndKUEuIQFpNlWU9ygWs7nSBPCI9VZ8dJjjXfKJHm0ewgcqLFGPIJ6bxxRlfcQ6sLg==",
       "requires": {
         "base64-js": "1.3.1",
         "js-sha256": "0.9.0"
@@ -6183,6 +6191,7 @@
           "requires": {
             "anymatch": "~3.1.1",
             "braces": "~3.0.2",
+            "fsevents": "~2.1.2",
             "glob-parent": "~5.1.0",
             "is-binary-path": "~2.1.0",
             "is-glob": "~4.0.1",
@@ -6402,9 +6411,9 @@
       "dev": true
     },
     "needle": {
-      "version": "2.4.1",
-      "resolved": "https://registry.npmjs.org/needle/-/needle-2.4.1.tgz",
-      "integrity": "sha512-x/gi6ijr4B7fwl6WYL9FwlCvRQKGlUNvnceho8wxkwXqN8jvVmmmATTmZPRRG7b/yC1eode26C2HO9jl78Du9g==",
+      "version": "2.5.0",
+      "resolved": "https://registry.npmjs.org/needle/-/needle-2.5.0.tgz",
+      "integrity": "sha512-o/qITSDR0JCyCKEQ1/1bnUXMmznxabbwi/Y4WwJElf+evwJNFNwIDMCCt5IigFVxgeGBJESLohGtIS9gEzo1fA==",
       "optional": true,
       "requires": {
         "debug": "^3.2.6",
@@ -7295,7 +7304,10 @@
       "version": "2.18.1",
       "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.18.1.tgz",
       "integrity": "sha512-w4X77ADA+WTGlapC8Z6yggdJtODw3SBl6R2LSkA7ZW5MtdkgcB7sfaSD1UWyx8diXbMcGIb0eI9gCx/dyqOgNQ==",
-      "dev": true
+      "dev": true,
+      "requires": {
+        "fsevents": "~2.1.2"
+      }
     },
     "rollup-plugin-consts": {
       "version": "1.0.2",
@@ -7496,9 +7508,9 @@
       "dev": true
     },
     "signal-exit": {
-      "version": "3.0.2",
-      "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
-      "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=",
+      "version": "3.0.3",
+      "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz",
+      "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==",
       "optional": true
     },
     "simple-concat": {
@@ -7885,9 +7897,9 @@
       }
     },
     "tabulator-tables": {
-      "version": "4.7.0",
-      "resolved": "https://registry.npmjs.org/tabulator-tables/-/tabulator-tables-4.7.0.tgz",
-      "integrity": "sha512-FOFn13Vxuv0qJXZkwfEVBvT8fjm+VOdpcryclftCvf8i+8P1hJhKftyBfVtOqlPLWM0B0o8pNHZaV+JKY/IJSA=="
+      "version": "4.7.2",
+      "resolved": "https://registry.npmjs.org/tabulator-tables/-/tabulator-tables-4.7.2.tgz",
+      "integrity": "sha512-UbG3/ylOfTmyJHk6EGpuO6hrTlfsKAmiNRz1hYZwhBzL2y9O3QnykVGhMTBSdaz4Cm38Ed4+Ez848dagzSg1qA=="
     },
     "tar": {
       "version": "4.4.13",
@@ -8065,9 +8077,9 @@
       }
     },
     "tslib": {
-      "version": "1.11.1",
-      "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.11.1.tgz",
-      "integrity": "sha512-aZW88SY8kQbU7gpV19lN24LtXh/yD4ZZg6qieAJDDg+YBsJcSmLGK9QpnUjAKVG/xefmvJGd1WUmfpT/g6AJGA=="
+      "version": "1.13.0",
+      "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz",
+      "integrity": "sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q=="
     },
     "tunnel-agent": {
       "version": "0.6.0",
@@ -8337,37 +8349,38 @@
       "dev": true
     },
     "vpu-app-shell": {
-      "version": "file:vendor/app-shell",
+      "version": "file:vendor/toolkit/packages/app-shell",
       "requires": {
-        "@open-wc/scoped-elements": "^1.0.8",
-        "i18next": "^19.4.1",
-        "lit-element": "^2.2.1",
-        "lit-html": "^1.1.2",
+        "@open-wc/scoped-elements": "^1.1.1",
+        "i18next": "^19.5.3",
+        "lit-element": "^2.3.1",
+        "lit-html": "^1.1.1",
         "universal-router": "^9.0.1"
       }
     },
     "vpu-auth": {
-      "version": "file:vendor/auth",
+      "version": "file:vendor/toolkit/packages/auth",
       "requires": {
-        "@open-wc/scoped-elements": "^1.0.8",
+        "@open-wc/scoped-elements": "^1.1.1",
         "event-target-shim": "^5.0.1",
-        "keycloak-js": "^8.0.0",
-        "lit-element": "^2.1.0"
+        "keycloak-js": "^10.0.2",
+        "lit-element": "^2.3.1"
       }
     },
     "vpu-common": {
-      "version": "file:vendor/common",
+      "version": "file:vendor/toolkit/packages/common",
       "requires": {
-        "@open-wc/scoped-elements": "^1.0.8",
+        "@open-wc/scoped-elements": "^1.1.1",
         "@sentry/browser": "^5.15.5",
-        "i18next": "^19.4.4",
-        "lit-element": "^2.2.1"
+        "i18next": "^19.5.3",
+        "lit-element": "^2.3.1"
       }
     },
     "vpu-file-handling": {
-      "version": "file:vendor/file-handling",
+      "version": "file:vendor/toolkit/packages/file-handling",
       "requires": {
         "@open-wc/scoped-elements": "^1.0.8",
+        "file-saver": "^2.0.2",
         "i18next": "^19.4.2",
         "jszip": "^3.5.0",
         "lit-element": "^2.1.0",
@@ -8378,25 +8391,25 @@
       }
     },
     "vpu-language-select": {
-      "version": "file:vendor/language-select",
+      "version": "file:vendor/toolkit/packages/language-select",
       "requires": {
-        "@open-wc/scoped-elements": "^1.0.8",
-        "lit-element": "^2.2.1"
+        "@open-wc/scoped-elements": "^1.1.1",
+        "lit-element": "^2.3.1"
       }
     },
     "vpu-notification": {
-      "version": "file:vendor/notification",
+      "version": "file:vendor/toolkit/packages/notification",
       "requires": {
-        "@open-wc/scoped-elements": "^1.0.8",
-        "lit-element": "^2.1.0"
+        "@open-wc/scoped-elements": "^1.1.1",
+        "lit-element": "^2.3.1"
       }
     },
     "vpu-person-profile": {
-      "version": "file:vendor/person-profile",
+      "version": "file:vendor/toolkit/packages/person-profile",
       "requires": {
-        "@open-wc/scoped-elements": "^1.0.8",
+        "@open-wc/scoped-elements": "^1.1.1",
         "jquery": "^3.4.1",
-        "lit-element": "^2.2.1"
+        "lit-element": "^2.3.1"
       }
     },
     "w3c-hr-time": {
diff --git a/package.json b/package.json
index 1737e5bed415f41fb753d0f555aee17d0bc7470a..8ae03452cc1396febac911552c1a9bcb4a148d8a 100644
--- a/package.json
+++ b/package.json
@@ -52,13 +52,13 @@
     "source-sans-pro": "^2.45.0",
     "tabulator-tables": "^4.7.0",
     "universal-router": "^9.0.1",
-    "vpu-app-shell": "file:./vendor/app-shell",
-    "vpu-auth": "file:./vendor/auth",
-    "vpu-common": "file:./vendor/common",
-    "vpu-file-handling": "file:./vendor/file-handling",
-    "vpu-language-select": "file:./vendor/language-select",
-    "vpu-notification": "file:./vendor/notification",
-    "vpu-person-profile": "file:./vendor/person-profile",
+    "vpu-app-shell": "file:./vendor/toolkit/packages/app-shell",
+    "vpu-auth": "file:./vendor/toolkit/packages/auth",
+    "vpu-common": "file:./vendor/toolkit/packages/common",
+    "vpu-file-handling": "file:./vendor/toolkit/packages/file-handling",
+    "vpu-language-select": "file:./vendor/toolkit/packages/language-select",
+    "vpu-notification": "file:./vendor/toolkit/packages/notification",
+    "vpu-person-profile": "file:./vendor/toolkit/packages/person-profile",
     "webdav": "^3.3.0"
   },
   "scripts": {
diff --git a/src/vpu-official-signature-pdf-upload.js b/src/vpu-official-signature-pdf-upload.js
index 0c03d4873254a79834906015d3387e756cbd412b..6c389c384c735b9743d71af8a1b1e686ac09075a 100644
--- a/src/vpu-official-signature-pdf-upload.js
+++ b/src/vpu-official-signature-pdf-upload.js
@@ -14,7 +14,7 @@ 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";
+import {FileSink} from "vpu-file-handling";
 import FileSaver from 'file-saver';
 
 const i18n = createI18nInstance();
diff --git a/src/vpu-qualified-signature-pdf-upload.js b/src/vpu-qualified-signature-pdf-upload.js
index b2db1d1060a14efc1b3dd9a73a52c8cccfaa9059..4493b5483e336f90f1e9eeca90b0ea9b8696e6ec 100644
--- a/src/vpu-qualified-signature-pdf-upload.js
+++ b/src/vpu-qualified-signature-pdf-upload.js
@@ -14,7 +14,7 @@ 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";
+import {FileSink} from "vpu-file-handling";
 import FileSaver from 'file-saver';
 
 const i18n = createI18nInstance();
diff --git a/vendor/app-shell b/vendor/app-shell
deleted file mode 160000
index 8b0e12882c057638ae50b3b128f976b2191ba501..0000000000000000000000000000000000000000
--- a/vendor/app-shell
+++ /dev/null
@@ -1 +0,0 @@
-Subproject commit 8b0e12882c057638ae50b3b128f976b2191ba501
diff --git a/vendor/auth b/vendor/auth
deleted file mode 160000
index 3d9165d8e688e0cf85ff8686e6bcd75733808390..0000000000000000000000000000000000000000
--- a/vendor/auth
+++ /dev/null
@@ -1 +0,0 @@
-Subproject commit 3d9165d8e688e0cf85ff8686e6bcd75733808390
diff --git a/vendor/common b/vendor/common
deleted file mode 160000
index fc9eee002e1fc00b97b9093dee3767847ac62e11..0000000000000000000000000000000000000000
--- a/vendor/common
+++ /dev/null
@@ -1 +0,0 @@
-Subproject commit fc9eee002e1fc00b97b9093dee3767847ac62e11
diff --git a/vendor/file-handling b/vendor/file-handling
deleted file mode 160000
index ce42104c56009c70bccf2e602123b25ccd07e521..0000000000000000000000000000000000000000
--- a/vendor/file-handling
+++ /dev/null
@@ -1 +0,0 @@
-Subproject commit ce42104c56009c70bccf2e602123b25ccd07e521
diff --git a/vendor/language-select b/vendor/language-select
deleted file mode 160000
index 56138d4864c82e0b995ccb23e7c0132c085004b6..0000000000000000000000000000000000000000
--- a/vendor/language-select
+++ /dev/null
@@ -1 +0,0 @@
-Subproject commit 56138d4864c82e0b995ccb23e7c0132c085004b6
diff --git a/vendor/notification b/vendor/notification
deleted file mode 160000
index 8ea107fa88d3db299b9f035f4125d31164d696b7..0000000000000000000000000000000000000000
--- a/vendor/notification
+++ /dev/null
@@ -1 +0,0 @@
-Subproject commit 8ea107fa88d3db299b9f035f4125d31164d696b7
diff --git a/vendor/person-profile b/vendor/person-profile
deleted file mode 160000
index 074da7a0072007a9ca18f1ef5736332b60cd8b7f..0000000000000000000000000000000000000000
--- a/vendor/person-profile
+++ /dev/null
@@ -1 +0,0 @@
-Subproject commit 074da7a0072007a9ca18f1ef5736332b60cd8b7f
diff --git a/vendor/toolkit b/vendor/toolkit
new file mode 160000
index 0000000000000000000000000000000000000000..b081907b60a2894e6ef2e28700742b9c67134e1f
--- /dev/null
+++ b/vendor/toolkit
@@ -0,0 +1 @@
+Subproject commit b081907b60a2894e6ef2e28700742b9c67134e1f