diff --git a/dev/demo/alldemo.js b/dev/demo/alldemo.js
index d7e8525..25aade7 100644
--- a/dev/demo/alldemo.js
+++ b/dev/demo/alldemo.js
@@ -532,7 +532,7 @@
   }
 });
 
-// KorAP.currentQuery = queryExample;
+KorAP.currentQuery = queryExample;
 
 require(['app/en', 'init'], function (lang, init) {
   KorAP.hintArray = hintArray;
diff --git a/dev/demo/vcdemo.js b/dev/demo/vcdemo.js
index 53ab75e..73cb805 100644
--- a/dev/demo/vcdemo.js
+++ b/dev/demo/vcdemo.js
@@ -64,6 +64,35 @@
   ]
 };
 
+var collections = [
+  {
+    "statistics":{
+      "paragraphs":2034752,
+      "documents":196510,
+      "tokens":51545081,
+      "sentences":4116282
+    },
+    "query":[
+      {
+	"@value":{
+	  "@field":"korap:field#corpusID",
+	  "@value":"WPD",
+	  "@type":"korap:term"
+	},
+	"@type":"korap:meta-filter"
+      }
+    ],
+    "name":"Wikipedia",
+    "path":"Wikipedia",
+    "description":"Die freie Enzyklopädie",
+    "shared":false,
+    "managed":true,
+    "created":"2015-04-01T23:04:32.000+02:00",
+    "foundries":"",
+    "id":"ZGU0ZTllNTFkYzc3M2VhZmViYzdkYWE2ODI5NDc3NTk4NGQ1YThhOTMwOTNhOWYxNWMwN2M3Y2YyZmE3N2RlNQ=="
+  }
+];
+
 require(['vc','lib/domReady', 'lib/highlight/highlight.pack'], function (vcClass, domReady) {
 
   var loc = KorAP.Locale;
diff --git a/dev/js/src/api.js b/dev/js/src/api.js
index d6493cb..87073d6 100644
--- a/dev/js/src/api.js
+++ b/dev/js/src/api.js
@@ -10,6 +10,9 @@
 
   KorAP.API = KorAP.API || {};
 
+  /**
+   * Retrieve information about a match
+   */
   KorAP.API.getMatchInfo = function (match, param, cb) {
 
     // match is a KorAP.Match object
@@ -38,6 +41,16 @@
     KorAP.API.getJSON(url, cb);
   };
 
+  /**
+   * Retrieve information about collections
+   */
+  KorAP.API.getCollections = function (cb) {
+    KorAP.API.getJSON(KorAP.URL + '/collection', cb);
+  };
+
+  /**
+   * General method to retrieve JSON information
+   */
   KorAP.API.getJSON = function (url, onload) {
     var req = new XMLHttpRequest();
 
diff --git a/dev/js/src/init.js b/dev/js/src/init.js
index c960ec2..0f6c1e8 100644
--- a/dev/js/src/init.js
+++ b/dev/js/src/init.js
@@ -153,16 +153,19 @@
     // Initialize documentation links
     obj.tutorial.initDocLinks(document);
 
-/*
+    // There is a currentQuery
     if (KorAP.currentQuery !== undefined) {
-      var sb = document.getElementById('searchbar');
       var kq = document.createElement('div');
       kq.setAttribute('id', 'koralquery');
-      sb.parentNode.insertBefore(kq, sb.nextSibling);
-      kq.innerHTML = JSON.stringify(KorAP.currentQuery, null, '  ');
-      hljs.highlightBlock(kq);
+
+      var kqInner = document.createElement('div');
+      kq.appendChild(kqInner);
+      kqInner.innerHTML = JSON.stringify(KorAP.currentQuery, null, '  ');
+      hljs.highlightBlock(kqInner);
+
+      var sb = document.getElementById('search');
+      sb.insertBefore(kq, sb.firstChild);
     };
-*/
 
     /**
      * Add VC creation on submission.
@@ -192,12 +195,14 @@
 });
 
 // Render Virtual collection
+// TODO:: Use currentQuery!!!
 function _getCurrentVC (vcClass) {
   var vc = vcClass.create([
     ['title', 'string'],
     ['subTitle', 'string'],
     ['pubDate', 'date'],
-    ['author', 'string']
+    ['author', 'string'],
+    ['corpusID', 'string']
   ]);
   if (KorAP.currentVC !== undefined)
     vc.fromJson(KorAP.currentVC);
diff --git a/dev/js/src/vc/chooseitem.js b/dev/js/src/vc/chooseitem.js
new file mode 100644
index 0000000..81ee4ca
--- /dev/null
+++ b/dev/js/src/vc/chooseitem.js
@@ -0,0 +1,89 @@
+define(['menu/item', 'util'], function (itemClass) {
+
+  var loc = KorAP.Locale;
+
+  return {
+
+    /**
+     * Create new menu item.
+     * Pass two parameters: value and type.
+     * the value may be localized by a name in
+     * KorAP.Locale with the prefix 'VC_',
+     * e.g. 'VC_subTitle'.
+     */
+    create : function (params) {
+      return Object.create(itemClass)
+	.upgradeTo(this)
+	._init(params);
+    },
+
+    // Initialize item object
+    _init : function (params) {
+      if (params[0] === undefined)
+	throw new Error("Missing parameters");
+      
+      this._id  = params[0];
+      this._name = params[1];
+      this._desc  = params[2];
+
+      this._lcField =  ' ' + this._name.toLowerCase();
+      this._lcField += ' ' + this._desc.toLowerCase();
+
+      return this;
+    },
+
+    /**
+     * Override click event by passing all clicks
+     * to the menu object.
+     */
+    onclick : function (e) {
+      this.menu().release(
+	this._id,
+	this._name
+      );
+      e.halt();
+    },
+
+    /**
+     * Get the name of the item.
+     */
+    name : function () {
+      return this._name;
+    },
+
+    /**
+     * Get the identifier of the item.
+     */
+    id : function () {
+      return this._id;
+    },
+
+    /**
+     * Get the description of the item.
+     */
+    desc : function () {
+      return this._desc;
+    },
+
+    /**
+     * Get the HTML element associated with the item. 
+     */
+    element : function () {
+
+      // already defined
+      if (this._element !== undefined)
+	return this._element;
+
+      // Create list item
+      var li = document.createElement("li");
+      li.setAttribute("data-type", this._type);
+      li.setAttribute("data-key",  this._key);
+
+      // Connect action
+      li["onclick"] = this.onclick.bind(this);
+
+      li.ap   pendChild(document.createTextNode(this._name));
+      return this._element = li;
+    }
+  }
+});
diff --git a/dev/js/src/vc/choosemenu.js b/dev/js/src/vc/choosemenu.js
new file mode 100644
index 0000000..7e00d44
--- /dev/null
+++ b/dev/js/src/vc/choosemenu.js
@@ -0,0 +1,21 @@
+/**
+ * Menu showing all predefined virtual collections.
+ * THIS IS EXPERIMENTAL AND MAY BE REMOVED!
+ */
+define(['vc/menu', 'api'], function (menuClass, itemClass) {
+  return {
+    create : function (params) {
+      return Object.create(menuClass)
+	.upgradeTo(this)
+	._init(itemClass, undefined, params);
+    },
+
+    /**
+     * A click event was released
+     */
+    release : function (id, name) {
+      if (this._cb !== undefined)
+	this._cb(id, name);
+    }
+  };
+}); 
diff --git a/dev/scss/header/searchbar.scss b/dev/scss/header/searchbar.scss
index e0f241e..d383e73 100644
--- a/dev/scss/header/searchbar.scss
+++ b/dev/scss/header/searchbar.scss
@@ -74,21 +74,6 @@
   }
 }
 
