diff --git a/dev/js/spec/menuSpec.js b/dev/js/spec/menuSpec.js
index 2b4e8f6..30bf793 100644
--- a/dev/js/spec/menuSpec.js
+++ b/dev/js/spec/menuSpec.js
@@ -1,8 +1,9 @@
 define(['menu'], function () {
 
-  var menuItemClass = require('menu/item');
-  var prefixClass   = require('menu/prefix');
-  var menuClass     = require('menu');
+  var menuItemClass    = require('menu/item');
+  var prefixClass      = require('menu/prefix');
+  var menuClass        = require('menu');
+  var lengthFieldClass = require('menu/lengthField');
 
   // The OwnMenu item
   KorAP.OwnMenuItem = {
@@ -403,16 +404,16 @@
 
       expect(menu.show()).toBe(true);
 
-      expect(menu.element().childNodes[1].innerHTML).toEqual("<strong>Constituency</strong><span>Example 1</span>");
-      expect(menu.element().childNodes[2].innerHTML).toEqual("<strong>Lemma</strong>");
-      expect(menu.element().childNodes[2].getAttribute("data-action")).toEqual("l=");
-      expect(menu.element().childNodes[3].innerHTML).toEqual("<strong>Morphology</strong><span>Example 2</span>");
-      expect(menu.element().childNodes[4]).toBe(undefined);
+      expect(menu.element().childNodes[2].innerHTML).toEqual("<strong>Constituency</strong><span>Example 1</span>");
+      expect(menu.element().childNodes[3].innerHTML).toEqual("<strong>Lemma</strong>");
+      expect(menu.element().childNodes[3].getAttribute("data-action")).toEqual("l=");
+      expect(menu.element().childNodes[4].innerHTML).toEqual("<strong>Morphology</strong><span>Example 2</span>");
+      expect(menu.element().childNodes[5]).toBe(undefined);
 
       // Check boundaries
-      expect(menu.element().childNodes[1].classList.contains("no-more")).toBe(true);
-      expect(menu.element().childNodes[2].classList.contains("no-more")).toBe(false);
+      expect(menu.element().childNodes[2].classList.contains("no-more")).toBe(true);
       expect(menu.element().childNodes[3].classList.contains("no-more")).toBe(false);
+      expect(menu.element().childNodes[4].classList.contains("no-more")).toBe(false);
     });
 
     it('should be filterable', function () {
@@ -420,44 +421,44 @@
       menu.limit(3);
       expect(menu.prefix("o").show()).toBe(true);
       expect(menu.element().childNodes[0].innerHTML).toEqual("o");
-      expect(menu.element().childNodes[1].innerHTML).toEqual("<strong>C<mark>o</mark>nstituency</strong><span>Example 1</span>");
-      expect(menu.element().childNodes[2].innerHTML).toEqual("<strong>M<mark>o</mark>rph<mark>o</mark>l<mark>o</mark>gy</strong><span>Example 2</span>");
-      expect(menu.element().childNodes[3].innerHTML).toEqual("<strong>Part-<mark>o</mark>f-Speech</strong>");
-      expect(menu.element().childNodes[4]).toBe(undefined);
+      expect(menu.element().childNodes[2].innerHTML).toEqual("<strong>C<mark>o</mark>nstituency</strong><span>Example 1</span>");
+      expect(menu.element().childNodes[3].innerHTML).toEqual("<strong>M<mark>o</mark>rph<mark>o</mark>l<mark>o</mark>gy</strong><span>Example 2</span>");
+      expect(menu.element().childNodes[4].innerHTML).toEqual("<strong>Part-<mark>o</mark>f-Speech</strong>");
+      expect(menu.element().childNodes[5]).toBe(undefined);
 
       // Check boundaries
-      expect(menu.element().childNodes[1].classList.contains("no-more")).toBe(true);
-      expect(menu.element().childNodes[2].classList.contains("no-more")).toBe(false);
-      expect(menu.element().childNodes[3].classList.contains("no-more")).toBe(true);
+      expect(menu.element().childNodes[2].classList.contains("no-more")).toBe(true);
+      expect(menu.element().childNodes[3].classList.contains("no-more")).toBe(false);
+      expect(menu.element().childNodes[4].classList.contains("no-more")).toBe(true);
 
       menu.limit(2);
 
       expect(menu.prefix("o").show()).toBe(true);
       expect(menu.element().childNodes[0].innerHTML).toEqual("o");
-      expect(menu.element().childNodes[1].innerHTML).toEqual("<strong>C<mark>o</mark>nstituency</strong><span>Example 1</span>");
-      expect(menu.element().childNodes[2].innerHTML).toEqual("<strong>M<mark>o</mark>rph<mark>o</mark>l<mark>o</mark>gy</strong><span>Example 2</span>");
-      expect(menu.element().childNodes[3]).toBe(undefined);
+      expect(menu.element().childNodes[2].innerHTML).toEqual("<strong>C<mark>o</mark>nstituency</strong><span>Example 1</span>");
+      expect(menu.element().childNodes[3].innerHTML).toEqual("<strong>M<mark>o</mark>rph<mark>o</mark>l<mark>o</mark>gy</strong><span>Example 2</span>");
+      expect(menu.element().childNodes[4]).toBe(undefined);
 
       // Check boundaries
-      expect(menu.element().childNodes[1].classList.contains("no-more")).toBe(true);
-      expect(menu.element().childNodes[2].classList.contains("no-more")).toBe(false);
-      expect(menu.element().childNodes[3]).toBe(undefined);
+      expect(menu.element().childNodes[2].classList.contains("no-more")).toBe(true);
+      expect(menu.element().childNodes[3].classList.contains("no-more")).toBe(false);
+      expect(menu.element().childNodes[4]).toBe(undefined);
 
       expect(menu.prefix("e").show()).toBe(true);
       expect(menu.element().childNodes[0].innerHTML).toEqual("e");
-      expect(menu.element().childNodes[1].innerHTML).toEqual("<strong>Constitu<mark>e</mark>ncy</strong><span><mark>E</mark>xampl<mark>e</mark> 1</span>");
-      expect(menu.element().childNodes[2].innerHTML).toEqual("<strong>Morphology</strong><span><mark>E</mark>xampl<mark>e</mark> 2</span>");
-      expect(menu.element().childNodes[3]).toBe(undefined);
+      expect(menu.element().childNodes[2].innerHTML).toEqual("<strong>Constitu<mark>e</mark>ncy</strong><span><mark>E</mark>xampl<mark>e</mark> 1</span>");
+      expect(menu.element().childNodes[3].innerHTML).toEqual("<strong>Morphology</strong><span><mark>E</mark>xampl<mark>e</mark> 2</span>");
+      expect(menu.element().childNodes[4]).toBe(undefined);
 
       menu.limit(5);
       expect(menu.prefix("a").show()).toBe(true);
       expect(menu.element().childNodes[0].innerHTML).toEqual("a");
-      expect(menu.element().childNodes[1].innerHTML).toEqual("<strong>Constituency</strong><span>Ex<mark>a</mark>mple 1</span>");
-      expect(menu.element().childNodes[2].innerHTML).toEqual("<strong>Lemm<mark>a</mark></strong>");
-      expect(menu.element().childNodes[3].innerHTML).toEqual("<strong>Morphology</strong><span>Ex<mark>a</mark>mple 2</span>");
-      expect(menu.element().childNodes[4].innerHTML).toEqual("<strong>P<mark>a</mark>rt-of-Speech</strong>");
-      expect(menu.element().childNodes[5].innerHTML).toEqual("<strong>Synt<mark>a</mark>x</strong>");
-      expect(menu.element().childNodes[6]).toBe(undefined);
+      expect(menu.element().childNodes[2].innerHTML).toEqual("<strong>Constituency</strong><span>Ex<mark>a</mark>mple 1</span>");
+      expect(menu.element().childNodes[3].innerHTML).toEqual("<strong>Lemm<mark>a</mark></strong>");
+      expect(menu.element().childNodes[4].innerHTML).toEqual("<strong>Morphology</strong><span>Ex<mark>a</mark>mple 2</span>");
+      expect(menu.element().childNodes[5].innerHTML).toEqual("<strong>P<mark>a</mark>rt-of-Speech</strong>");
+      expect(menu.element().childNodes[6].innerHTML).toEqual("<strong>Synt<mark>a</mark>x</strong>");
+      expect(menu.element().childNodes[7]).toBe(undefined);
     });
 
 
@@ -468,74 +469,74 @@
       // Show only 3 items
       menu.limit(3);
       expect(menu.show()).toBe(true);
-      expect(menu.element().childNodes[1].innerHTML).toEqual("<strong>Constituency</strong><span>Example 1</span>");
+      expect(menu.element().childNodes[2].innerHTML).toEqual("<strong>Constituency</strong><span>Example 1</span>");
       expect(menu.shownItem(0).active()).toBe(true);
-      expect(menu.element().childNodes[2].innerHTML).toEqual("<strong>Lemma</strong>");
+      expect(menu.element().childNodes[3].innerHTML).toEqual("<strong>Lemma</strong>");
       expect(menu.shownItem(1).active()).toBe(false);
-      expect(menu.element().childNodes[3].innerHTML).toEqual("<strong>Morphology</strong><span>Example 2</span>");
+      expect(menu.element().childNodes[4].innerHTML).toEqual("<strong>Morphology</strong><span>Example 2</span>");
       expect(menu.shownItem(2).active()).toBe(false);
-      expect(menu.element().childNodes[4]).toBe(undefined);
+      expect(menu.element().childNodes[5]).toBe(undefined);
 
       // Activate next (1)
       menu.next();
-      expect(menu.element().childNodes[1].innerHTML).toEqual("<strong>Constituency</strong><span>Example 1</span>");
+      expect(menu.element().childNodes[2].innerHTML).toEqual("<strong>Constituency</strong><span>Example 1</span>");
       expect(menu.shownItem(0).active()).toBe(false);
-      expect(menu.element().childNodes[2].innerHTML).toEqual("<strong>Lemma</strong>");
+      expect(menu.element().childNodes[3].innerHTML).toEqual("<strong>Lemma</strong>");
       expect(menu.shownItem(1).active()).toBe(true);
-      expect(menu.element().childNodes[3].innerHTML).toEqual("<strong>Morphology</strong><span>Example 2</span>");
+      expect(menu.element().childNodes[4].innerHTML).toEqual("<strong>Morphology</strong><span>Example 2</span>");
       expect(menu.shownItem(2).active()).toBe(false);
-      expect(menu.element().childNodes[4]).toBe(undefined);
+      expect(menu.element().childNodes[5]).toBe(undefined);
 
       // Activate next (2)
       menu.next();
-      expect(menu.element().childNodes[1].innerHTML).toEqual("<strong>Constituency</strong><span>Example 1</span>");
+      expect(menu.element().childNodes[2].innerHTML).toEqual("<strong>Constituency</strong><span>Example 1</span>");
       expect(menu.shownItem(0).active()).toBe(false);
-      expect(menu.element().childNodes[2].innerHTML).toEqual("<strong>Lemma</strong>");
+      expect(menu.element().childNodes[3].innerHTML).toEqual("<strong>Lemma</strong>");
       expect(menu.shownItem(1).active()).toBe(false);
-      expect(menu.element().childNodes[3].innerHTML).toEqual("<strong>Morphology</strong><span>Example 2</span>");
+      expect(menu.element().childNodes[4].innerHTML).toEqual("<strong>Morphology</strong><span>Example 2</span>");
       expect(menu.shownItem(2).active()).toBe(true);
-      expect(menu.element().childNodes[4]).toBe(undefined);
+      expect(menu.element().childNodes[5]).toBe(undefined);
 
       // Activate next (3)
       // scroll!
       menu.next();
-      expect(menu.element().childNodes[1].innerHTML).toEqual("<strong>Lemma</strong>");
+      expect(menu.element().childNodes[2].innerHTML).toEqual("<strong>Lemma</strong>");
       expect(menu.shownItem(0).active()).toBe(false);
-      expect(menu.element().childNodes[2].innerHTML).toEqual("<strong>Morphology</strong><span>Example 2</span>");
+      expect(menu.element().childNodes[3].innerHTML).toEqual("<strong>Morphology</strong><span>Example 2</span>");
       expect(menu.shownItem(1).active()).toBe(false);
-      expect(menu.element().childNodes[3].innerHTML).toEqual("<strong>Part-of-Speech</strong>");
+      expect(menu.element().childNodes[4].innerHTML).toEqual("<strong>Part-of-Speech</strong>");
       expect(menu.shownItem(2).active()).toBe(true);
-      expect(menu.element().childNodes[4]).toBe(undefined);
+      expect(menu.element().childNodes[5]).toBe(undefined);
 
       // Activate next (4)
       menu.next();
-      expect(menu.element().childNodes[1].innerHTML).toEqual("<strong>Morphology</strong><span>Example 2</span>");
+      expect(menu.element().childNodes[2].innerHTML).toEqual("<strong>Morphology</strong><span>Example 2</span>");
       expect(menu.shownItem(0).active()).toBe(false);
-      expect(menu.element().childNodes[2].innerHTML).toEqual("<strong>Part-of-Speech</strong>");
+      expect(menu.element().childNodes[3].innerHTML).toEqual("<strong>Part-of-Speech</strong>");
       expect(menu.shownItem(1).active()).toBe(false);
-      expect(menu.element().childNodes[3].innerHTML).toEqual("<strong>Syntax</strong>");
+      expect(menu.element().childNodes[4].innerHTML).toEqual("<strong>Syntax</strong>");
       expect(menu.shownItem(2).active()).toBe(true);
-      expect(menu.element().childNodes[4]).toBe(undefined);
+      expect(menu.element().childNodes[5]).toBe(undefined);
 
       // Activate next (5) - ROLL
       menu.next();
-      expect(menu.element().childNodes[1].innerHTML).toEqual("<strong>Constituency</strong><span>Example 1</span>");
+      expect(menu.element().childNodes[2].innerHTML).toEqual("<strong>Constituency</strong><span>Example 1</span>");
       expect(menu.shownItem(0).active()).toBe(true);
-      expect(menu.element().childNodes[2].innerHTML).toEqual("<strong>Lemma</strong>");
+      expect(menu.element().childNodes[3].innerHTML).toEqual("<strong>Lemma</strong>");
       expect(menu.shownItem(1).active()).toBe(false);
-      expect(menu.element().childNodes[3].innerHTML).toEqual("<strong>Morphology</strong><span>Example 2</span>");
+      expect(menu.element().childNodes[4].innerHTML).toEqual("<strong>Morphology</strong><span>Example 2</span>");
       expect(menu.shownItem(2).active()).toBe(false);
-      expect(menu.element().childNodes[4]).toBe(undefined);
+      expect(menu.element().childNodes[5]).toBe(undefined);
 
       // Active next (6)
       menu.next();
-      expect(menu.element().childNodes[1].innerHTML).toEqual("<strong>Constituency</strong><span>Example 1</span>");
+      expect(menu.element().childNodes[2].innerHTML).toEqual("<strong>Constituency</strong><span>Example 1</span>");
       expect(menu.shownItem(0).active()).toBe(false);
-      expect(menu.element().childNodes[2].innerHTML).toEqual("<strong>Lemma</strong>");
+      expect(menu.element().childNodes[3].innerHTML).toEqual("<strong>Lemma</strong>");
       expect(menu.shownItem(1).active()).toBe(true);
-      expect(menu.element().childNodes[3].innerHTML).toEqual("<strong>Morphology</strong><span>Example 2</span>");
+      expect(menu.element().childNodes[4].innerHTML).toEqual("<strong>Morphology</strong><span>Example 2</span>");
       expect(menu.shownItem(2).active()).toBe(false);
-      expect(menu.element().childNodes[4]).toBe(undefined);
+      expect(menu.element().childNodes[5]).toBe(undefined);
     });
 
     it('should be prevable', function () {
@@ -544,33 +545,33 @@
       menu.limit(3);
       expect(menu.show()).toBe(true);
 
-      expect(menu.element().childNodes[1].innerHTML).toEqual("<strong>Constituency</strong><span>Example 1</span>");
+      expect(menu.element().childNodes[2].innerHTML).toEqual("<strong>Constituency</strong><span>Example 1</span>");
       expect(menu.shownItem(0).active()).toBe(true);
-      expect(menu.element().childNodes[2].innerHTML).toEqual("<strong>Lemma</strong>");
+      expect(menu.element().childNodes[3].innerHTML).toEqual("<strong>Lemma</strong>");
       expect(menu.shownItem(1).active()).toBe(false);
-      expect(menu.element().childNodes[3].innerHTML).toEqual("<strong>Morphology</strong><span>Example 2</span>");
+      expect(menu.element().childNodes[4].innerHTML).toEqual("<strong>Morphology</strong><span>Example 2</span>");
       expect(menu.shownItem(2).active()).toBe(false);
-      expect(menu.element().childNodes[4]).toBe(undefined);
+      expect(menu.element().childNodes[5]).toBe(undefined);
 
       // Activate prev (1) - roll to bottom
       menu.prev();
-      expect(menu.element().childNodes[1].innerHTML).toEqual("<strong>Morphology</strong><span>Example 2</span>");
+      expect(menu.element().childNodes[2].innerHTML).toEqual("<strong>Morphology</strong><span>Example 2</span>");
       expect(menu.shownItem(0).active()).toBe(false);
-      expect(menu.element().childNodes[2].innerHTML).toEqual("<strong>Part-of-Speech</strong>");
+      expect(menu.element().childNodes[3].innerHTML).toEqual("<strong>Part-of-Speech</strong>");
       expect(menu.shownItem(1).active()).toBe(false);
-      expect(menu.element().childNodes[3].innerHTML).toEqual("<strong>Syntax</strong>");
+      expect(menu.element().childNodes[4].innerHTML).toEqual("<strong>Syntax</strong>");
       expect(menu.shownItem(2).active()).toBe(true);
-      expect(menu.element().childNodes[4]).toBe(undefined);
+      expect(menu.element().childNodes[5]).toBe(undefined);
 
       // Activate prev (2)
       menu.prev();
-      expect(menu.element().childNodes[1].innerHTML).toEqual("<strong>Morphology</strong><span>Example 2</span>");
+      expect(menu.element().childNodes[2].innerHTML).toEqual("<strong>Morphology</strong><span>Example 2</span>");
       expect(menu.shownItem(0).active()).toBe(false);
-      expect(menu.element().childNodes[2].innerHTML).toEqual("<strong>Part-of-Speech</strong>");
+      expect(menu.element().childNodes[3].innerHTML).toEqual("<strong>Part-of-Speech</strong>");
       expect(menu.shownItem(1).active()).toBe(true);
-      expect(menu.element().childNodes[3].innerHTML).toEqual("<strong>Syntax</strong>");
+      expect(menu.element().childNodes[4].innerHTML).toEqual("<strong>Syntax</strong>");
       expect(menu.shownItem(2).active()).toBe(false);
-      expect(menu.element().childNodes[4]).toBe(undefined);
+      expect(menu.element().childNodes[5]).toBe(undefined);
 
       // Activate prev (3)
       menu.prev();
@@ -580,7 +581,7 @@
       expect(menu.shownItem(1).active()).toBe(false);
       expect(menu.shownItem(2).name()).toEqual("Syntax");
       expect(menu.shownItem(2).active()).toBe(false);
-      expect(menu.element().childNodes[4]).toBe(undefined);
+      expect(menu.element().childNodes[5]).toBe(undefined);
 
       // Activate prev (4)
       menu.prev();
@@ -590,7 +591,7 @@
       expect(menu.shownItem(1).active()).toBe(false);
       expect(menu.shownItem(2).name()).toEqual("Part-of-Speech");
       expect(menu.shownItem(2).active()).toBe(false);
-      expect(menu.element().childNodes[4]).toBe(undefined);
+      expect(menu.element().childNodes[5]).toBe(undefined);
 
       // Activate prev (5)
       menu.prev();
@@ -600,7 +601,7 @@
       expect(menu.shownItem(1).active()).toBe(false);
       expect(menu.shownItem(2).name()).toEqual("Morphology");
       expect(menu.shownItem(2).active()).toBe(false);
-      expect(menu.element().childNodes[4]).toBe(undefined);
+      expect(menu.element().childNodes[5]).toBe(undefined);
 
       // Activate next (1)
       menu.next();
@@ -610,7 +611,7 @@
       expect(menu.shownItem(1).active()).toBe(true);
       expect(menu.shownItem(2).name()).toEqual("Morphology");
       expect(menu.shownItem(2).active()).toBe(false);
-      expect(menu.element().childNodes[4]).toBe(undefined);
+      expect(menu.element().childNodes[5]).toBe(undefined);
 
       // Activate prev (6)
       menu.prev();
@@ -623,7 +624,7 @@
       expect(menu.shownItem(1).active()).toBe(false);
       expect(menu.shownItem(2).name()).toEqual("Syntax");
       expect(menu.shownItem(2).active()).toBe(true);
-      expect(menu.element().childNodes[4]).toBe(undefined);
+      expect(menu.element().childNodes[5]).toBe(undefined);
     });
 
 
