diff --git a/packages/common/index.js b/packages/common/index.js
index 65c879243bfc32d28ea6955acdcf928e76fefbc7..68b571b4ebb257f237a9248035c1d643822a0c83 100644
--- a/packages/common/index.js
+++ b/packages/common/index.js
@@ -11,4 +11,5 @@ export {getIconSVGURL, getIconCSS, Icon};
 export {MiniSpinner};
 export {Button, LoadingButton};
 export {Spinner};
-export {InlineNotification};
\ No newline at end of file
+export {InlineNotification};
+export * from './src/logger.js';
\ No newline at end of file
diff --git a/packages/common/src/logger.js b/packages/common/src/logger.js
new file mode 100644
index 0000000000000000000000000000000000000000..97d5cf5fad371b9a3c3ad00c80ba9a91fc9a750f
--- /dev/null
+++ b/packages/common/src/logger.js
@@ -0,0 +1,11 @@
+class LoggerType {
+    get debug() {
+        if (window.location.hash.includes("debug")) {
+            return console.debug;
+        } else {
+            return () => {};
+        }
+    }
+}
+
+export const Logger = new LoggerType();
\ No newline at end of file
diff --git a/packages/provider/src/adapter-lit-element.js b/packages/provider/src/adapter-lit-element.js
index 20c17c912c7cd83570e136baf5409e9ef52e13de..c0d001e38a2affc14515ff46f3f6bded141bd49c 100644
--- a/packages/provider/src/adapter-lit-element.js
+++ b/packages/provider/src/adapter-lit-element.js
@@ -1,4 +1,5 @@
 import {LitElement} from "lit-element";
