diff --git a/dev/js/spec/hintSpec.js b/dev/js/spec/hintSpec.js
index a78a835..3e95e55 100644
--- a/dev/js/spec/hintSpec.js
+++ b/dev/js/spec/hintSpec.js
@@ -1,3 +1,5 @@
+"use strict";
+
 define(['hint', 'hint/input', 'hint/contextanalyzer', 'hint/menu', 'hint/item'], function (hintClass, inputClass, contextClass, menuClass, menuItemClass) {
 
   function emitKeyboardEvent (element, type, keyCode) {
@@ -149,7 +151,7 @@
       // Intialize KorAP.context
       hintClass.create();
 
-      analyzer = contextClass.create(KorAP.context);
+      const analyzer = contextClass.create(KorAP.context);
       expect(analyzer.test("cnx/]cnx/c=")).toEqual("cnx/c=");
       expect(analyzer.test("cnx/c=")).toEqual("cnx/c=");
       expect(analyzer.test("cnx/c=np mate/m=mood:")).toEqual("mate/m=mood:");
@@ -171,6 +173,9 @@
 
 
   describe('KorAP.Hint', function () {
+
+    let input;
+    
     beforeAll(beforeAllFunc);
     afterAll(afterAllFunc);
 
@@ -387,6 +392,47 @@
       hint.active().hide();
       expect(hint.active()).toBeFalsy();
     });
+
+    it('should support prefix', function () {
+      const hint = hintClass.create({
+        inputField : input
+      });
+      hint.inputField().reset();
+
+      expect(hint.active()).toBeFalsy();
+
+      // show with context
+      hint.show(false);
+
+      expect(hint.active()).toBeTruthy();
+
+      const menu = hint.active();
+
+      expect(menu.element().nodeName).toEqual('UL');
+
+      menu.limit(8);
+
+      // view
+      menu.show();
+      
+      expect(menu.prefix()).toBe('');
+      expect(hint.active()).toBeTruthy();
+
+      // Type in prefix
+      hint.active().prefix("cor").show();
+      expect(hint.active().prefix()).toEqual("cor");
+
+      expect(input.value).toEqual("");
+      hint.active()._prefix.element().click();
+      expect(input.value).toEqual("cor");
+      expect(hint.active()).toBeFalsy();
+
+      // view
+      menu.show();
+      expect(menu.prefix()).toBe('');
+      
+    });
+
     
     xit('should remove all menus on escape');
   });
diff --git a/dev/js/src/hint/menu.js b/dev/js/src/hint/menu.js
index b7e0d49..89f1d10 100644
--- a/dev/js/src/hint/menu.js
+++ b/dev/js/src/hint/menu.js
@@ -21,7 +21,7 @@
      * Create new hint helper menu.
      */
     create : function (hint, context, params) {
-      var obj = Object.create(menuClass)
+      const obj = Object.create(menuClass)
 	        .upgradeTo(this)
 	        ._init(params, {
 	          itemClass : itemClass,
@@ -41,7 +41,7 @@
 
       // Focus on input field on hide
       obj.onHide = function () {
-        var h = this._hint;
+        const h = this._hint;
         h._inputField.element().focus();
         if (h.active() !== null) {
           if (h._alert.active) {
diff --git a/dev/js/src/hint/prefix.js b/dev/js/src/hint/prefix.js
index 5a83284..1a673f8 100644
--- a/dev/js/src/hint/prefix.js
+++ b/dev/js/src/hint/prefix.js
@@ -14,14 +14,15 @@
     /**
      * Override the prefix action.
      */
-    onclick : function () {
+    onclick : function (e) {
       const m = this.menu();
       const value = this.value();
       const h = m.hint();
-      m.hide();
-
       h.inputField().insert(value);
-      h.active = false;
+      h.active(null);
+      m.hide();
+      // h.unshow();
+      e.halt();
     }
   };
 });