@@ -634,49 +635,49 @@
 
       expect(menu.prefix("o").show()).toBe(true);
       expect(menu.shownItem(0).name()).toEqual("Constituency");
-      expect(menu.element().childNodes[1].innerHTML).toEqual("<strong>C<mark>o</mark>nstituency</strong><span>Example 1</span>");
+      expect(menu.element().childNodes[2].innerHTML).toEqual("<strong>C<mark>o</mark>nstituency</strong><span>Example 1</span>");
       expect(menu.shownItem(0).active()).toBe(true);
       expect(menu.shownItem(1).name()).toEqual("Morphology");
-      expect(menu.element().childNodes[2].innerHTML).toEqual("<strong>M<mark>o</mark>rph<mark>o</mark>l<mark>o</mark>gy</strong><span>Example 2</span>");
+      expect(menu.element().childNodes[3].innerHTML).toEqual("<strong>M<mark>o</mark>rph<mark>o</mark>l<mark>o</mark>gy</strong><span>Example 2</span>");
       expect(menu.shownItem(1).active()).toBe(false);
       expect(menu.shownItem(2)).toBe(undefined);
 
       // Next (1)
       menu.next();
       expect(menu.shownItem(0).name()).toEqual("Constituency");
-      expect(menu.element().childNodes[1].innerHTML).toEqual("<strong>C<mark>o</mark>nstituency</strong><span>Example 1</span>");
+      expect(menu.element().childNodes[2].innerHTML).toEqual("<strong>C<mark>o</mark>nstituency</strong><span>Example 1</span>");
       expect(menu.shownItem(0).active()).toBe(false);
       expect(menu.shownItem(1).name()).toEqual("Morphology");
