diff --git a/packages/app-shell/rollup.config.js b/packages/app-shell/rollup.config.js
index c80d5f3e0176d89afd88646d43c71172b1b5586e..dbc283c0a8b67f8d65f063c61784b66f95e7baec 100644
--- a/packages/app-shell/rollup.config.js
+++ b/packages/app-shell/rollup.config.js
@@ -6,7 +6,7 @@ import serve from 'rollup-plugin-serve';
 import consts from 'rollup-plugin-consts';
 import del from 'rollup-plugin-delete';
 import json from '@rollup/plugin-json';
-import {getBuildInfo, getPackagePath} from '../../rollup.utils.js';
+import {getBuildInfo, getPackagePath, getDistPath} from '../../rollup.utils.js';
 
 const build = (typeof process.env.BUILD !== 'undefined') ? process.env.BUILD : 'local';
 console.log("build: " + build);
@@ -44,7 +44,7 @@ export default (async () => {
                     {src: 'assets/silent-check-sso.html', dest:'dist'},
                     {src: 'assets/index.html', dest: 'dist'},
                     {src: 'assets/*.json', dest: 'dist'},
-                    {src: await getPackagePath('@dbp-toolkit/common', 'assets/icons/*.svg'), dest: 'dist/local/dbp-common/icons'},
+                    {src: await getPackagePath('@dbp-toolkit/common', 'assets/icons/*.svg'), dest: 'dist/' + await getDistPath('@dbp-toolkit/common', 'icons')},
                 ],
             }),
             (process.env.ROLLUP_WATCH === 'true') ? serve({
diff --git a/packages/auth/rollup.config.js b/packages/auth/rollup.config.js
index 2df4ef5f095586fc65f46a2428255d407f71dd9a..e058d57502f632a0cec40a85a93964464d2d1423 100644
--- a/packages/auth/rollup.config.js
+++ b/packages/auth/rollup.config.js
@@ -7,7 +7,7 @@ import json from '@rollup/plugin-json';
 import serve from 'rollup-plugin-serve';
 import consts from 'rollup-plugin-consts';
 import del from 'rollup-plugin-delete';
-import {getPackagePath} from '../../rollup.utils.js';
+import {getPackagePath, getDistPath} from '../../rollup.utils.js';
 
 const pkg = require('./package.json');
 const build = (typeof process.env.BUILD !== 'undefined') ? process.env.BUILD : 'local';
@@ -44,9 +44,9 @@ export default (async () => {
             copy({
                 targets: [
                     {src: 'assets/index.html', dest:'dist'},
-                    {src: 'assets/silent-check-sso.html', dest: 'dist/local/' + pkg.name},
+                    {src: 'assets/silent-check-sso.html', dest: 'dist/' + await getDistPath(pkg.name)},
                     {src: 'assets/favicon.ico', dest:'dist'},
-                    {src: await getPackagePath('@dbp-toolkit/common', 'assets/icons/*.svg'), dest: 'dist/local/dbp-common/icons'},
+                    {src: await getPackagePath('@dbp-toolkit/common', 'assets/icons/*.svg'), dest: 'dist/' + await getDistPath('@dbp-toolkit/common', 'icons')},
                 ]
             }),
             (process.env.ROLLUP_WATCH === 'true') ? serve({contentBase: 'dist', host: '127.0.0.1', port: 8002}) : false
diff --git a/packages/check-in-place-select/rollup.config.js b/packages/check-in-place-select/rollup.config.js
index 55901af8c0c92b7f0216cf9d906587e598a78e98..5cc25019f59fb431902bdde74ca3b2cc2beab705 100644
--- a/packages/check-in-place-select/rollup.config.js
+++ b/packages/check-in-place-select/rollup.config.js
@@ -8,7 +8,7 @@ import serve from 'rollup-plugin-serve';
 import url from "@rollup/plugin-url"
 import consts from 'rollup-plugin-consts';
 import del from 'rollup-plugin-delete';
-import {getPackagePath} from '../../rollup.utils.js';
+import {getPackagePath, getDistPath} from '../../rollup.utils.js';
 
 const build = (typeof process.env.BUILD !== 'undefined') ? process.env.BUILD : 'local';
 console.log("build: " + build);
@@ -52,7 +52,7 @@ export default (async () => {
             copy({
                 targets: [
                     {src: 'assets/index.html', dest: 'dist'},
-                    {src: await getPackagePath('@dbp-toolkit/common', 'assets/icons/*.svg'), dest: 'dist/local/dbp-common/icons'},
+                    {src: await getPackagePath('@dbp-toolkit/common', 'assets/icons/*.svg'), dest: 'dist/' + await getDistPath('@dbp-toolkit/common', 'icons')},
                 ],
             }),
             (process.env.ROLLUP_WATCH === 'true') ? serve({contentBase: 'dist', host: '127.0.0.1', port: 8002}) : false
diff --git a/packages/common/rollup.config.js b/packages/common/rollup.config.js
index ae08e748e601e741a506db13d7ee10c892f8a0ad..ac6c69f1891f422eef3793a95a2bd915250733f2 100644
--- a/packages/common/rollup.config.js
+++ b/packages/common/rollup.config.js
@@ -6,43 +6,46 @@ import serve from 'rollup-plugin-serve';
 import consts from 'rollup-plugin-consts';
 import del from 'rollup-plugin-delete';
 import json from '@rollup/plugin-json';
+import {getDistPath} from '../../rollup.utils.js';
 
 const pkg = require('./package.json');
 const build = (typeof process.env.BUILD !== 'undefined') ? process.env.BUILD : 'local';
 console.log("build: " + build);
 
-export default {
-    input: (build !='test') ? ['demo.js'] : glob.sync('test/**/*.js'),
-    output: {
-        dir: 'dist',
-        entryFileNames: '[name].js',
-        chunkFileNames: 'shared/[name].[hash].[format].js',
-        format: 'esm',
-        sourcemap: true
-      },
-    onwarn: function (warning, warn) {
-        // ignore chai warnings
-        if (warning.code === 'CIRCULAR_DEPENDENCY') {
-          return;
-        }
-        warn(warning);
-    },
-    plugins: [
-        del({
-            targets: 'dist/*'
-          }),
-        consts({
-            environment: build,
-        }),
-        resolve(),
-        commonjs(),
-        json(),
-        copy({
-            targets: [
-                {src: 'assets/index.html', dest: 'dist'},
-                {src: 'assets/icons/*.svg', dest: 'dist/local/' + pkg.name + '/icons'},
-            ],
-        }),
-        (process.env.ROLLUP_WATCH === 'true') ? serve({contentBase: 'dist', host: '127.0.0.1', port: 8002}) : false
-    ]
-};
+export default (async () => {
+    return {
+        input: (build !='test') ? ['demo.js'] : glob.sync('test/**/*.js'),
+        output: {
+            dir: 'dist',
+            entryFileNames: '[name].js',
+            chunkFileNames: 'shared/[name].[hash].[format].js',
+            format: 'esm',
+            sourcemap: true
+        },
+        onwarn: function (warning, warn) {
+            // ignore chai warnings
+            if (warning.code === 'CIRCULAR_DEPENDENCY') {
+            return;
+            }
+            warn(warning);
+        },
+        plugins: [
+            del({
+                targets: 'dist/*'
+            }),
+            consts({
+                environment: build,
+            }),
+            resolve(),
+            commonjs(),
+            json(),
+            copy({
+                targets: [
+                    {src: 'assets/index.html', dest: 'dist'},
+                    {src: 'assets/icons/*.svg', dest: 'dist/' + await getDistPath(pkg.name, 'icons')},
+                ],
+            }),
+            (process.env.ROLLUP_WATCH === 'true') ? serve({contentBase: 'dist', host: '127.0.0.1', port: 8002}) : false
+        ]
+    };
+})();
\ No newline at end of file
diff --git a/packages/data-table-view/rollup.config.js b/packages/data-table-view/rollup.config.js
index 5c982c2f07cb5abe4aec301a9f83919755812a1b..19c0254c61242ad750ec77f6f25d80cef47dbba1 100644
--- a/packages/data-table-view/rollup.config.js
+++ b/packages/data-table-view/rollup.config.js
@@ -8,7 +8,7 @@ import serve from 'rollup-plugin-serve';
 import urlPlugin from "@rollup/plugin-url";
 import consts from 'rollup-plugin-consts';
 import del from 'rollup-plugin-delete';
-import {getPackagePath} from '../../rollup.utils.js';
+import {getPackagePath, getDistPath} from '../../rollup.utils.js';
 
 const pkg = require('./package.json');
 const build = (typeof process.env.BUILD !== 'undefined') ? process.env.BUILD : 'local';
@@ -57,15 +57,14 @@ export default (async () => {
             copy({
                 targets: [
                     {src: 'assets/index.html', dest: 'dist'},
-                    {src: 'assets/*.css', dest: 'dist/local/' + pkg.name},
-                    {src: 'assets/*.ico', dest: 'dist/local/' + pkg.name},
-                    {src: 'assets/nomodule.js', dest: 'dist/local/' + pkg.name},
-
-                    {src: await getPackagePath('@dbp-toolkit/common', 'assets/icons/*.svg'), dest: 'dist/local/dbp-common/icons'},
-                    {src: await getPackagePath('datatables.net-dt', 'css'), dest: 'dist/local/dbp-data-table-view'},
-                    {src: await getPackagePath('datatables.net-dt', 'images'), dest: 'dist/local/dbp-data-table-view'},
-                    {src: await getPackagePath('datatables.net-responsive-dt', 'css'), dest: 'dist/local/dbp-data-table-view'},
-                    {src: await getPackagePath('datatables.net-buttons-dt', 'css'), dest: 'dist/local/dbp-data-table-view'},
+                    {src: 'assets/*.css', dest: 'dist/' + await getDistPath(pkg.name)},
+                    {src: 'assets/*.ico', dest: 'dist/' + await getDistPath(pkg.name)},
+                    {src: 'assets/nomodule.js', dest: 'dist/' + await getDistPath(pkg.name)},
+                    {src: await getPackagePath('@dbp-toolkit/common', 'assets/icons/*.svg'), dest: 'dist/' + await getDistPath('@dbp-toolkit/common', 'icons')},
+                    {src: await getPackagePath('datatables.net-dt', 'css'), dest: 'dist/' + await getDistPath(pkg.name)},
+                    {src: await getPackagePath('datatables.net-dt', 'images'), dest: 'dist/' + await getDistPath(pkg.name)},
+                    {src: await getPackagePath('datatables.net-responsive-dt', 'css'), dest: 'dist/' + await getDistPath(pkg.name)},
+                    {src: await getPackagePath('datatables.net-buttons-dt', 'css'), dest: 'dist/' + await getDistPath(pkg.name)},
                 ],
             }),
 
diff --git a/packages/file-handling/rollup.config.js b/packages/file-handling/rollup.config.js
index 1c1ee906fd928b6dd10ffab589026084d3a9b6de..9c7238760c7ac0f88583f1ad2bf8c566410db86a 100644
--- a/packages/file-handling/rollup.config.js
+++ b/packages/file-handling/rollup.config.js
@@ -7,7 +7,7 @@ import json from '@rollup/plugin-json';
 import serve from 'rollup-plugin-serve';
 import consts from 'rollup-plugin-consts';
 import del from 'rollup-plugin-delete';
-import {getPackagePath} from '../../rollup.utils.js';
+import {getPackagePath, getDistPath} from '../../rollup.utils.js';
 
 const pkg = require('./package.json');
 const build = (typeof process.env.BUILD !== 'undefined') ? process.env.BUILD : 'local';
@@ -50,8 +50,8 @@ export default (async () => {
                 targets: [
                     {src: 'assets/index.html', dest: 'dist'},
                     {src: 'assets/favicon.ico', dest: 'dist'},
-                    {src: await getPackagePath('@dbp-toolkit/common', 'assets/icons/*.svg'), dest: 'dist/local/dbp-common/icons'},
-                    {src: await getPackagePath('tabulator-tables', 'dist/css'), dest: 'dist/local/' + pkg.name + '/tabulator-tables'},
+                    {src: await getPackagePath('@dbp-toolkit/common', 'assets/icons/*.svg'), dest: 'dist/' + await getDistPath('@dbp-toolkit/common', 'icons')},
+                    {src: await getPackagePath('tabulator-tables', 'dist/css'), dest: 'dist/' + await getDistPath(pkg.name, 'tabulator-tables')},
                 ],
             }),
             (process.env.ROLLUP_WATCH === 'true') ? serve({contentBase: 'dist', host: '127.0.0.1', port: 8002}) : false
diff --git a/packages/knowledge-base-web-page-element-view/rollup.config.js b/packages/knowledge-base-web-page-element-view/rollup.config.js
index 7ac611c52916f2e002399dd907fe7f726adfeeda..bbcc3ac2f26b403c5a8bd4fb5d6b748cf5161eba 100644
--- a/packages/knowledge-base-web-page-element-view/rollup.config.js
+++ b/packages/knowledge-base-web-page-element-view/rollup.config.js
@@ -8,7 +8,7 @@ import serve from 'rollup-plugin-serve';
 import url from "@rollup/plugin-url";
 import consts from 'rollup-plugin-consts';
 import del from 'rollup-plugin-delete';
-import {getPackagePath} from '../../rollup.utils.js';
+import {getPackagePath, getDistPath} from '../../rollup.utils.js';
 
 const build = (typeof process.env.BUILD !== 'undefined') ? process.env.BUILD : 'local';
 console.log("build: " + build);
@@ -50,7 +50,7 @@ export default (async () => {
                 targets: [
                     {src: 'assets/index.html', dest: 'dist'},
                     {src: 'assets/favicon.ico', dest: 'dist'},
-                    {src: await getPackagePath('@dbp-toolkit/common', 'assets/icons/*.svg'), dest: 'dist/local/dbp-common/icons'},
+                    {src: await getPackagePath('@dbp-toolkit/common', 'assets/icons/*.svg'), dest: 'dist/' + await getDistPath('@dbp-toolkit/common', 'icons')},
                 ],
             }),
             (process.env.ROLLUP_WATCH === 'true') ? serve({contentBase: 'dist', host: '127.0.0.1', port: 8002}) : false
diff --git a/packages/matomo/rollup.config.js b/packages/matomo/rollup.config.js
index bd6189f9bea35715adc57232c11191873a4e4cb1..6b588d3eaaee76a764939fee80982c35d39cdd8e 100644
--- a/packages/matomo/rollup.config.js
+++ b/packages/matomo/rollup.config.js
@@ -9,7 +9,7 @@ import url from "@rollup/plugin-url";
 import consts from 'rollup-plugin-consts';
 import del from 'rollup-plugin-delete';
 import emitEJS from 'rollup-plugin-emit-ejs'
-import {getPackagePath} from '../../rollup.utils.js';
+import {getPackagePath, getDistPath} from '../../rollup.utils.js';
 
 const pkg = require('./package.json');
 const build = (typeof process.env.BUILD !== 'undefined') ? process.env.BUILD : 'local';
@@ -98,7 +98,7 @@ export default (async () => {
             copy({
                 targets: [
                     {src: 'assets/index.html', dest: 'dist'},
-                    {src: await getPackagePath('@dbp-toolkit/common', 'assets/icons/*.svg'), dest: 'dist/local/dbp-common/icons'},
+                    {src: await getPackagePath('@dbp-toolkit/common', 'assets/icons/*.svg'), dest: 'dist/' + await getDistPath('@dbp-toolkit/common', 'icons')},
                     {src: 'assets/favicon.ico', dest:'dist'},
                 ],
             }),
diff --git a/packages/person-profile/rollup.config.js b/packages/person-profile/rollup.config.js
index daf2783e2bdc7e2fb1db7aafe6317c255e2ed55f..9f515916d0d326c3a5f4fa893c5ab99f9ea243fc 100644
--- a/packages/person-profile/rollup.config.js
+++ b/packages/person-profile/rollup.config.js
@@ -9,7 +9,7 @@ import serve from 'rollup-plugin-serve';
 import url from "@rollup/plugin-url"
 import consts from 'rollup-plugin-consts';
 import del from 'rollup-plugin-delete';
-import {getPackagePath} from '../../rollup.utils.js';
+import {getPackagePath, getDistPath} from '../../rollup.utils.js';
 
 const build = (typeof process.env.BUILD !== 'undefined') ? process.env.BUILD : 'local';
 console.log("build: " + build);
@@ -53,7 +53,7 @@ export default (async () => {
             copy({
                 targets: [
                     {src: 'assets/index.html', dest: 'dist'},
-                    {src: await getPackagePath('@dbp-toolkit/common', 'assets/icons/*.svg'), dest: 'dist/local/dbp-common/icons'},
+                    {src: await getPackagePath('@dbp-toolkit/common', 'assets/icons/*.svg'), dest: 'dist/' + await getDistPath('@dbp-toolkit/common', 'icons')},
                 ],
             }),
             (process.env.ROLLUP_WATCH === 'true') ? serve({contentBase: 'dist', host: '127.0.0.1', port: 8002}) : false
diff --git a/packages/person-select/rollup.config.js b/packages/person-select/rollup.config.js
index 44e546e8fa37b0738d24ae6af464bdd7f9b551c0..bc047601cf1c27bb92bbdb224b990bb7b66ce4a9 100644
--- a/packages/person-select/rollup.config.js
+++ b/packages/person-select/rollup.config.js
@@ -8,7 +8,7 @@ import serve from 'rollup-plugin-serve';
 import url from "@rollup/plugin-url"
 import consts from 'rollup-plugin-consts';
 import del from 'rollup-plugin-delete';
-import {getPackagePath} from '../../rollup.utils.js';
+import {getPackagePath, getDistPath} from '../../rollup.utils.js';
 
 const build = (typeof process.env.BUILD !== 'undefined') ? process.env.BUILD : 'local';
 console.log("build: " + build);
@@ -52,7 +52,7 @@ export default (async () => {
             copy({
                 targets: [
                     {src: 'assets/index.html', dest: 'dist'},
-                    {src: await getPackagePath('@dbp-toolkit/common', 'assets/icons/*.svg'), dest: 'dist/local/dbp-common/icons'},
+                    {src: await getPackagePath('@dbp-toolkit/common', 'assets/icons/*.svg'), dest: 'dist/' + await getDistPath('@dbp-toolkit/common', 'icons')},
                 ],
             }),
             (process.env.ROLLUP_WATCH === 'true') ? serve({contentBase: 'dist', host: '127.0.0.1', port: 8002}) : false
diff --git a/packages/qr-code-scanner/rollup.config.js b/packages/qr-code-scanner/rollup.config.js
index fd798ea78ca7203657a4276dbc05bdd7562f509c..ee91e9fa000e12151ab57d83314d13f1b8d7ea91 100644
--- a/packages/qr-code-scanner/rollup.config.js
+++ b/packages/qr-code-scanner/rollup.config.js
@@ -10,8 +10,9 @@ import consts from 'rollup-plugin-consts';
 import del from 'rollup-plugin-delete';
 import fs from "fs";
 import selfsigned from "selfsigned";
-import {getPackagePath} from "../../rollup.utils";
+import {getPackagePath, getDistPath} from "../../rollup.utils";
 
+const pkg = require('./package.json');
 const build = (typeof process.env.BUILD !== 'undefined') ? process.env.BUILD : 'local';
 console.log("build: " + build);
 
@@ -71,8 +72,8 @@ export default (async () => {
                 targets: [
                     {src: 'assets/index.html', dest: 'dist'},
                     {src: 'assets/favicon.ico', dest: 'dist'},
-                    {src: await getPackagePath('@dbp-toolkit/common', 'assets/icons/*.svg'), dest: 'dist/local/dbp-common/icons'},
-                    {src: await getPackagePath('qr-scanner', 'qr-scanner-worker.*'), dest: 'dist/local/qr-code-scanner'},
+                    {src: await getPackagePath('@dbp-toolkit/common', 'assets/icons/*.svg'), dest: 'dist/' + await getDistPath('@dbp-toolkit/common', 'icons')},
+                    {src: await getPackagePath('qr-scanner', 'qr-scanner-worker.*'), dest: 'dist/' + await getDistPath(pkg.name)},
                 ]
             }),
             (process.env.ROLLUP_WATCH === 'true') ? serve({
diff --git a/packages/qr-code-scanner/src/qr-code-scanner.js b/packages/qr-code-scanner/src/qr-code-scanner.js
index 9a575119e44161365b18f1070b8c6b0877e1fc75..b8b64d87aff69426b9040e83106b45a5424ab57e 100644
--- a/packages/qr-code-scanner/src/qr-code-scanner.js
+++ b/packages/qr-code-scanner/src/qr-code-scanner.js
@@ -9,6 +9,7 @@ import * as commonUtils from '@dbp-toolkit/common/utils';
 import {getIconSVGURL} from '@dbp-toolkit/common';
 import {Mutex} from 'async-mutex';
 import QrScanner from 'qr-scanner';
+import {name as pkgName} from './../package.json';
 
 
 /**
@@ -110,7 +111,7 @@ async function createVideoElement(deviceId) {
 
 class QRScanner {
     constructor() {
-        QrScanner.WORKER_PATH = commonUtils.getAssetURL('qr-code-scanner', 'qr-scanner-worker.min.js');
+        QrScanner.WORKER_PATH = commonUtils.getAssetURL(pkgName, 'qr-scanner-worker.min.js');
         this._engine = null;
         this._canvas = document.createElement("canvas");
     }
diff --git a/rollup.utils.js b/rollup.utils.js
index b3b2aa19971c785df9080a46180460cc2ac2a7d5..5784bad1cbca700a3cb73a9e4f026a0ffb5374ef 100644
--- a/rollup.utils.js
+++ b/rollup.utils.js
@@ -19,6 +19,14 @@ export function getBuildInfo(build) {
     }
 }
 
+export async function getDistPath(packageName, assetPath) {
+    if (assetPath === undefined)
+        assetPath = '';
+    // make sure the package exists to avoid typos
+    await getPackagePath(packageName, '');
+    return path.join('local', packageName, assetPath);
+}
+
 export async function getPackagePath(packageName, assetPath) {
     const r = resolve();
     const resolved = await r.resolveId(packageName);