-#koralquery {
-  margin-top: 10px;
-  margin-right: 40px;
-  border: {
-    radius: $standard-border-radius;
-    color: $dark-green;
-    style: solid;
-    width: $border-size;
-  }
-  white-space: pre;
-  background-color: $nearly-white;
-  color: $dark-grey;
-}
-
-
 /**
  * Checkbox styling
  * http://stackoverflow.com/questions/4148499/how-to-style-checkbox-using-css
diff --git a/dev/scss/main/koralquery.scss b/dev/scss/main/koralquery.scss
new file mode 100644
index 0000000..d569d77
--- /dev/null
+++ b/dev/scss/main/koralquery.scss
@@ -0,0 +1,19 @@
+@charset "utf-8";
+@import "../util";
+
+$border-size: 2px;
+
+#koralquery {
+  border: 1px solid $kwic-border;
+  white-space: pre;
+  background-color: $dark-orange;
+  > div {
+    background-color: $nearly-white;
+    margin: {
+      top: 2pt;
+      right: $right-match-distance; // 3em;
+      bottom: 2pt;
+      left: 2pt;
+    }
+  }
+}
diff --git a/dev/scss/main/main.scss b/dev/scss/main/main.scss
index f0ff84b..2bd308d 100644
--- a/dev/scss/main/main.scss
+++ b/dev/scss/main/main.scss
@@ -7,6 +7,7 @@
 @import "resultinfo"; // Information on results
 @import "sidebar";    // Navigation on the left side
 @import "tutorial";   // Embedded and non-embedded tutorial
+@import "koralquery"; // KoralQuery
 @import "alertify";
 
 div.intro {
