diff --git a/Changes b/Changes
index b96ad94..f8944ae 100644
--- a/Changes
+++ b/Changes
@@ -1,65 +1,69 @@
+0.30 2018-07-31
+    - Introduced docGroupRef and added VC reference in collection query (margaretha)
+    - Fixed checking error in QuerySerializer (margaretha)
+
 0.29 2018-07-23
-  - Added check for errors on QuerySerializer object (diewald)
-  - Support verbatim string values in Poliqarp
+    - Added check for errors on QuerySerializer object (diewald)
+    - Support verbatim string values in Poliqarp
     (fixes #42; diewald)
-  - Fix support for verbatim string values in collection queries
+    - Fix support for verbatim string values in collection queries
     (diewald)
 
 0.28 2018-01-10
-	- Added some enums for koral:operation (margaretha)
-	- Fixed node serialization of Annis QL containing lemma (margaretha)
-	- Added serialization for Annis keyword "lemma" (margaretha)
-	- Removed version from FCSQL processor (margaretha)
-	- Fixed Annis regex bug regarding slash after foundry (margaretha)
-  - Fixed use of regular expressions in corpus queries
-    (margaretha, diewald)
-  - Fixed treatment of 'AND' and 'and' in vc serialization (diewald)
-	
+    - Added some enums for koral:operation (margaretha)
+    - Fixed node serialization of Annis QL containing lemma (margaretha)
+    - Added serialization for Annis keyword "lemma" (margaretha)
+    - Removed version from FCSQL processor (margaretha)
+    - Fixed Annis regex bug regarding slash after foundry (margaretha)
+    - Fixed use of regular expressions in corpus queries
+      (margaretha, diewald)
+    - Fixed treatment of 'AND' and 'and' in vc serialization (diewald)
+    
 0.27 2017-09-12
-	- Changed Cosmas2 wildcards serialization as regex (margaretha)  
-	- Fixed OP IN with classRefCheck.INCLUDES (margaretha)
-	- Implemented OP PV with exclusion (margaretha)
-	
+    - Changed Cosmas2 wildcards serialization as regex (margaretha)  
+    - Fixed OP IN with classRefCheck.INCLUDES (margaretha)
+    - Implemented OP PV with exclusion (margaretha)
+    
 0.26 2017-06-29
-	- Updated collection query grammar (margaretha)
-	- Updated maven dependency phase (margaretha)
+    - Updated collection query grammar (margaretha)
+    - Updated maven dependency phase (margaretha)
     - Fixed handling of non-necessary brackets in tokens (diewald)
     - Improved error handling (margaretha)
     - Added wrap to koral:span serialization (margaretha)
 
 0.25 2017-05-10
-	- Altered dominance and relation serialization (margaretha)
-	 
+    - Altered dominance and relation serialization (margaretha)
+     
 0.24 2017-05-03
-	- Fixed serialization of regexes for VCs (diewald)	
-	- Implemented exclusion in Cosmas2 IN operation (margaretha)
-	- Restructured test suite (margaretha)
-	
+    - Fixed serialization of regexes for VCs (diewald)    
+    - Implemented exclusion in Cosmas2 IN operation (margaretha)
+    - Restructured test suite (margaretha)
+    
 0.23 2016-10-27
-	- Added tests and comments for FCSQL (margaretha)
-	- Added quantifier for FCSQL QueryGroup (margaretha)
-	- Improved Poliqarp+ test suite (diewald)
-  - Removed redundant min serialization in repetitions (diewald)
+    - Added tests and comments for FCSQL (margaretha)
+    - Added quantifier for FCSQL QueryGroup (margaretha)
+    - Improved Poliqarp+ test suite (diewald)
+    - Removed redundant min serialization in repetitions (diewald)
 
 0.22 2016-06-15
     - Spans now always wrap terms (diewald)
-	- Cosmas-II "und", "oder", and "nicht" operations
-	  now serialize to unordered sequences (diewald)
-	- Cleanup POM (diewald)
-	- Fixed deserialization of unnecessary brackets
-	  around terms and termGroups in Poliqarp (diewald)
-	- Support for FCS 2.0 (margaretha)
-	- Fixed handling of escapes in regex
-	  (issue #21; diewald)
+    - Cosmas-II "und", "oder", and "nicht" operations
+      now serialize to unordered sequences (diewald)
+    - Cleanup POM (diewald)
+    - Fixed deserialization of unnecessary brackets
+      around terms and termGroups in Poliqarp (diewald)
+    - Support for FCS 2.0 (margaretha)
+    - Fixed handling of escapes in regex
+      (issue #21; diewald)
 
 0.21 2015-10-27
     - Improved meta query builder (hanl)
 
 0.2 2015-06-25
-        - Switch to "koral:" prefix (bingel)
-	- Coverage of KoralQuery 0.3
-	  (see http://korap.github.io/Koral/)
-          (bingel)
+    - Switch to "koral:" prefix (bingel)
+    - Coverage of KoralQuery 0.3
+      (see http://korap.github.io/Koral/)
+      (bingel)
 
 0.1 2015-02-10
-        - First version published to GitHub (bingel)
+    - First version published to GitHub (bingel)
diff --git a/pom.xml b/pom.xml
index 7cffd74..4661e94 100644
--- a/pom.xml
+++ b/pom.xml
@@ -4,7 +4,7 @@
 
 	<groupId>de.ids_mannheim.korap</groupId>
 	<artifactId>Koral</artifactId>
-	<version>0.29</version>
+	<version>0.30</version>
 	<packaging>jar</packaging>
 	<name>Koral</name>
 	<url>http://maven.apache.org</url>
diff --git a/src/main/antlr/collection/CollectionQueryLexer.g4 b/src/main/antlr/collection/CollectionQueryLexer.g4
index 546bcc4..b286288 100644
--- a/src/main/antlr/collection/CollectionQueryLexer.g4
+++ b/src/main/antlr/collection/CollectionQueryLexer.g4
@@ -45,6 +45,7 @@
 UNTIL				: 'until';
 IN					: 'in';
 ON					: 'on';
+REF                 : 'referTo';
 WS 					: ( ' ' | '\t' | '\r' | '\n' )+ -> channel(HIDDEN);
 fragment NO_RE      : ~[ \t\/];
 fragment ALPHABET   : ~('\t' | ' ' | '/' | '*' | '?' | '+' | '{' | '}' | '[' | ']'
@@ -66,7 +67,4 @@
 WORD				: ALPHABET+;
 //WORD                : ALPHABET* ALPHA ALPHABET*;  // needs to have at least one alphabetical letter (non-numeric)
 
-REGEX     		     : SLASH .*? SLASH; 
-
-
-
+REGEX     		    : SLASH .*? SLASH; 
diff --git a/src/main/antlr/collection/CollectionQueryParser.g4 b/src/main/antlr/collection/CollectionQueryParser.g4
index 074f5aa..4999d25 100644
--- a/src/main/antlr/collection/CollectionQueryParser.g4
+++ b/src/main/antlr/collection/CollectionQueryParser.g4
@@ -27,15 +27,24 @@
 | ON
 ;
 
+vcOp
+: REF
+;
+
 operator
 :	(NEG? EQ) | LT | GT | LEQ | GEQ | TILDE | NEGTILDE;
 
 expr
 : constraint
 | dateConstraint
+| vcConstraint
 | token
 ;
 
+vcConstraint
+: vcOp vcName 
+;
+
 dateConstraint
 : field dateOp date
 //| date dateOp field dateOp date
@@ -45,6 +54,11 @@
 : field operator value flag?
 ;
 
+vcName
+: WORD
+| WORD SLASH WORD
+;
+
 token
 : LB (term|termGroup) RB
 ;
diff --git a/src/main/java/de/ids_mannheim/korap/query/object/KoralType.java b/src/main/java/de/ids_mannheim/korap/query/object/KoralType.java
index beb76ab..cfa0f97 100644
--- a/src/main/java/de/ids_mannheim/korap/query/object/KoralType.java
+++ b/src/main/java/de/ids_mannheim/korap/query/object/KoralType.java
@@ -10,7 +10,8 @@
     TERMGROUP("koral:termGroup"), TERM("koral:term"), TOKEN("koral:token"), 
     SPAN("koral:span"), GROUP("koral:group"), BOUNDARY("koral:boundary"), 
     RELATION("koral:relation"), DISTANCE("koral:distance"), REFERENCE(
-    "koral:reference"), DOCUMENT("koral:doc"), DOCUMENTGROUP("koral:docGroup"),
+    "koral:reference"), DOCUMENT("koral:doc"), DOCUMENT_GROUP("koral:docGroup"),
+    DOCUMENT_GROUP_REF("koral:docGroupRef"),
     COSMAS_DISTANCE("cosmas:distance");
 
     String value;
diff --git a/src/main/java/de/ids_mannheim/korap/query/serialize/CollectionQueryProcessor.java b/src/main/java/de/ids_mannheim/korap/query/serialize/CollectionQueryProcessor.java
index 76162d0..674fd92 100644
--- a/src/main/java/de/ids_mannheim/korap/query/serialize/CollectionQueryProcessor.java
+++ b/src/main/java/de/ids_mannheim/korap/query/serialize/CollectionQueryProcessor.java
@@ -112,7 +112,7 @@
             stackedObjects++;
         }
 
-        if (nodeCat.equals("constraint")) {
+        else if (nodeCat.equals("constraint")) {
             ParseTree fieldNode = getFirstChildWithCat(node, "field");
             String field = fieldNode.getChild(0).toStringTree(parser);
             ParseTree operatorNode = getFirstChildWithCat(node, "operator");
@@ -141,7 +141,7 @@
             putIntoSuperObject(term);
         }
 
-        if (nodeCat.equals("dateConstraint")) {
+        else if (nodeCat.equals("dateConstraint")) {
             ParseTree fieldNode = getFirstChildWithCat(node, "field");
             String field = fieldNode.getChild(0).toStringTree(parser);
             ParseTree dateOpNode = getFirstChildWithCat(node, "dateOp");
@@ -166,8 +166,25 @@
             putIntoSuperObject(term);
 
         }
-
-        if (nodeCat.equals("token")) {
+        
+        else if (nodeCat.equals("vcConstraint")) {
+            ParseTree vcOp = getFirstChildWithCat(node, "vcOp");
+            String vcOpStr = vcOp.getChild(0).toString();
+            if (!vcOpStr.equals("referTo")){
+                addError(StatusCodes.UNKNOWN_QUERY_ELEMENT,
+                        "Unknown vc operator: "+vcOpStr);
+            }
+            
+            ParseTree vcName = getFirstChildWithCat(node, "vcName");
+            String vcNameStr = "";
+            for (int i=0; i < vcName.getChildCount(); i++){
+                vcNameStr = vcNameStr+vcName.getChild(i).toString();
+            }
+            Map<String, Object> term = KoralObjectGenerator.makeDocGroupRef(vcNameStr);
+            putIntoSuperObject(term);
+        }
+        
+        else if (nodeCat.equals("token")) {
             Map<String, Object> token = KoralObjectGenerator
                     .makeToken();
             // handle negation
@@ -218,6 +235,7 @@
             visited.add(node.getChild(0));
             visited.add(node.getChild(2));
         }
+        
         objectsToPop.push(stackedObjects);
 
         /*
diff --git a/src/main/java/de/ids_mannheim/korap/query/serialize/QuerySerializer.java b/src/main/java/de/ids_mannheim/korap/query/serialize/QuerySerializer.java
index 4c02a31..725203b 100644
--- a/src/main/java/de/ids_mannheim/korap/query/serialize/QuerySerializer.java
+++ b/src/main/java/de/ids_mannheim/korap/query/serialize/QuerySerializer.java
@@ -211,6 +211,10 @@
 				return true;
 			};
 		};
+		
+		if (!errors.isEmpty()){
+		    return true;
+		}
 		return false;
 	}
 	
diff --git a/src/main/java/de/ids_mannheim/korap/query/serialize/util/KoralObjectGenerator.java b/src/main/java/de/ids_mannheim/korap/query/serialize/util/KoralObjectGenerator.java
index ee592d0..a02570e 100644
--- a/src/main/java/de/ids_mannheim/korap/query/serialize/util/KoralObjectGenerator.java
+++ b/src/main/java/de/ids_mannheim/korap/query/serialize/util/KoralObjectGenerator.java
@@ -62,11 +62,18 @@
         term.put("@type", KoralType.DOCUMENT.toString());
         return term;
     }
+    
+    public static Map<String, Object> makeDocGroupRef (String ref) {
+        Map<String, Object> term = new HashMap<String, Object>();
+        term.put("@type", KoralType.DOCUMENT_GROUP_REF.toString());
+        term.put("ref", ref);
+        return term;
+    }
 
 
     public static Map<String, Object> makeDocGroup (String relation) {
         Map<String, Object> term = new HashMap<String, Object>();
-        term.put("@type", KoralType.DOCUMENTGROUP.toString());
+        term.put("@type", KoralType.DOCUMENT_GROUP.toString());
         term.put("operation", "operation:" + relation);
         term.put("operands", new ArrayList<Object>());
         return term;
diff --git a/src/test/java/de/ids_mannheim/korap/query/test/collection/CollectionQueryProcessorTest.java b/src/test/java/de/ids_mannheim/korap/query/test/collection/CollectionQueryProcessorTest.java
index 75a1a91..76d3af0 100644
--- a/src/test/java/de/ids_mannheim/korap/query/test/collection/CollectionQueryProcessorTest.java
+++ b/src/test/java/de/ids_mannheim/korap/query/test/collection/CollectionQueryProcessorTest.java
@@ -1,5 +1,13 @@
 package de.ids_mannheim.korap.query.test.collection;
 
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+import java.io.IOException;
+
+import org.junit.Test;
+
 import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.databind.JsonNode;
 import com.fasterxml.jackson.databind.ObjectMapper;
@@ -7,27 +15,33 @@
 import de.ids_mannheim.korap.query.serialize.QuerySerializer;
 import de.ids_mannheim.korap.query.serialize.QueryUtils;
 
-import org.junit.Test;
-
-import java.io.IOException;
-import java.util.ArrayList;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.assertFalse;
-
 public class CollectionQueryProcessorTest {
 
-    String query = "foo";
-    String ql = "poliqarpplus";
-    String collection;
-    ArrayList<JsonNode> operands;
+    private String query = "foo";
+    private String ql = "poliqarpplus";
+    private String collection;
 
-    QuerySerializer qs = new QuerySerializer();
-    ObjectMapper mapper = new ObjectMapper();
-    JsonNode res;
+    public static final QuerySerializer qs = new QuerySerializer();
+    public static final ObjectMapper mapper = new ObjectMapper();
+    private JsonNode res;
 
-
+    @Test
+    public void testVCRef () throws IOException {
+        collection = "referTo vc-filename";
+        qs.setQuery(query, ql);
+        qs.setCollection(collection);
+        res = mapper.readTree(qs.toJSON());
+        assertEquals("koral:docGroupRef", res.at("/collection/@type").asText());
+        assertEquals("vc-filename", res.at("/collection/ref").asText());
+        
+        collection = "referTo mickey/MyVC";
+        qs.setQuery(query, ql);
+        qs.setCollection(collection);
+        res = mapper.readTree(qs.toJSON());
+        assertEquals("koral:docGroupRef", res.at("/collection/@type").asText());
+        assertEquals("mickey/MyVC", res.at("/collection/ref").asText());
+    }
+    
     @Test
     public void testContext () throws JsonProcessingException, IOException {
         collection = "textClass=politik";