-      expect(menu.element().childNodes[2].innerHTML).toEqual("<strong>M<mark>o</mark>rph<mark>o</mark>l<mark>o</mark>gy</strong><span>Example 2</span>");
+      expect(menu.element().childNodes[3].innerHTML).toEqual("<strong>M<mark>o</mark>rph<mark>o</mark>l<mark>o</mark>gy</strong><span>Example 2</span>");
       expect(menu.shownItem(1).active()).toBe(true);
       expect(menu.shownItem(2)).toBe(undefined);
 
       // Next (2)
       menu.next();
       expect(menu.shownItem(0).name()).toEqual("Morphology");
-      expect(menu.element().childNodes[1].innerHTML).toEqual("<strong>M<mark>o</mark>rph<mark>o</mark>l<mark>o</mark>gy</strong><span>Example 2</span>");
+      expect(menu.element().childNodes[2].innerHTML).toEqual("<strong>M<mark>o</mark>rph<mark>o</mark>l<mark>o</mark>gy</strong><span>Example 2</span>");
       expect(menu.shownItem(0).active()).toBe(false);
       expect(menu.shownItem(1).name()).toEqual("Part-of-Speech");
-      expect(menu.element().childNodes[2].innerHTML).toEqual("<strong>Part-<mark>o</mark>f-Speech</strong>");
+      expect(menu.element().childNodes[3].innerHTML).toEqual("<strong>Part-<mark>o</mark>f-Speech</strong>");
       expect(menu.shownItem(1).active()).toBe(true);
       expect(menu.shownItem(2)).toBe(undefined);
 
       // Next (3) - to prefix
       menu.next();
       expect(menu.shownItem(0).name()).toEqual("Morphology");