+import {Logger} from "@dbp-toolkit/common";
 
 export class AdapterLitElement extends LitElement {
     constructor() {
@@ -23,7 +24,7 @@ export class AdapterLitElement extends LitElement {
         // We need to store our own "last values" because we cannot be sure what the MutationObserver detects
         this.lastProperties = {};
 
-        console.debug('AdapterLitElement(' + this.tagName + ') constructor()');
+        Logger.debug('AdapterLitElement(' + this.tagName + ') constructor()');
     }
 
     getProperty(name) {
@@ -41,7 +42,7 @@ export class AdapterLitElement extends LitElement {
     setProperty(name, value) {
         // TODO: check if lit attribute really present?
         if (typeof value === 'object' && value !== null) {
-            // console.debug("value is object", value);
+            // Logger.debug("value is object", value);
             this.setPropertyByAttributeName(name, value);
         } else {
             this.attributeChangedCallback(name, this.getPropertyByAttributeName(name), value);
@@ -83,7 +84,7 @@ export class AdapterLitElement extends LitElement {
         this.addEventListener('dbp-subscribe', function (e) {
             const name = e.detail.name;
             if (that.hasProperty(name) || that.root) {
-                console.debug('AdapterLitElementProvider(' + that.tagName + ') eventListener("dbp-subscribe",..) name "' + name + '" found.');
+                Logger.debug('AdapterLitElementProvider(' + that.tagName + ') eventListener("dbp-subscribe",..) name "' + name + '" found.');
                 that.callbackStore.push({name: name, callback: e.detail.callback, sender: e.detail.sender});
 
                 e.detail.callback(that.getProperty(name));
@@ -95,12 +96,12 @@ export class AdapterLitElement extends LitElement {
             const name = e.detail.name;
             const sender = e.detail.sender;
             if (that.hasProperty(name) || that.root) {
-                console.debug('AdapterLitElementProvider(' + that.tagName + ') eventListener("dbp-unsubscribe",..) name "' + name + '" found.');
+                Logger.debug('AdapterLitElementProvider(' + that.tagName + ') eventListener("dbp-unsubscribe",..) name "' + name + '" found.');
                 that.callbackStore.forEach(item => {
                     if (item.sender === sender && item.name === name) {
                         const index = that.callbackStore.indexOf(item);
                         that.callbackStore.splice(index, 1);
-                        console.debug('AdapterLitElementProvider(' + that.tagName + ') eventListener for name "' + name + '" removed.');
+                        Logger.debug('AdapterLitElementProvider(' + that.tagName + ') eventListener for name "' + name + '" removed.');
                     }
                 });
 
@@ -114,7 +115,7 @@ export class AdapterLitElement extends LitElement {
             const value = e.detail.value;
 
             if (that.hasProperty(name) || that.root) {
-                console.debug('AdapterLitElementProvider(' + that.tagName + ') eventListener("dbp-set-property",..) name "' + name + '" found.');
+                Logger.debug('AdapterLitElementProvider(' + that.tagName + ') eventListener("dbp-set-property",..) name "' + name + '" found.');
                 that.setProperty(name, value);
 
                 that.callbackStore.forEach(item => {
@@ -139,7 +140,7 @@ export class AdapterLitElement extends LitElement {
                     const value = that.getAttribute(name);
 
                     if (that.hasPropertyChanged(name, value)) {
-                        console.debug('AdapterLitElementProvider (' + that.tagName + ') observed attribute "' + name + '" changed');
+                        Logger.debug('AdapterLitElementProvider (' + that.tagName + ') observed attribute "' + name + '" changed');
                         that.setProperty(name, value);
 
                         that.callbackStore.forEach(item => {
@@ -167,7 +168,7 @@ export class AdapterLitElement extends LitElement {
                 }
 
                 this.setProperty(attrs[i].name, attrs[i].value);
-                console.debug('AdapterLitElementProvider (' + that.tagName + ') found attribute "' + attrs[i].name + '" = "' + attrs[i].value + '"');
+                Logger.debug('AdapterLitElementProvider (' + that.tagName + ') found attribute "' + attrs[i].name + '" = "' + attrs[i].value + '"');
             }
         }
     }
@@ -180,7 +181,7 @@ export class AdapterLitElement extends LitElement {
     }
 
     subscribeProviderFor(element) {
-        console.debug('AdapterLitElement(' + this.tagName + ') subscribeProviderFor( ' + element + ' )');
+        Logger.debug('AdapterLitElement(' + this.tagName + ') subscribeProviderFor( ' + element + ' )');
         const pair = element.trim().split(':');
         const local = pair[0];
         const global = pair[1] || local;
@@ -192,14 +193,14 @@ export class AdapterLitElement extends LitElement {
                 detail: {
                     name: global,
                     callback: (value) => {
-                        console.debug('AdapterLitElement(' + that.tagName + ') sub/Callback ' + global + ' -> ' + local + ' = ' + value);
+                        Logger.debug('AdapterLitElement(' + that.tagName + ') sub/Callback ' + global + ' -> ' + local + ' = ' + value);
 
                         // If value is an object set it directly as property
                         if (typeof value === 'object' && value !== null) {
-                            // console.debug("value is object", value);
+                            // Logger.debug("value is object", value);
                             that.setPropertyByAttributeName(local, value);
                         } else {
-                            // console.debug("local, that.getPropertyByAttributeName(local), value", local, that.getPropertyByAttributeName(local), value);
+                            // Logger.debug("local, that.getPropertyByAttributeName(local), value", local, that.getPropertyByAttributeName(local), value);
                             that.attributeChangedCallback(local, that.getPropertyByAttributeName(local), value);
 
                             // check if an attribute also exists in the tag
@@ -221,7 +222,7 @@ export class AdapterLitElement extends LitElement {
     }
 
     unSubscribeProviderFor(element) {
-        console.debug('AdapterLitElement(' + this.tagName + ') unSubscribeProviderFor( ' + element + ' )');
+        Logger.debug('AdapterLitElement(' + this.tagName + ') unSubscribeProviderFor( ' + element + ' )');
         const pair = element.trim().split(':');
         const global = pair[1] || pair[0];
         const event = new CustomEvent('dbp-unsubscribe',
@@ -246,10 +247,10 @@ export class AdapterLitElement extends LitElement {
     findPropertyName(attributeName) {
         let resultName = attributeName;
         const properties = this.constructor.properties;
-        // console.debug("properties", properties);
+        // Logger.debug("properties", properties);
 
         for (const propertyName in properties) {
-            // console.debug("findPropertyName", `${propertyName}: ${properties[propertyName]}`);
+            // Logger.debug("findPropertyName", `${propertyName}: ${properties[propertyName]}`);
             const attribute = properties[propertyName].attribute;
             if (attribute === attributeName) {
                 resultName = propertyName;
@@ -263,7 +264,7 @@ export class AdapterLitElement extends LitElement {
     attributeChangedCallback(name, oldValue, newValue) {
         switch(name) {
             case 'subscribe':
-                console.debug('AdapterLitElement() attributeChangesCallback( ' + name + ', ' + oldValue + ', ' + newValue + ')');
+                Logger.debug('AdapterLitElement() attributeChangesCallback( ' + name + ', ' + oldValue + ', ' + newValue + ')');
 
                 if (this.subscribe && this.subscribe.length > 0) {
                     if (this.connected) {
@@ -290,14 +291,14 @@ export class AdapterLitElement extends LitElement {
                 // or if newValue is empty but name and oldValue are set
                 // This should prevent 'Uncaught SyntaxError: JSON.parse unexpected end of data at line 1 column 1 of the JSON data'
                 if ((typeof oldValue === 'object' && !oldValue && !newValue) || (!newValue && oldValue && name)) {
-                    // console.debug("attributeChangedCallback ignored", name, oldValue, newValue);
+                    // Logger.debug("attributeChangedCallback ignored", name, oldValue, newValue);
                     break;
                 }
                 super.attributeChangedCallback(name, oldValue, newValue);
         }
 
-        // console.debug("this.lang", this.tagName, name, this.lang);
-        // console.debug("this.entryPointUrl", this.tagName, name, this.entryPointUrl);
+        // Logger.debug("this.lang", this.tagName, name, this.lang);
+        // Logger.debug("this.entryPointUrl", this.tagName, name, this.entryPointUrl);
         // console.trace();
     }
 
@@ -309,7 +310,7 @@ export class AdapterLitElement extends LitElement {
      * @returns {boolean}
      */
     sendSetPropertyEvent(name, value) {
-        // console.debug("dbp-set-property", name, value);
+        // Logger.debug("dbp-set-property", name, value);
 
         const event = new CustomEvent('dbp-set-property', {
             bubbles: true,
diff --git a/packages/provider/src/provider.js b/packages/provider/src/provider.js
index f92c2d51d35bdbb19b2d07cc7aa8198543e36dab..69d4c3a9571e5286109831a8a090bb94fddeeac2 100644
--- a/packages/provider/src/provider.js
+++ b/packages/provider/src/provider.js
@@ -1,3 +1,5 @@
+import {Logger} from "@dbp-toolkit/common";
+
 export class Provider extends HTMLElement {
     constructor() {
         super();
@@ -12,7 +14,7 @@ export class Provider extends HTMLElement {
         // We need to store our own "last values" because we cannot be sure what the MutationObserver detects
         this.lastProperties = {};
 
-        console.debug('Provider constructor()');
+        Logger.debug('Provider constructor()');
     }
 
     getProperty(name) {
@@ -33,14 +35,14 @@ export class Provider extends HTMLElement {
     }
 
     connectedCallback() {
-        console.debug('Provider(' + this.id + ') connectedCallback()');
+        Logger.debug('Provider(' + this.id + ') connectedCallback()');
 
         const that = this;
 
         this.addEventListener('dbp-subscribe', function (e) {
             const name = e.detail.name;
             if (that.hasProperty(name) || that.root) {
-                console.debug('Provider(' + that.id + ') eventListener("dbp-subscribe",..) name "' + name + '" found.');
+                Logger.debug('Provider(' + that.id + ') eventListener("dbp-subscribe",..) name "' + name + '" found.');
                 that.callbackStore.push({name: name, callback: e.detail.callback, sender: e.detail.sender});
 
                 e.detail.callback(that.getProperty(name));
@@ -52,12 +54,12 @@ export class Provider extends HTMLElement {
             const name = e.detail.name;
             const sender = e.detail.sender;
             if (that.hasProperty(name) || that.root) {
-                console.debug('Provider(' + that.id + ') eventListener("dbp-unsubscribe",..) name "' + name + '" found.');
+                Logger.debug('Provider(' + that.id + ') eventListener("dbp-unsubscribe",..) name "' + name + '" found.');
                 that.callbackStore.forEach(item => {
                     if (item.sender === sender && item.name === name) {
                         const index = that.callbackStore.indexOf(item);
                         that.callbackStore.splice(index, 1);
-                        console.debug('Provider(' + that.id + ') eventListener for name "' + name + '" removed.');
+                        Logger.debug('Provider(' + that.id + ') eventListener for name "' + name + '" removed.');
                     }
                 });
 
@@ -71,7 +73,7 @@ export class Provider extends HTMLElement {
             const value = e.detail.value;
 
             if (that.hasProperty(name) || that.root) {
-                console.debug('Provider(' + that.id + ') eventListener("dbp-set-property",..) name "' + name + '" found.');
+                Logger.debug('Provider(' + that.id + ') eventListener("dbp-set-property",..) name "' + name + '" found.');
                 that.setProperty(name, value);
 
                 that.callbackStore.forEach(item => {
@@ -96,7 +98,7 @@ export class Provider extends HTMLElement {
                     const value = that.getAttribute(name);
 
                     if (that.hasPropertyChanged(name, value)) {
-                        console.debug('Provider (' + that.id + ') observed attribute "' + name + '" changed');
+                        Logger.debug('Provider (' + that.id + ') observed attribute "' + name + '" changed');
                         that.setProperty(name, value);
 
                         that.callbackStore.forEach(item => {
@@ -124,7 +126,7 @@ export class Provider extends HTMLElement {
                 }
 
                 this.setProperty(attrs[i].name, attrs[i].value);
-                console.debug('Provider (' + that.id + ') found attribute "' + attrs[i].name + '" = "' + attrs[i].value + '"');
+                Logger.debug('Provider (' + that.id + ') found attribute "' + attrs[i].name + '" = "' + attrs[i].value + '"');
             }
         }
     }