diff --git a/dev/js/spec/vcSpec.js b/dev/js/spec/vcSpec.js
index 1392a9b..0f454c4 100644
--- a/dev/js/spec/vcSpec.js
+++ b/dev/js/spec/vcSpec.js
@@ -2063,7 +2063,6 @@
 
     it('should have a classed element', function () {
       var sv = stringValClass.create();
-      console.log(sv.element());
       expect(sv.element().classList.contains('regex')).toBe(false);
       expect(sv.regex()).toBe(false);
       sv.toggleRegex();
@@ -2085,9 +2084,12 @@
   });
 
   describe('KorAP.VC.Menu', function () {
+
+    var vc;
+    
     it('should be initializable', function () {
 
-      var vc = vcClass.create([
+      vc = vcClass.create([
         ['a', 'text'],
         ['b', 'string'],
         ['c', 'date']
@@ -2121,6 +2123,34 @@
       expect(list.getElementsByTagName("LI")[1].innerText).toEqual('e');
       expect(list.getElementsByTagName("LI")[2].innerText).toEqual('f');
     });
+
+    // Reinitialize to make tests stable
+    vc = vcClass.create([
+      ['d', 'text'],
+      ['e', 'string'],
+      ['f', 'date']
+    ]).fromJson();
+
+    it('should be clickable on key', function () {
+
+      // Click on "d"
+      vc.element().firstChild.firstChild.getElementsByTagName("LI")[0].click();
+      expect(vc.element().firstChild.firstChild.tagName).toEqual('SPAN');
+      expect(vc.element().firstChild.firstChild.innerText).toEqual('d');
+      expect(vc.element().firstChild.children[1].innerText).toEqual('eq');
+      expect(vc.element().firstChild.children[1].getAttribute('data-type')).toEqual('text');
+    });
+
+    it('should be clickable on operation', function () {
+      vc.element().firstChild.children[1].click();
+      expect(vc.element().firstChild.children[1].tagName).toEqual('UL');
+      var ul = vc.element().firstChild.children[1];
+      expect(ul.getElementsByTagName('li')[0].innerText).toEqual("eq");
+      expect(ul.getElementsByTagName('li')[1].innerText).toEqual("ne");
+      expect(ul.getElementsByTagName('li')[2].innerText).toEqual("contains");
+      expect(ul.getElementsByTagName('li')[3].innerText).toEqual("containsnot");
+      expect(ul.getElementsByTagName('li')[4]).toBeUndefined();
+    })
   });
 
   
diff --git a/dev/js/src/vc.js b/dev/js/src/vc.js
index 77f6a26..18c621a 100644
--- a/dev/js/src/vc.js
+++ b/dev/js/src/vc.js
@@ -138,7 +138,6 @@
      */
     create : function (keyList) {
       var obj = Object.create(this)._init(keyList);
-      console.log(keyList);
       obj._root = unspecDocClass.create(obj);
       return obj;
     },
diff --git a/dev/js/src/vc/array.js b/dev/js/src/vc/array.js
index 9c7bf4d..8a47a3d 100644
--- a/dev/js/src/vc/array.js
+++ b/dev/js/src/vc/array.js
@@ -2,19 +2,19 @@
   return [
     // layerInfo                   // stored
     // tokenSource                 // stored
-    ['author', 'string'],          // text
+    ['author', 'text'],            // text
     // ['biblEditionStatement', 'string'], // stored
-    ['corpusAuthor', 'string'],    // text
+    ['corpusAuthor', 'text'],      // text
     // ['corpusEditor', 'string'], // stored
     ['corpusSigle', 'string'],     // string 
-    ['corpusSubTitle', 'string'],  // text
-    ['corpusTitle', 'string'],     // text
+    ['corpusSubTitle', 'text']  ,  // text
+    ['corpusTitle', 'text'],       // text
     ['creationDate', 'date'],      // int
-    ['docAuthor', 'string'],       // text
+    ['docAuthor', 'text'],         // text
     // ['docEditor', 'string'],    // stored
     ['docSigle', 'string'],        // string
-    ['docSubTitle', 'string'],     // text
-    ['docTitle', 'string'],        // text
+    ['docSubTitle', 'text'],       // text
+    ['docTitle', 'text'],          // text
     // ['editor', 'string'],       // stored
     // ['fileEditionStatement', 'string'], // stored
     ['foundries', 'string'],       // keywords
@@ -26,7 +26,7 @@
     // ['publisher', 'string'],    // stored
     ['pubPlace', 'string'],        // string
     // ['reference', 'string'],    // stored
-    ['subTitle', 'string'],        // text
+    ['subTitle', 'text'],          // text
     ['textClass', 'string'],       // keyword
     ['textColumn', 'string'],      // string
     ['textDomain', 'string'],      // string
@@ -34,6 +34,6 @@
     ['textType', 'string'],        // string
     ['textTypeArt', 'string'],     // string
     ['textTypeRef', 'string'],     // string
-    ['title', 'string']            // text
+    ['title', 'text']              // text
   ]
 });
diff --git a/dev/js/src/vc/doc.js b/dev/js/src/vc/doc.js
index f3e5559..f173de8 100644
--- a/dev/js/src/vc/doc.js
+++ b/dev/js/src/vc/doc.js
@@ -9,7 +9,6 @@
   'util'
 ], function (jsonldClass, rewriteListClass, stringValClass) {
 
-  _validRegexMatchRE  = new RegExp("^(?:eq|ne)$");
 
   const loc = KorAP.Locale;
   loc.EMPTY = loc.EMPTY || '⋯';
@@ -253,7 +252,7 @@
             // Try to create a regular expression
             var check = new RegExp(json["value"]);
 
-            if (!_validRegexMatchRE.test(this.matchop())) {
+            if (!KorAP._validStringMatchRE.test(this.matchop())) {
               KorAP.log(802, "Match type is not supported by value type");
 
               // Rewrite method
diff --git a/dev/js/src/vc/item.js b/dev/js/src/vc/item.js
index d2c6fc1..f9267e8 100644
--- a/dev/js/src/vc/item.js
+++ b/dev/js/src/vc/item.js
@@ -80,7 +80,8 @@
 
       // Create list item
       var li = document.createElement("li");
-      li.setAttribute("data-type", this._type);
+      if (this._type)
+        li.setAttribute("data-type", this._type);
       li.setAttribute("data-key",  this._key);
 
       // Connect action
diff --git a/dev/js/src/vc/unspecified.js b/dev/js/src/vc/unspecified.js
index daa7c88..0395685 100644
--- a/dev/js/src/vc/unspecified.js
+++ b/dev/js/src/vc/unspecified.js
@@ -120,7 +120,6 @@
 
       // Get the key menu
       var menu = KorAP._vcKeyMenu;
-
       // Add key menu element at the correct position
       this._element.insertBefore(
 	      menu.element(),	