-      expect(menu.element().childNodes[1].innerHTML).toEqual("<strong>M<mark>o</mark>rph<mark>o</mark>l<mark>o</mark>gy</strong><span>Example 2</span>");
+      expect(menu.element().childNodes[2].innerHTML).toEqual("<strong>M<mark>o</mark>rph<mark>o</mark>l<mark>o</mark>gy</strong><span>Example 2</span>");
       expect(menu.shownItem(0).active()).toBe(false);
       expect(menu.shownItem(1).name()).toEqual("Part-of-Speech");
-      expect(menu.element().childNodes[2].innerHTML).toEqual("<strong>Part-<mark>o</mark>f-Speech</strong>");
+      expect(menu.element().childNodes[3].innerHTML).toEqual("<strong>Part-<mark>o</mark>f-Speech</strong>");
       expect(menu.shownItem(1).active()).toBe(false);
       expect(menu.shownItem(2)).toBe(undefined);
 
       menu.next();
       expect(menu.shownItem(0).name()).toEqual("Constituency");
-      expect(menu.element().childNodes[1].innerHTML).toEqual("<strong>C<mark>o</mark>nstituency</strong><span>Example 1</span>");
+      expect(menu.element().childNodes[2].innerHTML).toEqual("<strong>C<mark>o</mark>nstituency</strong><span>Example 1</span>");
       expect(menu.shownItem(0).active()).toBe(true);
       expect(menu.shownItem(1).name()).toEqual("Morphology");
-      expect(menu.element().childNodes[2].innerHTML).toEqual("<strong>M<mark>o</mark>rph<mark>o</mark>l<mark>o</mark>gy</strong><span>Example 2</span>");
+      expect(menu.element().childNodes[3].innerHTML).toEqual("<strong>M<mark>o</mark>rph<mark>o</mark>l<mark>o</mark>gy</strong><span>Example 2</span>");
       expect(menu.shownItem(1).active()).toBe(false);
       expect(menu.shownItem(2)).toBe(undefined);
     });
@@ -690,20 +691,20 @@
       expect(menu.prefix("ex").show()).toBe(true);
 
       expect(menu.shownItem(0).name()).toEqual("Constituency");
-      expect(menu.element().childNodes[1].innerHTML).toEqual("<strong>Constituency</strong><span><mark>Ex</mark>ample 1</span>");
+      expect(menu.element().childNodes[2].innerHTML).toEqual("<strong>Constituency</strong><span><mark>Ex</mark>ample 1</span>");
       expect(menu.shownItem(0).active()).toBe(true);
       expect(menu.shownItem(1).name()).toEqual("Morphology");
-      expect(menu.element().childNodes[2].innerHTML).toEqual("<strong>Morphology</strong><span><mark>Ex</mark>ample 2</span>");
+      expect(menu.element().childNodes[3].innerHTML).toEqual("<strong>Morphology</strong><span><mark>Ex</mark>ample 2</span>");
       expect(menu.shownItem(1).active()).toBe(false);
       expect(menu.shownItem(2)).toBe(undefined);
 
       // Next (1)
       menu.next();
       expect(menu.shownItem(0).name()).toEqual("Constituency");
-      expect(menu.element().childNodes[1].innerHTML).toEqual("<strong>Constituency</strong><span><mark>Ex</mark>ample 1</span>");
+      expect(menu.element().childNodes[2].innerHTML).toEqual("<strong>Constituency</strong><span><mark>Ex</mark>ample 1</span>");
       expect(menu.shownItem(0).active()).toBe(false);
       expect(menu.shownItem(1).name()).toEqual("Morphology");
-      expect(menu.element().childNodes[2].innerHTML).toEqual("<strong>Morphology</strong><span><mark>Ex</mark>ample 2</span>");
+      expect(menu.element().childNodes[3].innerHTML).toEqual("<strong>Morphology</strong><span><mark>Ex</mark>ample 2</span>");
       expect(menu.shownItem(1).active()).toBe(true);
       expect(menu.shownItem(2)).toBe(undefined);
 
@@ -712,11 +713,11 @@
 
       expect(menu.prefix()).toEqual('ex');
       expect(menu.shownItem(0).name()).toEqual("Constituency");
-      expect(menu.element().childNodes[1].innerHTML).toEqual("<strong>Constituency</strong><span><mark>Ex</mark>ample 1</span>");
+      expect(menu.element().childNodes[2].innerHTML).toEqual("<strong>Constituency</strong><span><mark>Ex</mark>ample 1</span>");
       expect(menu.shownItem(0).active()).toBe(false);
 
       expect(menu.shownItem(1).name()).toEqual("Morphology");
-      expect(menu.element().childNodes[2].innerHTML).toEqual("<strong>Morphology</strong><span><mark>Ex</mark>ample 2</span>");
+      expect(menu.element().childNodes[3].innerHTML).toEqual("<strong>Morphology</strong><span><mark>Ex</mark>ample 2</span>");
       expect(menu.shownItem(1).active()).toBe(false);
       expect(menu.shownItem(2)).toBe(undefined);
 
@@ -727,10 +728,10 @@
       expect(menu.prefix("e").show()).toBe(true);
       expect(menu._prefix.active()).toBe(false);
       expect(menu.shownItem(0).name()).toEqual("Constituency");
-      expect(menu.element().childNodes[1].innerHTML).toEqual("<strong>Constitu<mark>e</mark>ncy</strong><span><mark>E</mark>xampl<mark>e</mark> 1</span>");
+      expect(menu.element().childNodes[2].innerHTML).toEqual("<strong>Constitu<mark>e</mark>ncy</strong><span><mark>E</mark>xampl<mark>e</mark> 1</span>");
       expect(menu.shownItem(0).active()).toBe(true);
       expect(menu.shownItem(1).name()).toEqual("Morphology");
