diff --git a/packages/qr-code-scanner/src/qr-code-scanner.js b/packages/qr-code-scanner/src/qr-code-scanner.js
index b8b64d87aff69426b9040e83106b45a5424ab57e..f4f135a0e43a408d5bf2e417c0a1f27bb352e5d5 100644
--- a/packages/qr-code-scanner/src/qr-code-scanner.js
+++ b/packages/qr-code-scanner/src/qr-code-scanner.js
@@ -8,7 +8,6 @@ import {classMap} from 'lit-html/directives/class-map.js';
 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';
 
 
@@ -111,17 +110,21 @@ async function createVideoElement(deviceId) {
 
 class QRScanner {
     constructor() {
-        QrScanner.WORKER_PATH = commonUtils.getAssetURL(pkgName, 'qr-scanner-worker.min.js');
         this._engine = null;
         this._canvas = document.createElement("canvas");
+        this._scanner = null;
     }
 
     async scan(canvas, x, y, width, height) {
+        if (this._scanner === null)  {
+            this._scanner = (await import('qr-scanner')).default;
+            this._scanner.WORKER_PATH = commonUtils.getAssetURL(pkgName, 'qr-scanner-worker.min.js');
+        }
         if (this._engine === null) {
-            this._engine = await QrScanner.createQrEngine(QrScanner.WORKER_PATH);
+            this._engine = await this._scanner.createQrEngine(this._scanner.WORKER_PATH);
         }
         try {
-            return {data: await QrScanner.scanImage(canvas, {x: x, y: y, width: width, height: height}, this._engine, this._canvas)};
+            return {data: await this._scanner.scanImage(canvas, {x: x, y: y, width: width, height: height}, this._engine, this._canvas)};
         } catch (e) {
             return null;
         }