diff --git a/public/css/vc.css b/public/css/vc.css
index 0b25c66..2b8058c 100644
--- a/public/css/vc.css
+++ b/public/css/vc.css
@@ -146,22 +146,51 @@
   z-index: 30;
 }
 
-.docGroup .docGroup > .operators {
+.docGroup
+.docGroup > .operators {
   z-index: 31;
 }
 
-.docGroup .docGroup .docGroup > .operators {
+.docGroup
+.docGroup
+.docGroup > .operators {
   z-index: 32;
 }
 
-.docGroup .docGroup .docGroup .docGroup > .operators {
+.docGroup
+.docGroup
+.docGroup
+.docGroup > .operators {
   z-index: 33;
 }
 
-.docGroup .docGroup .docGroup .docGroup .docGroup > .operators {
+.docGroup
+.docGroup
+.docGroup
+.docGroup
+.docGroup > .operators {
   z-index: 34;
 }
 
+.docGroup
+.docGroup
+.docGroup
+.docGroup
+.docGroup
+.docGroup > .operators {
+  z-index: 35;
+}
+
+.docGroup
+.docGroup
+.docGroup
+.docGroup
+.docGroup
+.docGroup
+.docGroup > .operators {
+  z-index: 36;
+}
+
 .vc .doc > span.key,
 .vc .doc > span.value {
   font-weight: bold;
diff --git a/public/js/spec/vcSpec.js b/public/js/spec/vcSpec.js
index 32a018f..4ac18a8 100644
--- a/public/js/spec/vcSpec.js
+++ b/public/js/spec/vcSpec.js
@@ -1421,7 +1421,57 @@
     expect(fc.lastChild.getAttribute('class')).toEqual('operators');
   });
 
-  // Todo: wrap on root!!
+  it ('should wrap on group (case "and")', function () {
+    var vc = complexVCFactory.create();
+
+    // Wrap with direct element access
+    expect(vc.toQuery()).toEqual(
+      'pubDate in 2014-12-05 & (title = "Hello World!" | foo = "bar")'
+    );
+
+    // Add unspecified
+    KorAP._and.bind(vc.root().getOperand(1).element().lastChild.firstChild).apply();
+    expect(vc.toQuery()).toEqual(
+      'pubDate in 2014-12-05 & (title = "Hello World!" | foo = "bar")'
+    );
+    expect(vc.root().ldType()).toEqual('docGroup');
+    expect(vc.root().getOperand(1).ldType()).toEqual('docGroup');
+    expect(vc.root().getOperand(1).operation()).toEqual('and');
+/*
+    expect(vc.root().operation()).toEqual('and');
+*/
+  });
+
+/*
+  it ('should wrap on root', function () {
+    var vc = KorAP.VirtualCollection.render(
+      {
+	"@type": 'korap:docGroup',
+	'operation' : 'operation:and',
+	'operands' : [
+	  {
+	    "@type": 'korap:doc',
+	    "key": 'pubDate',
+	    "match": 'match:eq',
+	    "value": '2014-12-05',
+	    "type": 'type:date'
+	  },
+	  {
+	    "@type" : 'korap:doc',
+	    'key' : 'foo',
+	    'value' : 'bar'
+	  }
+	]
+      }
+    );
+
+    // Delete with direct element access
+    expect(vc.toQuery()).toEqual('pubDate in 2014-12-05 & foo = "bar"');
+    KorAP._or.bind(vc.root().element().lastChild.lastChild).apply();
+    expect(vc.root().ldType()).toEqual('docGroup');
+    expect(vc.root().operation()).toEqual('or');
+  });
+*/
 });
 
 /*
diff --git a/public/js/src/vc.js b/public/js/src/vc.js
index 09d20ea..d9cde4e 100644
--- a/public/js/src/vc.js
+++ b/public/js/src/vc.js
@@ -59,17 +59,28 @@
   // Add doc
   KorAP._add = function (obj, type) {
     var ref = obj.parentNode.refTo;
+    var parent = ref.parent();
     if (ref.ldType() === 'docGroup') {
-      console.log('~~~~~~~~~');
-    }
-    else if (ref.ldType() === 'doc') {
-      var parent = ref.parent();
-// Todo: Check if parent is a group
-      if (parent.operation() === type) {
-	  parent.newAfter(ref);
+
+      // Check that the action differs from the type
+      if (ref.operation() === type)
+	return;
+
+      if (parent.ldType() !== null) {
+	return parent.newAfter(ref);
       }
       else {
-	ref.wrap(type);
+	// The group is on root - wrap
+	return ref.wrapOnRoot();
+      };
+    }
+    else if (ref.ldType() === 'doc') {
+// Todo: Check if parent is a group
+      if (parent.operation() === type) {
+	return parent.newAfter(ref);
+      }
+      else {
+	return ref.wrap(type);
       };
     };
   };
@@ -148,8 +159,11 @@
       if (arguments.length === 1) {
 	var e = this.element();
 	if (e.firstChild !== null) {
-	  if (e.firstChild !== obj.element())
+	  console.log(e.firstChild);
+	  if (e.firstChild !== obj.element()) {
+console.log(e.firstChild);
 	    e.replaceChild(obj.element(), e.firstChild);
+	  };
 	}
 
 	// Append root element
@@ -714,6 +728,22 @@
       };
     },
 
+    // Wrap a new operation around the root group element 
+    wrapOnRoot : function () {
+      var parent = this.parent();
+
+      var group = KorAP.DocGroup.create(parent);
+      group.operation(
+	this.operation() === 'and' ? 'or' : 'and'
+      );
+      group.append(this);
+      this.parent(group);
+      group.append();
+      group.element(); // Init (seems to be necessary)
+      parent.root(group);
+      return this.parent();
+    },
+
     update : function () {
       // There is only one operand in group
       if (this._operands.length === 1) {