-      expect(menu.element().childNodes[2].innerHTML).toEqual("<strong>Morphology</strong><span><mark>E</mark>xampl<mark>e</mark> 2</span>");
+      expect(menu.element().childNodes[3].innerHTML).toEqual("<strong>Morphology</strong><span><mark>E</mark>xampl<mark>e</mark> 2</span>");
       expect(menu.shownItem(1).active()).toBe(false);
       expect(menu.shownItem(2)).toBe(undefined);
 
@@ -739,10 +740,10 @@
       expect(menu._prefix.active()).toBe(false);
       expect(menu.prefix()).toEqual('e');
       expect(menu.shownItem(0).name()).toEqual("Constituency");
-      expect(menu.element().childNodes[1].innerHTML).toEqual("<strong>Constitu<mark>e</mark>ncy</strong><span><mark>E</mark>xampl<mark>e</mark> 1</span>");
+      expect(menu.element().childNodes[2].innerHTML).toEqual("<strong>Constitu<mark>e</mark>ncy</strong><span><mark>E</mark>xampl<mark>e</mark> 1</span>");
       expect(menu.shownItem(0).active()).toBe(false);
       expect(menu.shownItem(1).name()).toEqual("Morphology");
-      expect(menu.element().childNodes[2].innerHTML).toEqual("<strong>Morphology</strong><span><mark>E</mark>xampl<mark>e</mark> 2</span>");
+      expect(menu.element().childNodes[3].innerHTML).toEqual("<strong>Morphology</strong><span><mark>E</mark>xampl<mark>e</mark> 2</span>");
       expect(menu.shownItem(1).active()).toBe(true);
       expect(menu.shownItem(2)).toBe(undefined);
 
@@ -750,10 +751,10 @@
       menu.next();
       expect(menu._prefix.active()).toBe(true);
       expect(menu.shownItem(0).name()).toEqual("Constituency");
-      expect(menu.element().childNodes[1].innerHTML).toEqual("<strong>Constitu<mark>e</mark>ncy</strong><span><mark>E</mark>xampl<mark>e</mark> 1</span>");
+      expect(menu.element().childNodes[2].innerHTML).toEqual("<strong>Constitu<mark>e</mark>ncy</strong><span><mark>E</mark>xampl<mark>e</mark> 1</span>");
       expect(menu.shownItem(0).active()).toBe(false);
       expect(menu.shownItem(1).name()).toEqual("Morphology");
-      expect(menu.element().childNodes[2].innerHTML).toEqual("<strong>Morphology</strong><span><mark>E</mark>xampl<mark>e</mark> 2</span>");
+      expect(menu.element().childNodes[3].innerHTML).toEqual("<strong>Morphology</strong><span><mark>E</mark>xampl<mark>e</mark> 2</span>");
       expect(menu.shownItem(1).active()).toBe(false);
       expect(menu.shownItem(2)).toBe(undefined);
 
@@ -761,10 +762,10 @@
       menu.next();
       expect(menu._prefix.active()).toBe(false);
       expect(menu.shownItem(0).name()).toEqual("Constituency");
-      expect(menu.element().childNodes[1].innerHTML).toEqual("<strong>Constitu<mark>e</mark>ncy</strong><span><mark>E</mark>xampl<mark>e</mark> 1</span>");
+      expect(menu.element().childNodes[2].innerHTML).toEqual("<strong>Constitu<mark>e</mark>ncy</strong><span><mark>E</mark>xampl<mark>e</mark> 1</span>");
       expect(menu.shownItem(0).active()).toBe(true);
       expect(menu.shownItem(1).name()).toEqual("Morphology");
-      expect(menu.element().childNodes[2].innerHTML).toEqual("<strong>Morphology</strong><span><mark>E</mark>xampl<mark>e</mark> 2</span>");
+      expect(menu.element().childNodes[3].innerHTML).toEqual("<strong>Morphology</strong><span><mark>E</mark>xampl<mark>e</mark> 2</span>");
       expect(menu.shownItem(1).active()).toBe(false);
       expect(menu.shownItem(2)).toBe(undefined);
     });
@@ -787,13 +788,13 @@
       expect(menu.prefix()).toEqual("");
 
       expect(menu.shownItem(0).name()).toEqual("Titel");
-      expect(menu.element().childNodes[1].innerHTML).toEqual("<strong>Titel</strong>");
+      expect(menu.element().childNodes[2].innerHTML).toEqual("<strong>Titel</strong>");
       expect(menu.shownItem(0).active()).toBe(true);
       expect(menu.shownItem(1).name()).toEqual("Untertitel");
-      expect(menu.element().childNodes[2].innerHTML).toEqual("<strong>Untertitel</strong>");
+      expect(menu.element().childNodes[3].innerHTML).toEqual("<strong>Untertitel</strong>");
       expect(menu.shownItem(1).active()).toBe(false);
       expect(menu.shownItem(2).name()).toEqual("Veröffentlichungsdatum");
-      expect(menu.element().childNodes[3].innerHTML).toEqual("<strong>Veröffentlichungsdatum</strong>");
+      expect(menu.element().childNodes[4].innerHTML).toEqual("<strong>Veröffentlichungsdatum</strong>");
       expect(menu.shownItem(2).active()).toBe(false);
       expect(menu.shownItem(3)).toBe(undefined);
 
@@ -801,31 +802,31 @@
       expect(menu.show()).toBe(true);
       expect(menu.prefix()).toEqual("a");
       expect(menu.shownItem(0).name()).toEqual("Autor");
-      expect(menu.element().childNodes[1].innerHTML).toEqual("<strong><mark>A</mark>utor</strong>");
+      expect(menu.element().childNodes[2].innerHTML).toEqual("<strong><mark>A</mark>utor</strong>");
 
       menu._prefix.add('u');
       expect(menu.show()).toBe(true);
       expect(menu.prefix()).toEqual("au");
       expect(menu.shownItem(0).name()).toEqual("Autor");
-      expect(menu.element().childNodes[1].innerHTML).toEqual("<strong><mark>Au</mark>tor</strong>");
+      expect(menu.element().childNodes[2].innerHTML).toEqual("<strong><mark>Au</mark>tor</strong>");
 
       menu._prefix.chop();
       expect(menu.show()).toBe(true);
       expect(menu.prefix()).toEqual("a");
       expect(menu.shownItem(0).name()).toEqual("Autor");
-      expect(menu.element().childNodes[1].innerHTML).toEqual("<strong><mark>A</mark>utor</strong>");
+      expect(menu.element().childNodes[2].innerHTML).toEqual("<strong><mark>A</mark>utor</strong>");
 
       menu._prefix.chop();
       expect(menu.show()).toBe(true);
       expect(menu.prefix()).toEqual("");
       expect(menu.shownItem(0).name()).toEqual("Titel");
-      expect(menu.element().childNodes[1].innerHTML).toEqual("<strong>Titel</strong>");
+      expect(menu.element().childNodes[2].innerHTML).toEqual("<strong>Titel</strong>");
       expect(menu.shownItem(0).active()).toBe(true);
       expect(menu.shownItem(1).name()).toEqual("Untertitel");
-      expect(menu.element().childNodes[2].innerHTML).toEqual("<strong>Untertitel</strong>");
+      expect(menu.element().childNodes[3].innerHTML).toEqual("<strong>Untertitel</strong>");
       expect(menu.shownItem(1).active()).toBe(false);
       expect(menu.shownItem(2).name()).toEqual("Veröffentlichungsdatum");
