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
