diff --git a/Changes b/Changes
index eb4d59c..985c69e 100755
--- a/Changes
+++ b/Changes
@@ -1,5 +1,7 @@
-0.19 2016-04-20
+0.19 2016-04-28
         - Improved datepicker to enter date strings.
+	- Improved menus to have fixed length depending
+	  on entry list.
 
 0.18 2016-02-29
         - Support for dashes in identifiers.
diff --git a/dev/demo/menudemo.js b/dev/demo/menudemo.js
index 2d66de9..10bbe06 100644
--- a/dev/demo/menudemo.js
+++ b/dev/demo/menudemo.js
@@ -2,12 +2,14 @@
   baseUrl: '../js/src'
 });
 
-require(['menu','menu/item', 'menu/prefix'], function (menuClass, itemClass, prefixClass) {
+require(['menu','menu/item', 'menu/prefix', 'menu/lengthField'], function (menuClass, itemClass, prefixClass, lengthFieldClass) {
 
   var OwnMenuItemClass = {
+
     create : function (params) {
       return Object.create(itemClass).upgradeTo(this)._init(params);
     },
+
     content : function (content) {
       if (arguments.length === 1) {
         this._content = content;
@@ -51,7 +53,7 @@
     create : function (params) {
       var obj = Object.create(menuClass)
       .upgradeTo(this)
-      ._init(OwnMenuItemClass, OwnPrefixClass, params);
+      ._init(OwnMenuItemClass, OwnPrefixClass, lengthFieldClass, params);
       obj._firstActive = true;
       return obj;
     }
diff --git a/dev/js/spec/menuSpec.js b/dev/js/spec/menuSpec.js
index 30bf793..65fcc82 100644
--- a/dev/js/spec/menuSpec.js
+++ b/dev/js/spec/menuSpec.js
@@ -2,9 +2,9 @@
 
   var menuItemClass    = require('menu/item');
   var prefixClass      = require('menu/prefix');
-  var menuClass        = require('menu');
   var lengthFieldClass = require('menu/lengthField');
-
+  var menuClass        = require('menu');
+ 
   // The OwnMenu item
   KorAP.OwnMenuItem = {
     create : function (params) {
@@ -32,7 +32,7 @@
     create : function (params) {
       return Object.create(menuClass)
 	.upgradeTo(KorAP.OwnMenu)
-	._init(KorAP.OwnMenuItem, undefined, params);
+	._init(KorAP.OwnMenuItem, undefined, undefined, params);
     }
   };
 
@@ -106,7 +106,7 @@
     create : function (context, params) {
       var obj = Object.create(menuClass)
 	.upgradeTo(KorAP.HintMenu)
-	._init(KorAP.HintMenuItem, undefined, params);
+	._init(KorAP.HintMenuItem, undefined, undefined, params);
       obj._context = context;
       return obj;
     }
@@ -1158,14 +1158,14 @@
 
     it('should be extensible', function () {
       var l = lengthFieldClass.create();
-      l.add('Baum');
+      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[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-');
+      expect(l.element().children[1].textContent).toEqual('Fragezeichen--');
     });
 
     it('should be correctly initializable', function () {
diff --git a/dev/js/src/hint/lengthField.js b/dev/js/src/hint/lengthField.js
new file mode 100644
index 0000000..0662b89
--- /dev/null
+++ b/dev/js/src/hint/lengthField.js
@@ -0,0 +1,25 @@
+define(['menu/lengthField'], function (lengthFieldClass) {
+  return {
+
+    /**
+     * Create lengthField object for the hint helper menu.
+     */
+    create : function () {
+      return Object.create(lengthFieldClass).
+	upgradeTo(this)._init();
+    },
+
+    /**
+     * Override the prefix action.
+     */
+    add : function (param) {
+      this._element.appendChild(document.createElement('span'))
+	.appendChild(document.createTextNode(param[0] + '--'));
+
+      var desc = this._element.appendChild(document.createElement('span'));
+      desc.classList.add("desc");
+      desc.appendChild(document.createTextNode(param[2] + '--'));
+      this._element.appendChild(desc);
+    }
+  };
+});
diff --git a/dev/js/src/hint/menu.js b/dev/js/src/hint/menu.js
index 4704bd2..7d89e51 100644
--- a/dev/js/src/hint/menu.js
+++ b/dev/js/src/hint/menu.js
@@ -1,7 +1,10 @@
 /**
  * Hint menu
  */
-define(['menu', 'hint/item', 'hint/prefix'], function (menuClass, itemClass, prefixClass) {
+define(['menu',
+	'hint/item',
+	'hint/prefix',
+	'hint/lengthField'], function (menuClass, itemClass, prefixClass, lengthFieldClass) {
   return {
 
     /**
@@ -10,7 +13,7 @@
     create : function (hint, context, params) {
       var obj = Object.create(menuClass)
 	.upgradeTo(this)
-	._init(itemClass, prefixClass, params);
+	._init(itemClass, prefixClass, lengthFieldClass, params);
       obj._context = context;
       obj._element.classList.add('hint');
       obj._hint = hint;
diff --git a/dev/js/src/match/treemenu.js b/dev/js/src/match/treemenu.js
index 16f6306..fec7703 100644
--- a/dev/js/src/match/treemenu.js
+++ b/dev/js/src/match/treemenu.js
@@ -18,7 +18,7 @@
     create : function (info, params) {
       var obj = Object.create(menuClass)
 	.upgradeTo(this)
-	._init(itemClass, undefined, params);
+	._init(itemClass, undefined, undefined, params);
       obj.limit(6);
       obj._info = info;
 
diff --git a/dev/js/src/menu.js b/dev/js/src/menu.js
index a8cf26a..420d0bc 100644
--- a/dev/js/src/menu.js
+++ b/dev/js/src/menu.js
@@ -15,7 +15,7 @@
   'util'
 ], function (defaultItemClass,
 	     defaultPrefixClass,
-	     lengthFieldClass) {
+	     defaultLengthFieldClass) {
 
   // Default maximum number of menu items
   var menuLimit = 8;
@@ -154,7 +154,7 @@
     },
 
     // Initialize list
-    _init : function (itemClass, prefixClass, params) {
+    _init : function (itemClass, prefixClass, lengthFieldClass, params) {
       var that = this;
       this._itemClass = itemClass || defaultItemClass;
 
@@ -168,7 +168,12 @@
       this._prefix._menu = this;
 
       // Add lengthField object
-      this._lengthField = lengthFieldClass.create();
+      if (lengthFieldClass !== undefined) {
+	this._lengthField = lengthFieldClass.create();
+      }
+      else {
+	this._lengthField = defaultLengthFieldClass.create();
+      };
       this._lengthField._menu = this;
 
 
@@ -223,7 +228,7 @@
 
 	// This may become circular
 	obj["_menu"] = this;
-	this._lengthField.add(params[i][0]);
+	this._lengthField.add(params[i]);
 	this._items.push(obj);
       };
 
diff --git a/dev/js/src/menu/lengthField.js b/dev/js/src/menu/lengthField.js
index 76958e4..b05221f 100644
--- a/dev/js/src/menu/lengthField.js
+++ b/dev/js/src/menu/lengthField.js
@@ -15,11 +15,16 @@
   },
 
   /**
-   * Add string to lengthField.
+   * Upgrade this object to another object,
+   * while private data stays intact.
+   *
+   * @param {Object} An object with properties.
    */
-  add : function (string) {
-    this._element.appendChild(document.createElement('span'))
-      .appendChild(document.createTextNode(string + '-'));
+  upgradeTo : function (props) {
+    for (var prop in props) {
+      this[prop] = props[prop];
+    };
+    return this;
   },
 
   /**
@@ -27,5 +32,13 @@
    */
   element : function () {
     return this._element;
+  },
+
+  /**
+   * Add string to lengthField.
+   */
+  add : function (param) {
+    this._element.appendChild(document.createElement('span'))
+      .appendChild(document.createTextNode(param[0] + '--'));
   }
 });
diff --git a/dev/js/src/vc/chooseitem.js b/dev/js/src/vc/chooseitem.js
index 81ee4ca..b2d3c1b 100644
--- a/dev/js/src/vc/chooseitem.js
+++ b/dev/js/src/vc/chooseitem.js
@@ -82,7 +82,7 @@
       // Connect action
       li["onclick"] = this.onclick.bind(this);
 
-      li.ap   pendChild(document.createTextNode(this._name));
+      li.appendChild(document.createTextNode(this._name));
       return this._element = li;
     }
   }
diff --git a/dev/js/src/vc/choosemenu.js b/dev/js/src/vc/choosemenu.js
index 7e00d44..2ecb3b7 100644
--- a/dev/js/src/vc/choosemenu.js
+++ b/dev/js/src/vc/choosemenu.js
@@ -7,7 +7,7 @@
     create : function (params) {
       return Object.create(menuClass)
 	.upgradeTo(this)
-	._init(itemClass, undefined, params);
+	._init(itemClass, undefined, undefined, params);
     },
 
     /**
diff --git a/dev/js/src/vc/menu.js b/dev/js/src/vc/menu.js
index 17ad073..fddb3f0 100644
--- a/dev/js/src/vc/menu.js
+++ b/dev/js/src/vc/menu.js
@@ -6,7 +6,7 @@
     create : function (params) {
       var obj = Object.create(menuClass)
 	.upgradeTo(this)
-	._init(itemClass, undefined, params);
+	._init(itemClass, undefined, undefined, params);
       obj.limit(6);
 
       // This is only domspecific
diff --git a/dev/scss/header/menu.scss b/dev/scss/header/menu.scss
index 3652231..0016420 100644
--- a/dev/scss/header/menu.scss
+++ b/dev/scss/header/menu.scss
@@ -44,7 +44,6 @@
     line-height: 0;
     color: transparent;
   }
-  background-color: blue;
 }
 
 ul.menu > li,
