diff --git a/dev/js/spec/matchSpec.js b/dev/js/spec/matchSpec.js
index 09c8da7..bee5f86 100644
--- a/dev/js/spec/matchSpec.js
+++ b/dev/js/spec/matchSpec.js
@@ -217,7 +217,7 @@
 
     it('should be initializable by Object', function () {
       expect(function() {
-	matchClass.create()
+	      matchClass.create()
       }).toThrow(new Error('Missing parameters'));
 
       expect(matchClass.create(match)).toBeTruthy();
diff --git a/dev/js/spec/vcSpec.js b/dev/js/spec/vcSpec.js
index 16ddf82..6f2c391 100644
--- a/dev/js/spec/vcSpec.js
+++ b/dev/js/spec/vcSpec.js
@@ -5,6 +5,8 @@
 
   var vcClass =          require('vc');
   var docClass =         require('vc/doc');
+  var menuClass =        require('vc/menu');
+  var prefixClass =      require('vc/prefix');
   var docGroupClass =    require('vc/docgroup');
   var unspecifiedClass = require('vc/unspecified');
   var operatorsClass =   require('vc/operators');
@@ -15,14 +17,14 @@
   buildFactory = function (objClass, defaults) {
     return {
       create : function (overwrites) {
-	var newObj = {};
-	for (var prop in defaults) {
-	  newObj[prop] = defaults[prop];
-	};
-	for (var prop in overwrites) {
-	  newObj[prop] = overwrites[prop];
-	};
-	return objClass.create().fromJson(newObj);
+	      var newObj = {};
+	      for (var prop in defaults) {
+	        newObj[prop] = defaults[prop];
+	      };
+	      for (var prop in overwrites) {
+	        newObj[prop] = overwrites[prop];
+	      };
+	      return objClass.create().fromJson(newObj);
       }
     }
   };
@@ -148,7 +150,7 @@
 
       // No valid string
       doc = stringFactory.create({
-	value : undefined
+	      value : undefined
       });
       expect(doc).toBeUndefined();
 
@@ -787,7 +789,7 @@
     });
   });
 
-  describe('KorAP.VirtualCollection', function () {
+  describe('KorAP.VirtualCorpus', function () {
     var simpleGroupFactory = buildFactory(docGroupClass, {
       "@type" : "koral:docGroup",
       "operation" : "operation:and",
@@ -2022,12 +2024,49 @@
       var sv = stringValClass.create();
       var count = 1;
       sv.store = function (value, regex) {
-	expect(regex).toBe(true);
-	expect(value).toBe('tree');
+	      expect(regex).toBe(true);
+	      expect(value).toBe('tree');
       };
       sv.regex(true);
       sv.value('tree');
       sv.element().lastChild.click();
     });
   });
+
+  // Check prefix
+  describe('KorAP.VC.Prefix', function () {
+
+    it('should be initializable', function () {
+      var p = prefixClass.create();
+      expect(p.element().classList.contains('pref')).toBeTruthy();
+      expect(p.isSet()).not.toBeTruthy();
+    });
+
+
+    it('should be clickable', function () {
+      var vc = vcClass.create([
+	      ['a', null],
+	      ['b', null],
+	      ['c', null]
+	    ]).fromJson();
+      expect(vc.element().firstChild.classList.contains('unspecified')).toBeTruthy();
+
+      // This should open up the menu
+      vc.element().firstChild.firstChild.click();
+      expect(vc.element().firstChild.firstChild.tagName).toEqual('UL');
+
+      KorAP._vcKeyMenu._prefix.clear();
+      KorAP._vcKeyMenu._prefix.add('x');
+
+      var prefElement = vc.element().querySelector('span.pref');
+      expect(prefElement.innerText).toEqual('x');
+
+      // This should add key 'x' to VC
+      prefElement.click();
+
+      expect(vc.element().firstChild.classList.contains('doc')).toBeTruthy();
+      expect(vc.element().firstChild.firstChild.className).toEqual('key');
+      expect(vc.element().firstChild.firstChild.innerText).toEqual('x');
+    });
+  });
 });
