diff --git a/Changes b/Changes
index db042e6..c615780 100755
--- a/Changes
+++ b/Changes
@@ -4,6 +4,7 @@
 	  even if list can't be filtered.
 	- Fixed choosable prefixes in hint menu.
 	- Improve pageup/pagedown behaviour in menus.
+	- Fix prefix o support case sensitivity in menus.
 
 0.19 2016-04-28
         - Improved datepicker to enter date strings.
diff --git a/dev/js/spec/menuSpec.js b/dev/js/spec/menuSpec.js
index 327dd6c..2b3fcf3 100644
--- a/dev/js/spec/menuSpec.js
+++ b/dev/js/spec/menuSpec.js
@@ -922,10 +922,11 @@
       expect(menu.show()).toBe(true);
       expect(menu.prefix()).toEqual("");
 
-      menu.prefix('el');
+      // Add prefix in uppercase - but check in lowercase
+      menu.prefix('El');
       expect(menu.show()).toBe(true);
 
-      expect(menu.prefix()).toEqual("el");
+      expect(menu.prefix()).toEqual("El");
       expect(menu._prefix.active()).toEqual(false);
       expect(menu.shownItem(0).name()).toEqual("Titel");
       expect(menu.element().childNodes[3].innerHTML).toEqual("<strong>Tit<mark>el</mark></strong>");
@@ -937,7 +938,7 @@
 
       // Forward
       menu.next();
-      expect(menu.prefix()).toEqual("el");
+      expect(menu.prefix()).toEqual("El");
       expect(menu._prefix.active()).toEqual(false);
       expect(menu.shownItem(0).name()).toEqual("Titel");
       expect(menu.element().childNodes[3].innerHTML).toEqual("<strong>Tit<mark>el</mark></strong>");
@@ -949,7 +950,7 @@
 
       // Forward
       menu.next();
-      expect(menu.prefix()).toEqual("el");
+      expect(menu.prefix()).toEqual("El");
       expect(menu._prefix.active()).toEqual(true);
       expect(menu.shownItem(0).name()).toEqual("Titel");
       expect(menu.element().childNodes[3].innerHTML).toEqual("<strong>Tit<mark>el</mark></strong>");
@@ -961,7 +962,7 @@
 
       // Backward
       menu.prev();
-      expect(menu.prefix()).toEqual("el");
+      expect(menu.prefix()).toEqual("El");
       expect(menu._prefix.active()).toEqual(false);
       expect(menu.shownItem(0).name()).toEqual("Titel");
       expect(menu.element().childNodes[3].innerHTML).toEqual("<strong>Tit<mark>el</mark></strong>");
diff --git a/dev/js/src/menu.js b/dev/js/src/menu.js
index 0b013b9..7b2f779 100644
--- a/dev/js/src/menu.js
+++ b/dev/js/src/menu.js
@@ -12,7 +12,6 @@
  * TODO: next and prev should use an optimized version of _screen
  * TODO: On next and prev the viewport should move
  *       to the active item.
- * TODO: pageUp and pageDown should use _screen
  * TODO: Ignore keys with function key combinations (other than shift)
  * TODO: Show the slider briefly on move (whenever screen is called).
  */
@@ -181,21 +180,22 @@
        * There is a prefix set, so filter the list!
        */
       var pos;
-      var paddedPrefix = " " + this.prefix();
+      var prefix = " " + this.prefix().toLowerCase();
 
       // Iterate over all items and choose preferred matching items
       // i.e. the matching happens at the word start
       for (pos = 0; pos < this._items.length; pos++) {
-	if ((this.item(pos).lcField().indexOf(paddedPrefix)) >= 0)
+	if ((this.item(pos).lcField().indexOf(prefix)) >= 0)
 	  this._list.push(pos);
       };
 
       // The list is empty - so lower your expectations
       // Iterate over all items and choose matching items
       // i.e. the matching happens anywhere in the word
+      prefix = prefix.substring(1);
       if (this._list.length == 0) {
 	for (pos = 0; pos < this._items.length; pos++) {
-	  if ((this.item(pos).lcField().indexOf(this.prefix())) >= 0)
+	  if ((this.item(pos).lcField().indexOf(prefix)) >= 0)
 	    this._list.push(pos);
 	};
       };
@@ -311,7 +311,7 @@
     // Add characters to prefix
     _keypress : function (e) {
       e.halt();
-      var c = String.fromCharCode(_codeFromEvent(e)).toLowerCase();
+      var c = String.fromCharCode(_codeFromEvent(e)); // .toLowerCase();
 
       // Add prefix
       this._prefix.add(c);
@@ -761,7 +761,7 @@
     _reset : function () {
       this._offset = 0;
       this._pos    = 0;
-      this._prefix.value('');
+      this._prefix.clear();
     },
 
 
@@ -806,7 +806,7 @@
 
       // Highlight based on prefix
       if (this.prefix().length > 0)
-	item.highlight(this.prefix());
+	item.highlight(this.prefix().toLowerCase());
 
       // Append element
       this.element().appendChild(item.element());
@@ -819,7 +819,7 @@
 
       // Highlight based on prefix
       if (this.prefix().length > 0)
-	item.highlight(this.prefix());
+	item.highlight(this.prefix().toLowerCase());
 
       var e = this.element();
       // Append element after lengthField/prefix/slider
