diff --git a/i18next-scanner.config.js b/i18next-scanner.config.js
index 168d6b7d74ce9f18e0747f971f2a43b63b3ea77d..d2338d3ed316fa8d93ed8f6cb1c2acfdb9040ad6 100644
--- a/i18next-scanner.config.js
+++ b/i18next-scanner.config.js
@@ -8,7 +8,7 @@ module.exports = {
         removeUnusedKeys: true,
         lngs: ['en','de'],
         func: {
-            list: ['i18n.t']
+            list: ['i18n.t', '_i18n.t']
         },
         resource: {
             loadPath: 'src/i18n/{{lng}}/{{ns}}.json',
diff --git a/src/dbp-official-signature-pdf-upload.js b/src/dbp-official-signature-pdf-upload.js
index 852b6920dd1cc7a93a36b82528d73c87a4bd9e44..71ae200bfc5bb2073dda5e2be672e6adfd8bcc23 100644
--- a/src/dbp-official-signature-pdf-upload.js
+++ b/src/dbp-official-signature-pdf-upload.js
@@ -1,4 +1,4 @@
-import {createI18nInstance} from './i18n.js';
+import {createInstance} from './i18n.js';
 import {humanFileSize} from '@dbp-toolkit/common/i18next.js';
 import {css, html} from 'lit-element';
 import {ScopedElementsMixin} from '@open-wc/scoped-elements';
@@ -21,12 +21,11 @@ import {Activity} from './activity.js';
 import {PdfAnnotationView} from "./dbp-pdf-annotation-view";
 import * as SignatureStyles from './styles';
 
-const i18n = createI18nInstance();
-
 class OfficialSignaturePdfUpload extends ScopedElementsMixin(DBPSignatureLitElement) {
     constructor() {
         super();
-        this.lang = i18n.language;
+        this._i18n = createInstance();
+        this.lang = this._i18n.language;
         this.entryPointUrl = '';
         this.nextcloudWebAppPasswordURL = "";
         this.nextcloudWebDavURL = "";
@@ -133,6 +132,7 @@ class OfficialSignaturePdfUpload extends ScopedElementsMixin(DBPSignatureLitElem
      * Processes queued files
      */
     async handleQueuedFiles() {
+        const i18n = this._i18n;
         this.endSigningProcessIfQueueEmpty();
         if (this.queuedFilesCount === 0) {
             // reset signingProcessEnabled button
@@ -203,6 +203,7 @@ class OfficialSignaturePdfUpload extends ScopedElementsMixin(DBPSignatureLitElem
      * @param event
      */
     onReceiveBeforeUnload(event) {
+        const i18n = this._i18n;
         // we don't need to stop if there are no signed files
         if (this.signedFilesCount === 0) {
             return;
@@ -263,7 +264,7 @@ class OfficialSignaturePdfUpload extends ScopedElementsMixin(DBPSignatureLitElem
         changedProperties.forEach((oldValue, propName) => {
             switch (propName) {
                 case "lang":
-                    i18n.changeLanguage(this.lang);
+                    this._i18n.changeLanguage(this.lang);
                     break;
                 case "entryPointUrl":
                     JSONLD.getInstance(this.entryPointUrl).then((jsonld) => {
@@ -316,6 +317,7 @@ class OfficialSignaturePdfUpload extends ScopedElementsMixin(DBPSignatureLitElem
      * @returns {*[]} Array of html templates
      */
     getQueuedFilesHtml() {
+        const i18n = this._i18n;
         const ids = Object.keys(this.queuedFiles);
         let results = [];
 
@@ -380,6 +382,7 @@ class OfficialSignaturePdfUpload extends ScopedElementsMixin(DBPSignatureLitElem
      */
     getSignedFilesHtml() {
         const ids = Object.keys(this.signedFiles);
+        const i18n = this._i18n;
         let results = [];
 
         ids.forEach((id) => {
@@ -408,6 +411,7 @@ class OfficialSignaturePdfUpload extends ScopedElementsMixin(DBPSignatureLitElem
      */
     getErrorFilesHtml() {
         const ids = Object.keys(this.errorFiles);
+        const i18n = this._i18n;
         let results = [];
 
         ids.forEach((id) => {
@@ -447,6 +451,7 @@ class OfficialSignaturePdfUpload extends ScopedElementsMixin(DBPSignatureLitElem
 
     render() {
         const placeholderUrl = commonUtils.getAssetURL(pkgName, 'official-signature-placeholder.png');
+        const i18n = this._i18n;
 
         return html`
             <div class="${classMap({hidden: !this.isLoggedIn() || !this.hasSignaturePermissions() || this.isLoading()})}">
diff --git a/src/dbp-pdf-annotation-view.js b/src/dbp-pdf-annotation-view.js
index 4ff1adf909f3396ca40381ea5c999426cf69b2f1..d077031915db2bd1eb5d8434e62a8f7a49f8d99a 100644
--- a/src/dbp-pdf-annotation-view.js
+++ b/src/dbp-pdf-annotation-view.js
@@ -1,4 +1,4 @@
-import {createI18nInstance} from './i18n.js';
+import {createInstance} from './i18n.js';
 import {css, html} from 'lit-element';
 import {classMap} from 'lit-html/directives/class-map.js';
 import {ScopedElementsMixin} from '@open-wc/scoped-elements';
@@ -9,15 +9,14 @@ import { send } from '@dbp-toolkit/common/notification';
 import * as commonStyles from '@dbp-toolkit/common/styles';
 import * as utils from './utils';
 
-const i18n = createI18nInstance();
-
 /**
  * PdfAnnotationView web component
  */
 export class PdfAnnotationView extends ScopedElementsMixin(DBPLitElement) {
     constructor() {
         super();
-        this.lang = 'de';
+        this._i18n = createInstance();
+        this.lang = this._i18n.language;
         this.isTextHidden = false;
         this.isSelected = false;
         this.annotationRows = [];
@@ -52,7 +51,7 @@ export class PdfAnnotationView extends ScopedElementsMixin(DBPLitElement) {
         changedProperties.forEach((oldValue, propName) => {
             switch (propName) {
                 case "lang":
-                    i18n.changeLanguage(this.lang);
+                    this._i18n.changeLanguage(this.lang);
                     break;
             }
         });
@@ -84,7 +83,7 @@ export class PdfAnnotationView extends ScopedElementsMixin(DBPLitElement) {
     }
 
     validateValues() {
-        
+        const i18n = this._i18n;
         for (let annotation of this.annotationRows) {
             const annotationTypeData = utils.getAnnotationTypes(annotation['annotationType']);
 
@@ -343,6 +342,7 @@ export class PdfAnnotationView extends ScopedElementsMixin(DBPLitElement) {
      * @returns {*[]} Array of html templates
      */
     getAnnotationsHtml() {
+       const i18n = this._i18n;
        const annotations = this.annotationRows || [];
        const ids = Object.keys(annotations);
        let results = [];
@@ -381,6 +381,7 @@ export class PdfAnnotationView extends ScopedElementsMixin(DBPLitElement) {
    }
 
     render() {
+        const i18n = this._i18n;
         return html`
             <div id="pdf-main-container">
                 <div id="pdf-meta">
diff --git a/src/dbp-pdf-preview.js b/src/dbp-pdf-preview.js
index 96d2aeb4abb80face1413371a3103e21f6087e40..1cae849bc49c5970dfa70ece9780fb875996b3c2 100644
--- a/src/dbp-pdf-preview.js
+++ b/src/dbp-pdf-preview.js
@@ -1,4 +1,4 @@
-import {createI18nInstance} from './i18n.js';
+import {createInstance} from './i18n.js';
 import {css, html} from 'lit-element';
 import {classMap} from 'lit-html/directives/class-map.js';
 import {live} from 'lit-html/directives/live.js';
@@ -11,15 +11,14 @@ import pdfjs from 'pdfjs-dist/legacy/build/pdf.js';
 import {name as pkgName} from './../package.json';
 import {readBinaryFileContent} from './utils.js';
 
-const i18n = createI18nInstance();
-
 /**
  * PdfPreview web component
  */
 export class PdfPreview extends ScopedElementsMixin(DBPLitElement) {
     constructor() {
         super();
-        this.lang = 'de';
+        this._i18n = createInstance();
+        this.lang = this._i18n.language;
         this.pdfDoc = null;
         this.currentPage = 0;
         this.totalPages = 0;
@@ -74,7 +73,7 @@ export class PdfPreview extends ScopedElementsMixin(DBPLitElement) {
         changedProperties.forEach((oldValue, propName) => {
             switch (propName) {
                 case "lang":
-                    i18n.changeLanguage(this.lang);
+                    this._i18n.changeLanguage(this.lang);
                     break;
             }
         });
@@ -581,6 +580,7 @@ export class PdfPreview extends ScopedElementsMixin(DBPLitElement) {
 
     render() {
         const isRotationHidden = !this.allowSignatureRotation;
+        const i18n = this._i18n;
 
         return html`
 
diff --git a/src/dbp-qualified-signature-pdf-upload.js b/src/dbp-qualified-signature-pdf-upload.js
index f50d7a69f32109557b72a19abe8112a5b5485651..a2037085af3c55e0fb7a3871f0fc57dc72b20e26 100644
--- a/src/dbp-qualified-signature-pdf-upload.js
+++ b/src/dbp-qualified-signature-pdf-upload.js
@@ -1,4 +1,4 @@
-import {createI18nInstance} from './i18n.js';
+import {createInstance} from './i18n.js';
 import {humanFileSize} from '@dbp-toolkit/common/i18next.js';
 import {css, html} from 'lit-element';
 import {ScopedElementsMixin} from '@open-wc/scoped-elements';
@@ -21,12 +21,11 @@ import {PdfAnnotationView} from "./dbp-pdf-annotation-view";
 import { ExternalSignIFrame } from './ext-sign-iframe.js';
 import * as SignatureStyles from './styles';
 
-const i18n = createI18nInstance();
-
 class QualifiedSignaturePdfUpload extends ScopedElementsMixin(DBPSignatureLitElement) {
     constructor() {
         super();
-        this.lang = i18n.language;
+        this._i18n = createInstance();
+        this.lang = this._i18n.language;
         this.entryPointUrl = '';
         this.nextcloudWebAppPasswordURL = "";
         this.nextcloudWebDavURL = "";
@@ -147,6 +146,7 @@ class QualifiedSignaturePdfUpload extends ScopedElementsMixin(DBPSignatureLitEle
      * Processes queued files
      */
     async handleQueuedFiles() {
+        const i18n = this._i18n;
         this.endSigningProcessIfQueueEmpty();
         if (this.queuedFilesCount === 0) {
             // reset signingProcessEnabled button
@@ -217,6 +217,7 @@ class QualifiedSignaturePdfUpload extends ScopedElementsMixin(DBPSignatureLitEle
      * @param event
      */
     onReceiveBeforeUnload(event) {
+        const i18n = this._i18n;
         // we don't need to stop if there are no signed files
         if (this.signedFilesCount === 0) {
             return;
@@ -247,6 +248,7 @@ class QualifiedSignaturePdfUpload extends ScopedElementsMixin(DBPSignatureLitEle
      * @param error
      */
     parseError(error) {
+        const i18n = this._i18n;
         let errorParsed = error;
         // Common Error Messages fpr pdf-as: https://www.buergerkarte.at/konzept/securitylayer/spezifikation/20140114/errorcodes/errorcodes.html
         // SecurityLayer Error: [6000] Unklassifizierter Abbruch durch den Bürger.
@@ -372,7 +374,7 @@ class QualifiedSignaturePdfUpload extends ScopedElementsMixin(DBPSignatureLitEle
         changedProperties.forEach((oldValue, propName) => {
             switch (propName) {
                 case "lang":
-                    i18n.changeLanguage(this.lang);
+                    this._i18n.changeLanguage(this.lang);
                     break;
                 case "entryPointUrl":
                     JSONLD.getInstance(this.entryPointUrl).then((jsonld) => {
@@ -427,6 +429,7 @@ class QualifiedSignaturePdfUpload extends ScopedElementsMixin(DBPSignatureLitEle
      */
     getQueuedFilesHtml() {
         const ids = Object.keys(this.queuedFiles);
+        const i18n = this._i18n;
         let results = [];
 
         ids.forEach((id) => {
@@ -490,6 +493,7 @@ class QualifiedSignaturePdfUpload extends ScopedElementsMixin(DBPSignatureLitEle
      */
     getSignedFilesHtml() {
         const ids = Object.keys(this.signedFiles);
+        const i18n = this._i18n;
         let results = [];
 
         ids.forEach((id) => {
@@ -518,6 +522,7 @@ class QualifiedSignaturePdfUpload extends ScopedElementsMixin(DBPSignatureLitEle
      */
     getErrorFilesHtml() {
         const ids = Object.keys(this.errorFiles);
+        const i18n = this._i18n;
         let results = [];
 
         ids.forEach((id) => {
@@ -576,6 +581,7 @@ class QualifiedSignaturePdfUpload extends ScopedElementsMixin(DBPSignatureLitEle
 
     render() {
         const placeholderUrl = commonUtils.getAssetURL(pkgName, 'qualified-signature-placeholder.png');
+        const i18n = this._i18n;
 
         return html`
             <div class="${classMap({hidden: !this.isLoggedIn() || !this.hasSignaturePermissions() || this.isLoading()})}">
diff --git a/src/dbp-signature-verification-full.js b/src/dbp-signature-verification-full.js
index 313cce1eb7a953291cdd376829f18b7b52ef593d..a152effa1ad57a0d16db09fe94d2c07619e20cc5 100644
--- a/src/dbp-signature-verification-full.js
+++ b/src/dbp-signature-verification-full.js
@@ -1,4 +1,4 @@
-import {createI18nInstance} from './i18n.js';
+import {createInstance} from './i18n.js';
 import {humanFileSize} from '@dbp-toolkit/common/i18next.js';
 import {css, html} from 'lit-element';
 import {ScopedElementsMixin} from '@open-wc/scoped-elements';
@@ -15,12 +15,11 @@ import metadata from './dbp-signature-verification-full.metadata.json';
 import {Activity} from './activity.js';
 import * as SignatureStyles from './styles';
 
-const i18n = createI18nInstance();
-
 class SignatureVerificationFull extends ScopedElementsMixin(DBPSignatureLitElement) {
     constructor() {
         super();
-        this.lang = i18n.language;
+        this._i18n = createInstance();
+        this.lang = this._i18n.language;
         this.entryPointUrl = '';
         this.nextcloudWebAppPasswordURL = "";
         this.nextcloudWebDavURL = "";
@@ -117,7 +116,7 @@ class SignatureVerificationFull extends ScopedElementsMixin(DBPSignatureLitEleme
         this.uploadInProgress = true;
         let params = {};
 
-        this.uploadStatusText = i18n.t('signature-verification.upload-status-file-text', {
+        this.uploadStatusText = this._i18n.t('signature-verification.upload-status-file-text', {
             fileName: file.name,
             fileSize: humanFileSize(file.size, false),
         });
@@ -150,7 +149,7 @@ class SignatureVerificationFull extends ScopedElementsMixin(DBPSignatureLitEleme
         if (!event.isTrusted) {
             // note that this only works with custom event since calls of "confirm" are ignored
             // in the non-custom event, see https://developer.mozilla.org/en-US/docs/Web/API/Window/beforeunload_event
-            const result = confirm(i18n.t('signature-verification.confirm-page-leave'));
+            const result = confirm(this._i18n.t('signature-verification.confirm-page-leave'));
 
             // don't stop the page leave if the user wants to leave
             if (result) {
@@ -212,7 +211,7 @@ class SignatureVerificationFull extends ScopedElementsMixin(DBPSignatureLitEleme
         changedProperties.forEach((oldValue, propName) => {
             switch (propName) {
                 case "lang":
-                    i18n.changeLanguage(this.lang);
+                    this._i18n.changeLanguage(this.lang);
                     break;
                 case "entryPointUrl":
                     JSONLD.getInstance(this.entryPointUrl).then((jsonld) => {
@@ -342,6 +341,7 @@ class SignatureVerificationFull extends ScopedElementsMixin(DBPSignatureLitEleme
      * @returns {*[]} Array of html templates
      */
     getQueuedFilesHtml() {
+        const i18n = this._i18n;
         const ids = Object.keys(this.queuedFiles);
         let results = [];
 
@@ -378,6 +378,7 @@ class SignatureVerificationFull extends ScopedElementsMixin(DBPSignatureLitEleme
      */
     getVerifiedFilesHtml() {
         const ids = Object.keys(this.verifiedFiles);
+        const i18n = this._i18n;
         let results = [];
 
         ids.forEach((id) => {
@@ -433,6 +434,7 @@ class SignatureVerificationFull extends ScopedElementsMixin(DBPSignatureLitEleme
      */
     getErrorFilesHtml() {
         const ids = Object.keys(this.errorFiles);
+        const i18n = this._i18n;
         let results = [];
 
         ids.forEach((id) => {
@@ -471,6 +473,7 @@ class SignatureVerificationFull extends ScopedElementsMixin(DBPSignatureLitEleme
     }
 
     render() {
+        const i18n = this._i18n;
         const placeholderUrl = commonUtils.getAssetURL(pkgName, 'official-signature-placeholder.png');
         const activity = new Activity(metadata);
 
diff --git a/src/dbp-signature-verification.js b/src/dbp-signature-verification.js
index 7df7fadfa1c9e2e564f9e241bc5fdc44a8f4a771..0907dbbe06088840b22faa271d56883e935f662d 100644
--- a/src/dbp-signature-verification.js
+++ b/src/dbp-signature-verification.js
@@ -1,4 +1,4 @@
-import {createI18nInstance} from './i18n.js';
+import {createInstance} from './i18n.js';
 import {css, html} from 'lit-element';
 import {ScopedElementsMixin} from '@open-wc/scoped-elements';
 import DBPSignatureLitElement from "./dbp-signature-lit-element";
@@ -7,12 +7,12 @@ import * as commonStyles from '@dbp-toolkit/common/styles';
 import metadata from './dbp-signature-verification.metadata.json';
 import {Activity} from './activity.js';
 
-const i18n = createI18nInstance();
 
 class SignatureVerification extends ScopedElementsMixin(DBPSignatureLitElement) {
     constructor() {
         super();
-        this.lang = i18n.language;
+        this._i18n = createInstance();
+        this.lang = this._i18n.language;
     }
 
     static get scopedElements() {
@@ -30,7 +30,7 @@ class SignatureVerification extends ScopedElementsMixin(DBPSignatureLitElement)
         changedProperties.forEach((oldValue, propName) => {
             switch (propName) {
                 case "lang":
-                    i18n.changeLanguage(this.lang);
+                    this._i18n.changeLanguage(this.lang);
                     break;
             }
         });
@@ -104,6 +104,7 @@ class SignatureVerification extends ScopedElementsMixin(DBPSignatureLitElement)
     }
 
     render() {
+        const i18n = this._i18n;
         const activity = new Activity(metadata);
         return html`
             <h2>${activity.getName(this.lang)}</h2>
diff --git a/src/i18n.js b/src/i18n.js
index 8124af26c8694b62c93c2a69e1ca2c53a0f5ed8a..975c1993e2a567940c74f8d957a6b2a018125548 100644
--- a/src/i18n.js
+++ b/src/i18n.js
@@ -1,10 +1,8 @@
-import {createInstance} from '@dbp-toolkit/common/i18next.js';
+import {createInstance as _createInstance} from '@dbp-toolkit/common/i18next.js';
 
 import de from './i18n/de/translation.json';
 import en from './i18n/en/translation.json';
 
-const i18n = createInstance({en: en, de: de}, 'de', 'en');
-
-export function createI18nInstance () {
-    return i18n.cloneInstance();
-}
+export function createInstance() {
+    return _createInstance({en: en, de: de}, 'de', 'en');
+}
\ No newline at end of file