-      expect(menu.element().childNodes[3].innerHTML).toEqual("<strong>Veröffentlichungsdatum</strong>");
+      expect(menu.element().childNodes[4].innerHTML).toEqual("<strong>Veröffentlichungsdatum</strong>");
       expect(menu.shownItem(2).active()).toBe(false);
       expect(menu.shownItem(3)).toBe(undefined);
 
@@ -834,26 +835,26 @@
       expect(menu.show()).toBe(true);
       expect(menu.prefix()).toEqual("");
       expect(menu.shownItem(0).name()).toEqual("Titel");
-      expect(menu.element().childNodes[1].innerHTML).toEqual("<strong>Titel</strong>");
+      expect(menu.element().childNodes[2].innerHTML).toEqual("<strong>Titel</strong>");
       expect(menu.shownItem(0).active()).toBe(true);
       expect(menu.shownItem(1).name()).toEqual("Untertitel");
-      expect(menu.element().childNodes[2].innerHTML).toEqual("<strong>Untertitel</strong>");
+      expect(menu.element().childNodes[3].innerHTML).toEqual("<strong>Untertitel</strong>");
       expect(menu.shownItem(1).active()).toBe(false);
       expect(menu.shownItem(2).name()).toEqual("Veröffentlichungsdatum");
-      expect(menu.element().childNodes[3].innerHTML).toEqual("<strong>Veröffentlichungsdatum</strong>");
+      expect(menu.element().childNodes[4].innerHTML).toEqual("<strong>Veröffentlichungsdatum</strong>");
       expect(menu.shownItem(2).active()).toBe(false);
 
       // Forward
       menu.next();
       expect(menu.prefix()).toEqual("");
       expect(menu.shownItem(0).name()).toEqual("Titel");
-      expect(menu.element().childNodes[1].innerHTML).toEqual("<strong>Titel</strong>");
+      expect(menu.element().childNodes[2].innerHTML).toEqual("<strong>Titel</strong>");
       expect(menu.shownItem(0).active()).toBe(false);
       expect(menu.shownItem(1).name()).toEqual("Untertitel");
-      expect(menu.element().childNodes[2].innerHTML).toEqual("<strong>Untertitel</strong>");
+      expect(menu.element().childNodes[3].innerHTML).toEqual("<strong>Untertitel</strong>");
       expect(menu.shownItem(1).active()).toBe(true);
       expect(menu.shownItem(2).name()).toEqual("Veröffentlichungsdatum");
-      expect(menu.element().childNodes[3].innerHTML).toEqual("<strong>Veröffentlichungsdatum</strong>");
+      expect(menu.element().childNodes[4].innerHTML).toEqual("<strong>Veröffentlichungsdatum</strong>");
       expect(menu.shownItem(2).active()).toBe(false);
       expect(menu.shownItem(3)).toBe(undefined);
 
@@ -861,13 +862,13 @@
       menu.next();
       expect(menu.prefix()).toEqual("");
       expect(menu.shownItem(0).name()).toEqual("Titel");
-      expect(menu.element().childNodes[1].innerHTML).toEqual("<strong>Titel</strong>");
+      expect(menu.element().childNodes[2].innerHTML).toEqual("<strong>Titel</strong>");
       expect(menu.shownItem(0).active()).toBe(false);
       expect(menu.shownItem(1).name()).toEqual("Untertitel");
-      expect(menu.element().childNodes[2].innerHTML).toEqual("<strong>Untertitel</strong>");
+      expect(menu.element().childNodes[3].innerHTML).toEqual("<strong>Untertitel</strong>");
       expect(menu.shownItem(1).active()).toBe(false);
       expect(menu.shownItem(2).name()).toEqual("Veröffentlichungsdatum");
-      expect(menu.element().childNodes[3].innerHTML).toEqual("<strong>Veröffentlichungsdatum</strong>");
+      expect(menu.element().childNodes[4].innerHTML).toEqual("<strong>Veröffentlichungsdatum</strong>");
       expect(menu.shownItem(2).active()).toBe(true);
       expect(menu.shownItem(3)).toBe(undefined);
 
@@ -875,13 +876,13 @@
       menu.next();
       expect(menu.prefix()).toEqual("");
       expect(menu.shownItem(0).name()).toEqual("Untertitel");
-      expect(menu.element().childNodes[1].innerHTML).toEqual("<strong>Untertitel</strong>");
+      expect(menu.element().childNodes[2].innerHTML).toEqual("<strong>Untertitel</strong>");
       expect(menu.shownItem(0).active()).toBe(false);
       expect(menu.shownItem(1).name()).toEqual("Veröffentlichungsdatum");
-      expect(menu.element().childNodes[2].innerHTML).toEqual("<strong>Veröffentlichungsdatum</strong>");
+      expect(menu.element().childNodes[3].innerHTML).toEqual("<strong>Veröffentlichungsdatum</strong>");
       expect(menu.shownItem(1).active()).toBe(false);
       expect(menu.shownItem(2).name()).toEqual("Länge");
-      expect(menu.element().childNodes[3].innerHTML).toEqual("<strong>Länge</strong>");
+      expect(menu.element().childNodes[4].innerHTML).toEqual("<strong>Länge</strong>");
       expect(menu.shownItem(2).active()).toBe(true);
       expect(menu.shownItem(3)).toBe(undefined);
 
@@ -889,13 +890,13 @@
       menu.next();
       expect(menu.prefix()).toEqual("");
       expect(menu.shownItem(0).name()).toEqual("Veröffentlichungsdatum");
-      expect(menu.element().childNodes[1].innerHTML).toEqual("<strong>Veröffentlichungsdatum</strong>");
+      expect(menu.element().childNodes[2].innerHTML).toEqual("<strong>Veröffentlichungsdatum</strong>");
       expect(menu.shownItem(0).active()).toBe(false);
       expect(menu.shownItem(1).name()).toEqual("Länge");
-      expect(menu.element().childNodes[2].innerHTML).toEqual("<strong>Länge</strong>");
+      expect(menu.element().childNodes[3].innerHTML).toEqual("<strong>Länge</strong>");
       expect(menu.shownItem(1).active()).toBe(false);
       expect(menu.shownItem(2).name()).toEqual("Autor");
-      expect(menu.element().childNodes[3].innerHTML).toEqual("<strong>Autor</strong>");
+      expect(menu.element().childNodes[4].innerHTML).toEqual("<strong>Autor</strong>");
       expect(menu.shownItem(2).active()).toBe(true);
       expect(menu.shownItem(3)).toBe(undefined);
 
@@ -903,13 +904,13 @@
       menu.next();
       expect(menu.prefix()).toEqual("");
       expect(menu.shownItem(0).name()).toEqual("Titel");
-      expect(menu.element().childNodes[1].innerHTML).toEqual("<strong>Titel</strong>");
+      expect(menu.element().childNodes[2].innerHTML).toEqual("<strong>Titel</strong>");
       expect(menu.shownItem(0).active()).toBe(true);
       expect(menu.shownItem(1).name()).toEqual("Untertitel");
-      expect(menu.element().childNodes[2].innerHTML).toEqual("<strong>Untertitel</strong>");
+      expect(menu.element().childNodes[3].innerHTML).toEqual("<strong>Untertitel</strong>");
       expect(menu.shownItem(1).active()).toBe(false);
       expect(menu.shownItem(2).name()).toEqual("Veröffentlichungsdatum");
