diff --git a/packages/qr-code-scanner/README.md b/packages/qr-code-scanner/README.md
index 4661c2c9facafa2a5a43704d436c7ee78ee934c3..3d898fa7d497eed2e6f376b72a14b85bd96ce38f 100644
--- a/packages/qr-code-scanner/README.md
+++ b/packages/qr-code-scanner/README.md
@@ -28,8 +28,10 @@ The colors are from css vars (`--dbp-success-bg-color` and `--dbp-danger-bg-colo
 a box under the video canvas with the read QR code data
     - example `<dbp-qr-code-scanner show-output></dbp-qr-code-scanner>`
 - `stop-scan` (optional, default: `false`): set to `true` when you don't want to start the QR code reader immediatly
-after loaded. This attribute is also used to stop the QR code reader if you don't need it anymore.
+after loaded. This attribute is also used to stop the QR code reader or if you don't need it anymore.
     - example `<dbp-qr-code-scanner stop-scan></dbp-qr-code-scanner>`
+- `clip-mask` (optional, default: `true`): set to `false` when you don't want to use a QR code reader with a mask for better perfomance
+    - example `<dbp-qr-code-scanner clip-mask></dbp-qr-code-scanner>`
 
 ## Events
 
diff --git a/packages/qr-code-scanner/src/qr-code-scanner.js b/packages/qr-code-scanner/src/qr-code-scanner.js
index 50dfeac26f7b1566cc39ec0f454e1174beeb25b4..cc9fb0853703bc130d0edbe414d92d86b7b35fe1 100644
--- a/packages/qr-code-scanner/src/qr-code-scanner.js
+++ b/packages/qr-code-scanner/src/qr-code-scanner.js
@@ -29,6 +29,8 @@ export class QrCodeScanner extends ScopedElementsMixin(DBPLitElement) {
 
         this.activeCamera = '';
         this.sourceChanged = false;
+
+        this.clipMask = false; //TODO fix clipping mask mobile and set to true
     }
 
     static get scopedElements() {
@@ -53,7 +55,8 @@ export class QrCodeScanner extends ScopedElementsMixin(DBPLitElement) {
             showOutput: { type: Boolean, attribute: 'show-output' },
             stopScan: { type: Boolean, attribute: 'stop-scan' },
             activeCamera: { type: String, attribute: false },
-            sourceChanged: { type: Boolean, attribute: false }
+            sourceChanged: { type: Boolean, attribute: false },
+            slipMask: { type: Boolean, attribute: 'clip-mask' }
         };
     }
 
@@ -248,15 +251,63 @@ export class QrCodeScanner extends ScopedElementsMixin(DBPLitElement) {
                 canvasElement.height = video.videoHeight;
                 canvasElement.width = video.videoWidth;
                 canvas.drawImage(video, 0, 0, canvasElement.width, canvasElement.height);
-                var imageData = canvas.getImageData(0 , 0, canvasElement.width, canvasElement.height); // TODO smaller input size and make an overlay where no scan happens
+
+
+                let maskWidth = 0;
+                let maskHeight = 0;
+                let maskStartX = canvasElement.width;
+                let maskStartY = canvasElement.height;
+
+                let imageData = canvas.getImageData(0 , 0, canvasElement.width, canvasElement.height)
+
+                if (that.clipMask) {
+                    //draw mask
+                    maskWidth = 500;
+                    maskHeight = 500;
+                    maskStartX = canvasElement.width/2 - maskWidth/2;
+                    maskStartY = canvasElement.height/2 - maskHeight/2;
+
+                    canvas.beginPath();
+                    canvas.fillStyle = "#0000006e";
+                    canvas.moveTo(0,0);
+                    canvas.lineTo(0, canvasElement.width);
+                    canvas.lineTo( canvasElement.width, canvasElement.height);
+                    canvas.lineTo( canvasElement.width,0);
+                    canvas.rect(maskStartX, maskStartY, maskWidth, maskHeight);
+                    canvas.fill();
+
+                    imageData = canvas.getImageData(maskStartX , maskStartY, maskWidth, maskHeight);
+                }
+
                 var code = jsQR(imageData.data, imageData.width, imageData.height, {
                     inversionAttempts: "dontInvert",
                 });
                 if (code) {
-                    drawLine(code.location.topLeftCorner, code.location.topRightCorner, color);
+                    let topLeftCorner = code.location.topLeftCorner;
+                    let topRightCorner = code.location.topRightCorner;
+                    let bottomRightCorner = code.location.bottomRightCorner;
+                    let bottomLeftCorner = code.location.bottomLeftCorner;
+
+                    if (that.clipMask) {
+                        topLeftCorner.x += maskStartX;
+                        topLeftCorner.y += maskStartY;
+                        topRightCorner.x += maskStartX;
+                        topRightCorner.y += maskStartY;
+                        bottomRightCorner.x += maskStartX;
+                        bottomRightCorner.y += maskStartY;
+                        bottomLeftCorner.x += maskStartX;
+                        bottomLeftCorner.y += maskStartY;
+                    }
+
+                    drawLine(topLeftCorner, topRightCorner, color);
+                    drawLine(topRightCorner, bottomRightCorner, color);
+                    drawLine(bottomRightCorner, bottomLeftCorner, color);
+                    drawLine(bottomLeftCorner, topLeftCorner, color);
+
+                    /*drawLine(code.location.topLeftCorner, code.location.topRightCorner, color);
                     drawLine(code.location.topRightCorner, code.location.bottomRightCorner, color);
                     drawLine(code.location.bottomRightCorner, code.location.bottomLeftCorner, color);
-                    drawLine(code.location.bottomLeftCorner, code.location.topLeftCorner, color);
+                    drawLine(code.location.bottomLeftCorner, code.location.topLeftCorner, color);*/
                     outputMessage.hidden = true;
                     outputData.parentElement.hidden = false;
                     outputData.innerText = code.data;
@@ -342,8 +393,9 @@ export class QrCodeScanner extends ScopedElementsMixin(DBPLitElement) {
             }
             
             #videoSource:hover {
-                background: calc(100% - 0.4rem) center no-repeat url("https://localhost:8001/dist/local/dbp-common/icons/chevron-down.svg");
+                background: center no-repeat url("https://localhost:8001/dist/local/dbp-common/icons/chevron-down.svg");
                 color: black;
+                background-position-x: calc(100% - 0.4rem);
             }
             
             select:not(.select)#videoSource{