Added lengthFieldClass indirection
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