diff --git a/packages/common/test/unit.js b/packages/common/test/unit.js
index 87323cc3bc6138a49f6e4043cc4ab8fe5cac45fc..4a93104230dfe4c60cbd6c0c8b6b5dd74cb48083 100644
--- a/packages/common/test/unit.js
+++ b/packages/common/test/unit.js
@@ -1,6 +1,5 @@
 import {expect, assert} from 'chai';
 import * as utils from '../utils';
-import * as tugUtils from '../tug-utils';
 import * as styles from '../styles';
 import '../jsonld.js';
 
@@ -35,10 +34,6 @@ suite('utils', () => {
         assert.isTrue(res);
     });
 
-    test('getAPiUrl', () => {
-        assert(tugUtils.getAPiUrl().startsWith("http"));
-    });
-
     test('getAssetURL', () => {
         // Backwards compat
         assert.equal(new URL(utils.getAssetURL("foo/bar")).pathname, "/foo/bar");
diff --git a/packages/common/tug-utils.js b/packages/common/tug-utils.js
deleted file mode 100644
index e537bc4fa7204a806007d0c1a0e9d8037e741895..0000000000000000000000000000000000000000
--- a/packages/common/tug-utils.js
+++ /dev/null
@@ -1,25 +0,0 @@
-import environment from 'consts:environment';
-
-export const getAPiUrl = (path = "") => {
-    let apiBaseUrl = '';
-
-    switch(environment) {
-        case "development":
-            apiBaseUrl = 'https://mw-dev.tugraz.at';
-            break;
-        case "demo":
-            apiBaseUrl = 'https://api-demo.tugraz.at';
-            break;
-        case "production":
-            apiBaseUrl = 'https://api.tugraz.at';
-            break;
-        case "bs":
-            apiBaseUrl = 'http://bs-local.com:8000';
-            break;
-        case "local":
-        default:
-            apiBaseUrl = 'http://127.0.0.1:8000';
-    }
-
-    return apiBaseUrl + path;
-};
diff --git a/toolkit-showcase/assets/dbp-toolkit-showcase.html.ejs b/toolkit-showcase/assets/dbp-toolkit-showcase.html.ejs
index 3ec8d00f78b36bc352dd29034784dd46a44472a8..2085a3c17d50eb7f0ad131c839fcb3e37420b99d 100644
--- a/toolkit-showcase/assets/dbp-toolkit-showcase.html.ejs
+++ b/toolkit-showcase/assets/dbp-toolkit-showcase.html.ejs
@@ -54,7 +54,7 @@
 
 <body>
 <dbp-provider id="root"
-              lang="de" entry-point-url="<%= entryPointURL %>"
+              lang="en" entry-point-url="<%= entryPointURL %>"
               nextcloud-web-app-password-url="<%= nextcloudWebAppPasswordURL %>"
               nextcloud-webdav-url="<%= nextcloudWebDavURL %>"
               nextcloud-name="<%= nextcloudName %>"
diff --git a/toolkit-showcase/rollup.config.js b/toolkit-showcase/rollup.config.js
index 73f47a9d64b4d8dbe57db35851980cf176e31b52..5004c26f36efd488aae915d59ba56a47067c9d47 100644
--- a/toolkit-showcase/rollup.config.js
+++ b/toolkit-showcase/rollup.config.js
@@ -9,8 +9,6 @@ import json from '@rollup/plugin-json';
 import replace from "@rollup/plugin-replace";
 import serve from 'rollup-plugin-serve';
 import urlPlugin from "@rollup/plugin-url";
-// TODO: remove consts if "environment" isn't needed because "getAPiUrl" is removed
-import consts from 'rollup-plugin-consts';
 import license from 'rollup-plugin-license';
 import del from 'rollup-plugin-delete';
 import md from 'rollup-plugin-md';
@@ -165,10 +163,6 @@ export default (async () => {return {
         del({
           targets: 'dist/*'
         }),
-        // TODO: remove consts if "environment" isn't needed because "getAPiUrl" is removed
-        consts({
-          environment: build,
-        }),
         emitEJS({
           src: 'assets',
           include: ['**/*.ejs', '**/.*.ejs'],
diff --git a/toolkit-showcase/src/dbp-check-in-place-select-demo-activity.js b/toolkit-showcase/src/dbp-check-in-place-select-demo-activity.js
index 764d89bef44463f5e61fc20c65fd4cc3e4abfad9..1c4d95195e2bdfe76eb0896b5753d7cc86ebc6a6 100644
--- a/toolkit-showcase/src/dbp-check-in-place-select-demo-activity.js
+++ b/toolkit-showcase/src/dbp-check-in-place-select-demo-activity.js
@@ -10,6 +10,12 @@ import * as demoStyles from "./styles";
 import {AdapterLitElement} from "@dbp-toolkit/provider/src/adapter-lit-element";
 
 class DbpActivityNameDemoActivity extends ScopedElementsMixin(AdapterLitElement) {
+    constructor() {
+        super();
+        this.lang = 'en';
+        this.entryPointUrl = '';
+    }
+
     static get scopedElements() {
         return {
             'dbp-check-in-place-select-demo': CheckInPlaceSelectDemo,
@@ -18,6 +24,8 @@ class DbpActivityNameDemoActivity extends ScopedElementsMixin(AdapterLitElement)
 
     static get properties() {
         return this.getProperties({
+            lang: { type: String },
+            entryPointUrl: { type: String, attribute: 'entry-point-url' },
         });
     }
 
@@ -48,9 +56,9 @@ class DbpActivityNameDemoActivity extends ScopedElementsMixin(AdapterLitElement)
     }
 
     render() {
-        return html`                
+        return html`
                 ${unsafeHTML(readme)}
-                <dbp-check-in-place-select-demo id="demo" lang="en" no-auth></dbp-check-in-place-select-demo>
+                <dbp-check-in-place-select-demo id="demo" lang="${this.lang}" entry-point-url="${this.entryPointUrl}" no-auth></dbp-check-in-place-select-demo>
         `;
     }
 }
diff --git a/toolkit-showcase/src/dbp-common-demo-activity.js b/toolkit-showcase/src/dbp-common-demo-activity.js
index 7214dab344aeb346c082f68ac1d342ddae0e8998..91cc10a5ba25ce3911e537bc82aa428c0f534fee 100644
--- a/toolkit-showcase/src/dbp-common-demo-activity.js
+++ b/toolkit-showcase/src/dbp-common-demo-activity.js
@@ -10,6 +10,12 @@ import * as demoStyles from "./styles";
 import {AdapterLitElement} from "@dbp-toolkit/provider/src/adapter-lit-element";
 
 class DbpCommonDemoActivity extends ScopedElementsMixin(AdapterLitElement) {
+    constructor() {
+        super();
+        this.lang = 'en';
+        this.entryPointUrl = '';
+    }
+
     static get scopedElements() {
         return {
             'dbp-common-demo': DbpCommonDemo,
@@ -18,6 +24,8 @@ class DbpCommonDemoActivity extends ScopedElementsMixin(AdapterLitElement) {
 
     static get properties() {
         return this.getProperties({
+            lang: { type: String },
+            entryPointUrl: { type: String, attribute: 'entry-point-url' },
         });
     }
 
@@ -49,9 +57,8 @@ class DbpCommonDemoActivity extends ScopedElementsMixin(AdapterLitElement) {
 
     render() {
         return html`
-
                 ${unsafeHTML(readme)}
-                <dbp-common-demo id="demo" lang="en"></dbp-common-demo>
+                <dbp-common-demo id="demo" lang="${this.lang}" entry-point-url="${this.entryPointUrl}"></dbp-common-demo>
         `;
     }
 }
diff --git a/toolkit-showcase/src/dbp-data-table-view-demo-activity.js b/toolkit-showcase/src/dbp-data-table-view-demo-activity.js
index 5bff3ed1b59f9da9fc78dce5195cb08b751be3cd..dee1780f846a1ba6a34976a94401abe81bc65657 100644
--- a/toolkit-showcase/src/dbp-data-table-view-demo-activity.js
+++ b/toolkit-showcase/src/dbp-data-table-view-demo-activity.js
@@ -10,6 +10,12 @@ import * as demoStyles from "./styles";
 import {AdapterLitElement} from "@dbp-toolkit/provider/src/adapter-lit-element";
 
 class DbpActivityNameDemoActivity extends ScopedElementsMixin(AdapterLitElement) { //TODO
+    constructor() {
+        super();
+        this.lang = 'en';
+        this.entryPointUrl = '';
+    }
+
     static get scopedElements() {
         return {
             'dbp-data-table-view-demo': DataTableViewDemo,
@@ -18,6 +24,8 @@ class DbpActivityNameDemoActivity extends ScopedElementsMixin(AdapterLitElement)
 
     static get properties() {
         return this.getProperties({
+            lang: { type: String },
+            entryPointUrl: { type: String, attribute: 'entry-point-url' },
         });
     }
 
@@ -51,7 +59,7 @@ class DbpActivityNameDemoActivity extends ScopedElementsMixin(AdapterLitElement)
         return html`
 
                 ${unsafeHTML(readme)}
-                <dbp-data-table-view-demo id="demo" lang="en" no-auth></dbp-data-table-view-demo>
+                <dbp-data-table-view-demo id="demo" lang="${this.lang}" entry-point-url="${this.entryPointUrl}" no-auth></dbp-data-table-view-demo>
         `;
     }
 }
diff --git a/toolkit-showcase/src/dbp-demo-template.js b/toolkit-showcase/src/dbp-demo-template.js
index fc80b919841b3a0d7b04e587eb4f38ab85c9d14d..f7ae5bd03f5f591bfd824e38af1a68871c61db43 100644
--- a/toolkit-showcase/src/dbp-demo-template.js
+++ b/toolkit-showcase/src/dbp-demo-template.js
@@ -10,6 +10,12 @@ import * as demoStyles from "./styles";
 import {AdapterLitElement} from "@dbp-toolkit/provider/src/adapter-lit-element";
 
 class DbpActivityNameDemoActivity extends ScopedElementsMixin(AdapterLitElement) { //TODO
+    constructor() {
+        super();
+        this.lang = 'en';
+        this.entryPointUrl = '';
+    }
+
     static get scopedElements() {
         return {
             // TODO
@@ -19,6 +25,8 @@ class DbpActivityNameDemoActivity extends ScopedElementsMixin(AdapterLitElement)
 
     static get properties() {
         return this.getProperties({
+            lang: { type: String },
+            entryPointUrl: { type: String, attribute: 'entry-point-url' },
         });
     }
 
@@ -53,7 +61,7 @@ class DbpActivityNameDemoActivity extends ScopedElementsMixin(AdapterLitElement)
              <!--
                 TODO
                 ${unsafeHTML(readme)}
-                <dbp-class-name-demo id="demo" lang="en"></dbp-class-name-demo>
+                <dbp-class-name-demo id="demo" lang="${this.lang}" entry-point-url="${this.entryPointUrl}"></dbp-class-name-demo>
             -->
         `;
     }
diff --git a/toolkit-showcase/src/dbp-file-handling-demo-activity.js b/toolkit-showcase/src/dbp-file-handling-demo-activity.js
index ab4657e67faf6e126c907be94329c758636a9ca7..fbc6d984fa2206de7c784a95580dbd7cd33169bc 100644
--- a/toolkit-showcase/src/dbp-file-handling-demo-activity.js
+++ b/toolkit-showcase/src/dbp-file-handling-demo-activity.js
@@ -10,6 +10,12 @@ import * as demoStyles from "./styles";
 import {AdapterLitElement} from "@dbp-toolkit/provider/src/adapter-lit-element";
 
 class DbpFileHandlingDemoActivity extends ScopedElementsMixin(AdapterLitElement) {
+    constructor() {
+        super();
+        this.lang = 'en';
+        this.entryPointUrl = '';
+    }
+
     static get scopedElements() {
         return {
             'dbp-file-handling-demo': FileSourceDemo,
@@ -18,6 +24,8 @@ class DbpFileHandlingDemoActivity extends ScopedElementsMixin(AdapterLitElement)
 
     static get properties() {
         return this.getProperties({
+            lang: { type: String },
+            entryPointUrl: { type: String, attribute: 'entry-point-url' },
         });
     }
 
@@ -50,7 +58,7 @@ class DbpFileHandlingDemoActivity extends ScopedElementsMixin(AdapterLitElement)
     render() {
         return html`
                 ${unsafeHTML(readme)}
-                <dbp-file-handling-demo id="demo" lang="en"></dbp-file-handling-demo>
+                <dbp-file-handling-demo id="demo" lang="${this.lang}" entry-point-url="${this.entryPointUrl}"></dbp-file-handling-demo>
         `;
     }
 }
diff --git a/toolkit-showcase/src/dbp-knowledge-base-web-page-element-view-demo-activity.js b/toolkit-showcase/src/dbp-knowledge-base-web-page-element-view-demo-activity.js
index 419766d0be4890f4198243bfbb6d4e35a53fd1ac..548c8ec694b21569b95f291542a1496e081913f4 100644
--- a/toolkit-showcase/src/dbp-knowledge-base-web-page-element-view-demo-activity.js
+++ b/toolkit-showcase/src/dbp-knowledge-base-web-page-element-view-demo-activity.js
@@ -10,6 +10,12 @@ import * as demoStyles from "./styles";
 import {AdapterLitElement} from "@dbp-toolkit/provider/src/adapter-lit-element";
 
 class KnowledgeBaseWebPageElementViewDemoActivity extends ScopedElementsMixin(AdapterLitElement) {
+    constructor() {
+        super();
+        this.lang = 'en';
+        this.entryPointUrl = '';
+    }
+
     static get scopedElements() {
         return {
             'dbp-knowledge-base-web-page-element-view-demo': KnowledgeBaseWebPageElementViewDemo,
@@ -18,6 +24,8 @@ class KnowledgeBaseWebPageElementViewDemoActivity extends ScopedElementsMixin(Ad
 
     static get properties() {
         return this.getProperties({
+            lang: { type: String },
+            entryPointUrl: { type: String, attribute: 'entry-point-url' },
         });
     }
 
@@ -50,7 +58,7 @@ class KnowledgeBaseWebPageElementViewDemoActivity extends ScopedElementsMixin(Ad
     render() {
         return html`
                 ${unsafeHTML(readme)}
-                <dbp-knowledge-base-web-page-element-view-demo id="demo" lang="en" no-auth></dbp-knowledge-base-web-page-element-view-demo>
+                <dbp-knowledge-base-web-page-element-view-demo id="demo" lang="${this.lang}" entry-point-url="${this.entryPointUrl}" no-auth></dbp-knowledge-base-web-page-element-view-demo>
         `;
     }
 }
diff --git a/toolkit-showcase/src/dbp-language-select-demo-activity.js b/toolkit-showcase/src/dbp-language-select-demo-activity.js
index f9fb39ec1896cab6a0a651ee94fa56dbc29772ba..3d84c6c92b647488e072fe625e8473207ca65d1c 100644
--- a/toolkit-showcase/src/dbp-language-select-demo-activity.js
+++ b/toolkit-showcase/src/dbp-language-select-demo-activity.js
@@ -10,6 +10,12 @@ import * as demoStyles from "./styles";
 import {AdapterLitElement} from "@dbp-toolkit/provider/src/adapter-lit-element";
 
 class DbpLanguageSelectDemoActivity extends ScopedElementsMixin(AdapterLitElement) {
+    constructor() {
+        super();
+        this.lang = 'en';
+        this.entryPointUrl = '';
+    }
+
     static get scopedElements() {
         return {
             'dbp-language-select-demo': LanguageSelectDemo,
@@ -18,6 +24,8 @@ class DbpLanguageSelectDemoActivity extends ScopedElementsMixin(AdapterLitElemen
 
     static get properties() {
         return this.getProperties({
+            lang: { type: String },
+            entryPointUrl: { type: String, attribute: 'entry-point-url' },
         });
     }
 
@@ -51,7 +59,7 @@ class DbpLanguageSelectDemoActivity extends ScopedElementsMixin(AdapterLitElemen
         return html`
 
                 ${unsafeHTML(readme)}
-                <dbp-language-select-demo id="demo" lang="en"></dbp-language-select-demo>
+                <dbp-language-select-demo id="demo" lang="${this.lang}" entry-point-url="${this.entryPointUrl}"></dbp-language-select-demo>
             
         `;
     }
diff --git a/toolkit-showcase/src/dbp-matomo-demo-activity.js b/toolkit-showcase/src/dbp-matomo-demo-activity.js
index 72a3b9ffd8b6ac1d856fa0053f61874fa41fe7fe..e1a49d9895b897b1f97818238da05e65676dc7f2 100644
--- a/toolkit-showcase/src/dbp-matomo-demo-activity.js
+++ b/toolkit-showcase/src/dbp-matomo-demo-activity.js
@@ -10,6 +10,12 @@ import * as demoStyles from "./styles";
 import {AdapterLitElement} from "@dbp-toolkit/provider/src/adapter-lit-element";
 
 class DbpMatomoDemoActivity extends ScopedElementsMixin(AdapterLitElement) {
+    constructor() {
+        super();
+        this.lang = 'en';
+        this.entryPointUrl = '';
+    }
+
     static get scopedElements() {
         return {
             'dbp-matomo-demo': MatomoDemo,
@@ -18,6 +24,8 @@ class DbpMatomoDemoActivity extends ScopedElementsMixin(AdapterLitElement) {
 
     static get properties() {
         return this.getProperties({
+            lang: { type: String },
+            entryPointUrl: { type: String, attribute: 'entry-point-url' },
         });
     }
 
@@ -50,7 +58,7 @@ class DbpMatomoDemoActivity extends ScopedElementsMixin(AdapterLitElement) {
     render() {
         return html`
                ${unsafeHTML(readme)} 
-                <dbp-matomo-demo id="demo" lang="en" no-auth></dbp-matomo-demo>
+                <dbp-matomo-demo id="demo" lang="${this.lang}" entry-point-url="${this.entryPointUrl}" no-auth></dbp-matomo-demo>
         `;
     }
 }
diff --git a/toolkit-showcase/src/dbp-notification-demo-activity.js b/toolkit-showcase/src/dbp-notification-demo-activity.js
index a07261bcb7554d49d29e6db7df425f7e34240ada..b919037022c8e427b2a50b8ac5ccea069eaf9b98 100644
--- a/toolkit-showcase/src/dbp-notification-demo-activity.js
+++ b/toolkit-showcase/src/dbp-notification-demo-activity.js
@@ -10,6 +10,12 @@ import * as demoStyles from "./styles";
 import {AdapterLitElement} from "@dbp-toolkit/provider/src/adapter-lit-element";
 
 class DbpNotificationDemoActivity extends ScopedElementsMixin(AdapterLitElement) {
+    constructor() {
+        super();
+        this.lang = 'en';
+        this.entryPointUrl = '';
+    }
+
     static get scopedElements() {
         return {
             'dbp-notification-demo': NotificationDemo,
@@ -18,6 +24,8 @@ class DbpNotificationDemoActivity extends ScopedElementsMixin(AdapterLitElement)
 
     static get properties() {
         return this.getProperties({
+            lang: { type: String },
+            entryPointUrl: { type: String, attribute: 'entry-point-url' },
         });
     }
 
@@ -50,7 +58,7 @@ class DbpNotificationDemoActivity extends ScopedElementsMixin(AdapterLitElement)
     render() {
         return html`
                 ${unsafeHTML(readme)}
-                <dbp-notification-demo id="demo" lang="en"></dbp-notification-demo>
+                <dbp-notification-demo id="demo" lang="${this.lang}" entry-point-url="${this.entryPointUrl}"></dbp-notification-demo>
         `;
     }
 }
diff --git a/toolkit-showcase/src/dbp-person-profile-demo-activity.js b/toolkit-showcase/src/dbp-person-profile-demo-activity.js
index 9721483184335339d7c8aba2ab86da131aa40f09..6ee3a02f6ffd651a111f66e6a30f2e4cf7ace92c 100644
--- a/toolkit-showcase/src/dbp-person-profile-demo-activity.js
+++ b/toolkit-showcase/src/dbp-person-profile-demo-activity.js
@@ -10,6 +10,12 @@ import * as demoStyles from "./styles";
 import {AdapterLitElement} from "@dbp-toolkit/provider/src/adapter-lit-element";
 
 class DbpPersonProfileDemoActivity extends ScopedElementsMixin(AdapterLitElement) {
+    constructor() {
+        super();
+        this.lang = 'en';
+        this.entryPointUrl = '';
+    }
+
     static get scopedElements() {
         return {
             'dbp-person-profile-demo': PersonProfileDemo,
@@ -18,6 +24,8 @@ class DbpPersonProfileDemoActivity extends ScopedElementsMixin(AdapterLitElement
 
     static get properties() {
         return this.getProperties({
+            lang: { type: String },
+            entryPointUrl: { type: String, attribute: 'entry-point-url' },
         });
     }
 
@@ -50,7 +58,7 @@ class DbpPersonProfileDemoActivity extends ScopedElementsMixin(AdapterLitElement
     render() {
         return html`
                 ${unsafeHTML(readme)}
-                <dbp-person-profile-demo id="demo" lang="en" no-auth></dbp-person-profile-demo>
+                <dbp-person-profile-demo id="demo" lang="${this.lang}" entry-point-url="${this.entryPointUrl}" no-auth></dbp-person-profile-demo>
 
         `;
     }
diff --git a/toolkit-showcase/src/dbp-person-select-demo-activity.js b/toolkit-showcase/src/dbp-person-select-demo-activity.js
index 57d147f60a5de0afd242ad87eaf9eb75330eaac6..f2cdd7dbc06a290076224498aee9b7237426f30d 100644
--- a/toolkit-showcase/src/dbp-person-select-demo-activity.js
+++ b/toolkit-showcase/src/dbp-person-select-demo-activity.js
@@ -10,6 +10,12 @@ import * as demoStyles from "./styles";
 import {AdapterLitElement} from "@dbp-toolkit/provider/src/adapter-lit-element";
 
 class DbpPersonSelectDemoActivity extends ScopedElementsMixin(AdapterLitElement) {
+    constructor() {
+        super();
+        this.lang = 'en';
+        this.entryPointUrl = '';
+    }
+
     static get scopedElements() {
         return {
           'dbp-person-select-demo': PersonSelectDemo,
@@ -18,6 +24,8 @@ class DbpPersonSelectDemoActivity extends ScopedElementsMixin(AdapterLitElement)
 
     static get properties() {
         return this.getProperties({
+            lang: { type: String },
+            entryPointUrl: { type: String, attribute: 'entry-point-url' },
         });
     }
 
@@ -50,7 +58,7 @@ class DbpPersonSelectDemoActivity extends ScopedElementsMixin(AdapterLitElement)
     render() {
         return html`
             ${unsafeHTML(readme)}
-            <dbp-person-select-demo id="demo" lang="en" no-auth></dbp-person-select-demo>
+            <dbp-person-select-demo id="demo" lang="${this.lang}" entry-point-url="${this.entryPointUrl}" no-auth></dbp-person-select-demo>
         `;
     }
 }
diff --git a/toolkit-showcase/src/dbp-qr-code-scanner-demo-activity.js b/toolkit-showcase/src/dbp-qr-code-scanner-demo-activity.js
index 45f4684920ca5cc469e7c08d5e4d13465d56cfff..73d679fab59855e0ad1ca1f0297b30745a9eeabd 100644
--- a/toolkit-showcase/src/dbp-qr-code-scanner-demo-activity.js
+++ b/toolkit-showcase/src/dbp-qr-code-scanner-demo-activity.js
@@ -10,6 +10,12 @@ import * as demoStyles from './styles';
 import {AdapterLitElement} from "@dbp-toolkit/provider/src/adapter-lit-element";
 
 class DbpQrCodeScannerDemoActivity extends ScopedElementsMixin(AdapterLitElement) {
+    constructor() {
+        super();
+        this.lang = 'en';
+        this.entryPointUrl = '';
+    }
+
     static get scopedElements() {
         return {
             'dbp-qr-code-scanner-demo': QrCodeScannerDemo,
@@ -18,6 +24,8 @@ class DbpQrCodeScannerDemoActivity extends ScopedElementsMixin(AdapterLitElement
 
     static get properties() {
         return this.getProperties({
+            lang: { type: String },
+            entryPointUrl: { type: String, attribute: 'entry-point-url' },
         });
     }
 
@@ -47,7 +55,7 @@ class DbpQrCodeScannerDemoActivity extends ScopedElementsMixin(AdapterLitElement
     render() {
         return html`
             ${unsafeHTML(readme)}
-            <dbp-qr-code-scanner-demo id="scanner-demo" lang="en"></dbp-qr-code-scanner-demo>
+            <dbp-qr-code-scanner-demo id="scanner-demo" lang="${this.lang}" entry-point-url="${this.entryPointUrl}"></dbp-qr-code-scanner-demo>
         `;
     }
 }