diff --git a/packages/language-select/src/i18n/de/translation.json b/packages/language-select/src/i18n/de/translation.json
index 5ee4f041a1eaf738ff35cb75b10571e8c4767fe2..625365129e7744b3c3351625f77dae484f24c399 100644
--- a/packages/language-select/src/i18n/de/translation.json
+++ b/packages/language-select/src/i18n/de/translation.json
@@ -1,4 +1,6 @@
 {
   "de": "Deutsch",
-  "en": "Englisch"
+  "en": "Englisch",
+  "de-action": "Auf Deutsch anzeigen",
+  "en-action": "Auf Englisch anzeigen"
 }
diff --git a/packages/language-select/src/i18n/en/translation.json b/packages/language-select/src/i18n/en/translation.json
index f8615781a0a69ba9377d94f69937da07af459592..1177302e3a9fad1e64b4d800673db9db0ea25cf8 100644
--- a/packages/language-select/src/i18n/en/translation.json
+++ b/packages/language-select/src/i18n/en/translation.json
@@ -1,4 +1,6 @@
 {
   "de": "German",
-  "en": "English"
+  "en": "English",
+  "de-action": "Switch to German",
+  "en-action": "Switch to English"
 }
diff --git a/packages/language-select/src/language-select.js b/packages/language-select/src/language-select.js
index 53d05ed7ec6e000912343ecef9b3fa7cb45f300b..21d87172c459d9c01c77318ab82d7c6b6c52841b 100644
--- a/packages/language-select/src/language-select.js
+++ b/packages/language-select/src/language-select.js
@@ -9,53 +9,83 @@ class LanguageSelect extends LitElement {
 
     constructor() {
         super();
-        this.lang = 'de';
+        this._lang = 'de';
         this.languages = ['de', 'en'];
 
+        this.onExternalChange = this.onExternalChange.bind(this);
+
+        // for the i18next scanner
         i18n.t('de');
+        i18n.t('de-action');
         i18n.t('en');
+        i18n.t('en-action');
+    }
 
-        this.onExternalChange = this.onExternalChange.bind(this);
+    _getNextLanguage() {
+        var index = this.languages.indexOf(this.lang);
+        var next = this.languages[index + 1];
+        if (typeof next === 'undefined')
+            next = this.languages[0];
+        return next;
     }
 
     static get properties() {
         return {
             lang: {type: String},
+            next: {type: String},
             languages: {type: Array},
         };
     }
 
+    set lang(value) {
+        const oldValue = this.lang;
+        const oldNext = this.next;
+        this._lang = value;
+        this.requestUpdate('lang', oldValue);
+        this.requestUpdate('next', oldNext);
+
+        if (oldValue !== value) {
+            const event = new CustomEvent("vpu-language-changed", {
+                bubbles: true,
+                detail: {'lang': value}
+            });
+            this.dispatchEvent(event);
+
+            // Unlike other cases we use the next language for the translations so that
+            // users not knowing the current language can understand it.
+            // In case of more than two this doesn't make that much sense, but for now..
+            i18n.changeLanguage(this.next);
+        }
+    }
+
+    get lang() {
+        return this._lang;
+    }
+
+    set next(value) {
+    }
+
+    get next() {
+        return this._getNextLanguage();
+    }
+
     static get styles() {
         return css`
-            select {
-                background:
-                    linear-gradient(45deg, transparent 50%, black 50%),
-                    linear-gradient(135deg, black 50%, transparent 50%),
-                    linear-gradient(to right, white, white);
-                background-position:
-                    calc(100% - 21px) calc(1em + 2px),
-                    calc(100% - 16px) calc(1em + 2px),
-                    100% 0;
-                background-size:
-                    5px 5px,
-                    5px 5px,
-                    2.5em 2.5em;
-                background-repeat: no-repeat;
-
-                border: 1px solid #000;
-                line-height: 1.5em;
-                padding: 0.5em 3.5em 0.5em 0.5em;
-
-                border-radius: 0;
-                margin: 0;
-                -webkit-box-sizing: border-box;
-                -moz-box-sizing: border-box;
-                box-sizing: border-box;
-                -webkit-appearance:none;
-                -moz-appearance:none;
+            a:hover {
+                background-color: #000;
+                color: #fff;
+            }
+
+            a {
+                padding: 5px;
+                display: inline-block;
+                text-decoration: none;
+                color: #000;
+                transition: background-color 0.15s, color 0.15s;
+                font-weight: 300;
             }
         `;
-    } 
+    }
 
     onExternalChange(e) {
         this.lang = e.detail.lang
@@ -71,31 +101,15 @@ class LanguageSelect extends LitElement {
         super.disconnectedCallback();
     }
 
-    update(changedProperties) {
-        changedProperties.forEach((oldValue, propName) => {
-            if (propName === 'lang') {
-                const event = new CustomEvent("vpu-language-changed", {
-                    bubbles: true,
-                    detail: {'lang': this.lang},
-                });
-                this.dispatchEvent(event);
-
-                i18n.changeLanguage(this.lang);
-            }
-        });
-
-        super.update(changedProperties);
-    }
-
-    onSelectChange(e) {
-        this.lang = e.target.value;
+    onClick(e) {
+        e.preventDefault();
+        this.lang = this.next;
     }
 
     render() {
+        var linkTitle = i18n.t(this.next + '-action');
         return html`
-            <select @change=${this.onSelectChange}>
-                ${this.languages.map(i => html`<option value="${i}" ?selected=${this.lang === i}>${i18n.t(i)}</option>`)}
-            </select> 
+            <a href="#" title="${linkTitle}" @click=${this.onClick}>${this.next.toUpperCase()}</a>
         `;
     }
 }
diff --git a/packages/language-select/test/unit.js b/packages/language-select/test/unit.js
index ea01a63ee3164b6806bcc5df26204f9e53a28a43..3511aa8aa474549fc6b813d51afd5d05a7dff810 100644
--- a/packages/language-select/test/unit.js
+++ b/packages/language-select/test/unit.js
@@ -3,8 +3,15 @@ import '../src/demo.js';
 
 describe('vpu-language-select basics', () => {
   let node;
+  let events = [];
+
+  function handler(e) {
+    events.push(e);
+  }
 
   beforeEach(async () => {
+    events.length = 0;
+    window.addEventListener('vpu-language-changed', handler);
     node = document.createElement('vpu-language-select');
     document.body.appendChild(node);
     await node.updateComplete;
@@ -12,11 +19,21 @@ describe('vpu-language-select basics', () => {
 
   afterEach(() => {
     node.remove();
+    window.removeEventListener('vpu-language-changed', handler);
   });
 
   it('should render', () => {
       expect(node).to.have.property('shadowRoot');
   });
+
+  it('change language events', () => {
+    node.lang = 'en';
+    expect(node.next).to.equal('de');
+    expect(events.length).to.equal(1);
+    node.lang = 'de';
+    expect(node.next).to.equal('en');
+    expect(events.length).to.equal(2);
+  });
 });
 
 describe('vpu-language-select demo', () => {