-      expect(menu.element().childNodes[3].innerHTML).toEqual("<strong>Veröffentlichungsdatum</strong>");
+      expect(menu.element().childNodes[4].innerHTML).toEqual("<strong>Veröffentlichungsdatum</strong>");
       expect(menu.shownItem(2).active()).toBe(false);
     });
 
@@ -929,10 +930,10 @@
       expect(menu.prefix()).toEqual("el");
       expect(menu._prefix.active()).toEqual(false);
       expect(menu.shownItem(0).name()).toEqual("Titel");
-      expect(menu.element().childNodes[1].innerHTML).toEqual("<strong>Tit<mark>el</mark></strong>");
+      expect(menu.element().childNodes[2].innerHTML).toEqual("<strong>Tit<mark>el</mark></strong>");
       expect(menu.shownItem(0).active()).toBe(true);
       expect(menu.shownItem(1).name()).toEqual("Untertitel");
-      expect(menu.element().childNodes[2].innerHTML).toEqual("<strong>Untertit<mark>el</mark></strong>");
+      expect(menu.element().childNodes[3].innerHTML).toEqual("<strong>Untertit<mark>el</mark></strong>");
       expect(menu.shownItem(1).active()).toBe(false);
       expect(menu.shownItem(2)).toBe(undefined);
 
@@ -941,10 +942,10 @@
       expect(menu.prefix()).toEqual("el");
       expect(menu._prefix.active()).toEqual(false);
       expect(menu.shownItem(0).name()).toEqual("Titel");
-      expect(menu.element().childNodes[1].innerHTML).toEqual("<strong>Tit<mark>el</mark></strong>");
+      expect(menu.element().childNodes[2].innerHTML).toEqual("<strong>Tit<mark>el</mark></strong>");
       expect(menu.shownItem(0).active()).toBe(false);
       expect(menu.shownItem(1).name()).toEqual("Untertitel");
-      expect(menu.element().childNodes[2].innerHTML).toEqual("<strong>Untertit<mark>el</mark></strong>");
+      expect(menu.element().childNodes[3].innerHTML).toEqual("<strong>Untertit<mark>el</mark></strong>");
       expect(menu.shownItem(1).active()).toBe(true);
       expect(menu.shownItem(2)).toBe(undefined);
 
@@ -953,10 +954,10 @@
       expect(menu.prefix()).toEqual("el");
       expect(menu._prefix.active()).toEqual(true);
       expect(menu.shownItem(0).name()).toEqual("Titel");
-      expect(menu.element().childNodes[1].innerHTML).toEqual("<strong>Tit<mark>el</mark></strong>");
+      expect(menu.element().childNodes[2].innerHTML).toEqual("<strong>Tit<mark>el</mark></strong>");
       expect(menu.shownItem(0).active()).toBe(false);
       expect(menu.shownItem(1).name()).toEqual("Untertitel");
-      expect(menu.element().childNodes[2].innerHTML).toEqual("<strong>Untertit<mark>el</mark></strong>");
+      expect(menu.element().childNodes[3].innerHTML).toEqual("<strong>Untertit<mark>el</mark></strong>");
       expect(menu.shownItem(1).active()).toBe(false);
       expect(menu.shownItem(2)).toBe(undefined);
 
@@ -965,11 +966,11 @@
       expect(menu.prefix()).toEqual("el");
       expect(menu._prefix.active()).toEqual(false);
       expect(menu.shownItem(0).name()).toEqual("Titel");
-      expect(menu.element().childNodes[1].innerHTML).toEqual("<strong>Tit<mark>el</mark></strong>");
+      expect(menu.element().childNodes[2].innerHTML).toEqual("<strong>Tit<mark>el</mark></strong>");
       expect(menu.shownItem(0).active()).toBe(false);
 
       expect(menu.shownItem(1).name()).toEqual("Untertitel");
-      expect(menu.element().childNodes[2].innerHTML).toEqual("<strong>Untertit<mark>el</mark></strong>");
+      expect(menu.element().childNodes[3].innerHTML).toEqual("<strong>Untertit<mark>el</mark></strong>");
       expect(menu.shownItem(1).active()).toBe(true);
       expect(menu.shownItem(2)).toBe(undefined);
     });
@@ -988,10 +989,10 @@
       expect(menu.prefix()).toEqual("el");
       expect(menu._prefix.active()).toEqual(false);
       expect(menu.shownItem(0).name()).toEqual("Titel");
-      expect(menu.element().childNodes[1].innerHTML).toEqual("<strong>Tit<mark>el</mark></strong>");
+      expect(menu.element().childNodes[2].innerHTML).toEqual("<strong>Tit<mark>el</mark></strong>");
       expect(menu.shownItem(0).active()).toBe(true);
       expect(menu.shownItem(1).name()).toEqual("Untertitel");
-      expect(menu.element().childNodes[2].innerHTML).toEqual("<strong>Untertit<mark>el</mark></strong>");
+      expect(menu.element().childNodes[3].innerHTML).toEqual("<strong>Untertit<mark>el</mark></strong>");
       expect(menu.shownItem(1).active()).toBe(false);
       expect(menu.shownItem(2)).toBe(undefined);
 
@@ -1000,11 +1001,11 @@
       expect(menu._prefix.active()).toEqual(true);
 
       expect(menu.shownItem(0).name()).toEqual("Titel");
-      expect(menu.element().childNodes[1].innerHTML).toEqual("<strong>Tit<mark>el</mark></strong>");
+      expect(menu.element().childNodes[2].innerHTML).toEqual("<strong>Tit<mark>el</mark></strong>");
       expect(menu.shownItem(0).active()).toBe(false);
 
       expect(menu.shownItem(1).name()).toEqual("Untertitel");
-      expect(menu.element().childNodes[2].innerHTML).toEqual("<strong>Untertit<mark>el</mark></strong>");
+      expect(menu.element().childNodes[3].innerHTML).toEqual("<strong>Untertit<mark>el</mark></strong>");
       expect(menu.shownItem(1).active()).toBe(false);
       expect(menu.shownItem(2)).toBe(undefined);
 
@@ -1012,10 +1013,10 @@
       menu.prev();
       expect(menu._prefix.active()).toEqual(false);
       expect(menu.shownItem(0).name()).toEqual("Titel");
-      expect(menu.element().childNodes[1].innerHTML).toEqual("<strong>Tit<mark>el</mark></strong>");
+      expect(menu.element().childNodes[2].innerHTML).toEqual("<strong>Tit<mark>el</mark></strong>");
       expect(menu.shownItem(0).active()).toBe(false);
       expect(menu.shownItem(1).name()).toEqual("Untertitel");
-      expect(menu.element().childNodes[2].innerHTML).toEqual("<strong>Untertit<mark>el</mark></strong>");
+      expect(menu.element().childNodes[3].innerHTML).toEqual("<strong>Untertit<mark>el</mark></strong>");
       expect(menu.shownItem(1).active()).toBe(true);
       expect(menu.shownItem(2)).toBe(undefined);
     });
@@ -1032,10 +1033,10 @@
       expect(menu.prefix()).toEqual("el");
       expect(menu._prefix.active()).toEqual(false);
       expect(menu.shownItem(0).name()).toEqual("Titel");
-      expect(menu.element().childNodes[1].innerHTML).toEqual("<strong>Tit<mark>el</mark></strong>");
+      expect(menu.element().childNodes[2].innerHTML).toEqual("<strong>Tit<mark>el</mark></strong>");
       expect(menu.shownItem(0).active()).toBe(true);
       expect(menu.shownItem(1).name()).toEqual("Untertitel");
-      expect(menu.element().childNodes[2].innerHTML).toEqual("<strong>Untertit<mark>el</mark></strong>");
+      expect(menu.element().childNodes[3].innerHTML).toEqual("<strong>Untertit<mark>el</mark></strong>");
       expect(menu.shownItem(1).active()).toBe(false);
       expect(menu.shownItem(2)).toBe(undefined);
 
@@ -1043,10 +1044,10 @@
       menu.prev();
       expect(menu._prefix.active()).toEqual(true);
       expect(menu.shownItem(0).name()).toEqual("Titel");
-      expect(menu.element().childNodes[1].innerHTML).toEqual("<strong>Tit<mark>el</mark></strong>");
+      expect(menu.element().childNodes[2].innerHTML).toEqual("<strong>Tit<mark>el</mark></strong>");
       expect(menu.shownItem(0).active()).toBe(false);
       expect(menu.shownItem(1).name()).toEqual("Untertitel");
-      expect(menu.element().childNodes[2].innerHTML).toEqual("<strong>Untertit<mark>el</mark></strong>");
+      expect(menu.element().childNodes[3].innerHTML).toEqual("<strong>Untertit<mark>el</mark></strong>");
       expect(menu.shownItem(1).active()).toBe(false);
       expect(menu.shownItem(2)).toBe(undefined);
 
@@ -1056,10 +1057,10 @@
       expect(menu.prefix()).toEqual("el");
       expect(menu._prefix.active()).toEqual(false);
       expect(menu.shownItem(0).name()).toEqual("Titel");
-      expect(menu.element().childNodes[1].innerHTML).toEqual("<strong>Tit<mark>el</mark></strong>");
+      expect(menu.element().childNodes[2].innerHTML).toEqual("<strong>Tit<mark>el</mark></strong>");
       expect(menu.shownItem(0).active()).toBe(true);
       expect(menu.shownItem(1).name()).toEqual("Untertitel");
-      expect(menu.element().childNodes[2].innerHTML).toEqual("<strong>Untertit<mark>el</mark></strong>");
+      expect(menu.element().childNodes[3].innerHTML).toEqual("<strong>Untertit<mark>el</mark></strong>");
       expect(menu.shownItem(1).active()).toBe(false);
       expect(menu.shownItem(2)).toBe(undefined);
 
@@ -1147,4 +1148,38 @@
       expect(p.element().classList.contains('active')).toBeTruthy();
     });
   });
+
+  describe('KorAP.LengthField', function () {
+    it('should be initializable', function () {
+      var l = lengthFieldClass.create();
+      expect(l.element().classList.contains('lengthField')).toBeTruthy();
+      expect(l.element().children.length).toEqual(0);      
+    });
+
+    it('should be extensible', function () {
+      var l = lengthFieldClass.create();
+      l.add('Baum');
+      expect(l.element().children.length).toEqual(1);
+      expect(l.element().children[0].nodeName).toEqual('SPAN');
+      expect(l.element().children[0].textContent).toEqual('Baum-');
+      l.add('Fragezeichen');
+      expect(l.element().children.length).toEqual(2);
+      expect(l.element().children[1].nodeName).toEqual('SPAN');
+      expect(l.element().children[1].textContent).toEqual('Fragezeichen-');
+    });
+
+    it('should be correctly initializable', function () {
+      var list = [
+	["Constituency"],
+	["Lemma"],
+	["Morphology"],
+	["Part-of-Speech"],
+	["Syntax"]
+      ];
+
+      var menu = KorAP.OwnMenu.create(list);
+
+      expect(menu.lengthField().element().children.length).toEqual(5);
+    });
+  });
 });
diff --git a/dev/js/src/menu.js b/dev/js/src/menu.js
index 2d9aacb..a8cf26a 100644
--- a/dev/js/src/menu.js
+++ b/dev/js/src/menu.js
@@ -11,9 +11,11 @@
 define([
   'menu/item',
   'menu/prefix',
+  'menu/lengthField',
   'util'
 ], function (defaultItemClass,
-	     defaultPrefixClass) {
+	     defaultPrefixClass,
+	     lengthFieldClass) {
 
   // Default maximum number of menu items
   var menuLimit = 8;
@@ -156,13 +158,20 @@
       var that = this;
       this._itemClass = itemClass || defaultItemClass;
 
-      if (prefixClass !== undefined)
+      // Add prefix object
+      if (prefixClass !== undefined) {
 	this._prefix = prefixClass.create();
-      else
+      }
+      else {
 	this._prefix = defaultPrefixClass.create();
-
+      };
       this._prefix._menu = this;
 
+      // Add lengthField object
+      this._lengthField = lengthFieldClass.create();
+      this._lengthField._menu = this;
+
+
       var e = document.createElement("ul");
       e.style.opacity = 0;
       e.style.outline = 0;
@@ -170,6 +179,7 @@
       e.classList.add('menu');
       e.classList.add('roll');
       e.appendChild(this._prefix.element());
+      e.appendChild(this._lengthField.element());
 
       // This has to be cleaned up later on
       e["menu"] = this;
@@ -213,9 +223,10 @@
 
 	// This may become circular
 	obj["_menu"] = this;
-
+	this._lengthField.add(params[i][0]);
 	this._items.push(obj);
       };
+
       this._limit    = menuLimit;
       this._position = 0;  // position in the active list
       this._active   = -1; // active item in the item list
@@ -352,7 +363,6 @@
 	  this._list.push(i);
 	while (this._items[++i] !== undefined) {
 	  this._items[i].lowlight();
-	  // console.log(this._item);
 	};
 	return true;
       };
@@ -401,6 +411,12 @@
       return this._prefix.value();
     },
 
+    /**
+     * Get the lengthField object.
+     */
+    lengthField : function () {
+      return this._lengthField;
+    },
 
     // Append Items that should be shown
     _showItems : function (offset) {
@@ -449,7 +465,8 @@
 
       // Remove all children
       var children = this._element.childNodes;
-      for (var i = children.length - 1; i >= 1; i--) {
+      // Leave the prefix and lengthField
+      for (var i = children.length - 1; i >= 2; i--) {
 	this._element.removeChild(
 	  children[i]
 	);
@@ -479,10 +496,10 @@
 	item.highlight(this.prefix());
 
       var e = this.element();
-      // Append element
+      // Append element after lengthFiled/prefix
       e.insertBefore(
 	item.element(),
-	e.children[1]
+	e.children[2]
       );
     },
 
@@ -691,7 +708,8 @@
     // Remove the HTML node from the first item
     _removeFirst : function () {
       this.item(this._list[this._offset]).lowlight();
-      this._element.removeChild(this._element.children[1]);
+      // leave lengthField/prefix
+      this._element.removeChild(this._element.children[2]);
     },
 
 
diff --git a/dev/js/src/menu/lengthField.js b/dev/js/src/menu/lengthField.js
new file mode 100644
index 0000000..76958e4
--- /dev/null
+++ b/dev/js/src/menu/lengthField.js
@@ -0,0 +1,31 @@
+define({
+
+  /**
+   * Create new lengthField object.
+   */
+  create : function () {
+    return Object.create(this)._init();
+  },
+
+  // Initialize lengthField object
+  _init : function () {
+    this._element = document.createElement('div');
+    this._element.classList.add('lengthField');
+    return this;
+  },
+
+  /**
+   * Add string to lengthField.
+   */
+  add : function (string) {
+    this._element.appendChild(document.createElement('span'))
+      .appendChild(document.createTextNode(string + '-'));
+  },
+
+  /**
+   * Get the associated dom element.
+   */
+  element : function () {
+    return this._element;
+  }
+});
