diff --git a/src/main/java/de/ids_mannheim/korap/Krill.java b/src/main/java/de/ids_mannheim/korap/Krill.java
index 46f48cf..d395fec 100644
--- a/src/main/java/de/ids_mannheim/korap/Krill.java
+++ b/src/main/java/de/ids_mannheim/korap/Krill.java
@@ -1,22 +1,19 @@
 package de.ids_mannheim.korap;
 
-import java.io.*;
-import java.util.*;
+import java.io.IOException;
 
 import org.apache.lucene.search.spans.SpanQuery;
-import de.ids_mannheim.korap.query.wrap.SpanQueryWrapper;
-import de.ids_mannheim.korap.KrillIndex;
-import de.ids_mannheim.korap.response.Result;
-import de.ids_mannheim.korap.util.QueryException;
-import de.ids_mannheim.korap.response.Notifications;
-import de.ids_mannheim.korap.response.Response;
-
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.databind.JsonNode;
-
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+import de.ids_mannheim.korap.query.wrap.SpanQueryWrapper;
+import de.ids_mannheim.korap.response.Response;
+import de.ids_mannheim.korap.response.Result;
+import de.ids_mannheim.korap.util.QueryException;
+
 /**
  * <p>Krill is a corpus data retrieval index using Lucene for
  * Look-Ups.</p>
@@ -61,7 +58,6 @@
     private KrillIndex index;
     private SpanQuery spanQuery;
     private JsonNode request;
-    private String spanContext;
 
     private final ObjectMapper mapper = new ObjectMapper();
 
diff --git a/src/main/java/de/ids_mannheim/korap/KrillCollection.java b/src/main/java/de/ids_mannheim/korap/KrillCollection.java
index 8145f86..19f06ae 100644
--- a/src/main/java/de/ids_mannheim/korap/KrillCollection.java
+++ b/src/main/java/de/ids_mannheim/korap/KrillCollection.java
@@ -1,10 +1,10 @@
 package de.ids_mannheim.korap;
 
 import java.io.IOException;
-import java.io.Serializable;
 import java.nio.ByteBuffer;
-import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 import org.apache.lucene.index.DocsAndPositionsEnum;
 import org.apache.lucene.index.LeafReader;
@@ -26,8 +26,9 @@
 import com.fasterxml.jackson.databind.JsonNode;
 import com.fasterxml.jackson.databind.ObjectMapper;
 
-import de.ids_mannheim.korap.collection.CachedCollection;
+import de.ids_mannheim.korap.collection.CachedVCData;
 import de.ids_mannheim.korap.collection.CollectionBuilder;
+import de.ids_mannheim.korap.collection.SerializableDocIdSet;
 import de.ids_mannheim.korap.response.Notifications;
 import de.ids_mannheim.korap.util.QueryException;
 import de.ids_mannheim.korap.util.StatusCodes;
@@ -59,7 +60,7 @@
     private CollectionBuilder cb = new CollectionBuilder();
     private CollectionBuilder.Interface cbi;
     private byte[] pl = new byte[4];
-    private static ByteBuffer bb = ByteBuffer.allocate(4);
+    // private static ByteBuffer bb = ByteBuffer.allocate(4);
 
     // Logger
     private final static Logger log =
@@ -68,10 +69,11 @@
     // This advices the java compiler to ignore all loggings
     public static final boolean DEBUG = false;
 
-    public static Cache cache = CacheManager.newInstance().getCache("named_vc");
-    private boolean isNamedVC = false;
-    private Serializable name;
-    
+    public static CacheManager cacheManager = CacheManager.newInstance();
+    public static Cache cache = cacheManager.getCache("named_vc");
+    private String name;
+    private boolean toCache = false;
+
     /**
      * Construct a new KrillCollection.
      * 
@@ -91,12 +93,31 @@
 
 
     /**
+     * Constructs a KrillCollection according to the given KrillIndex
+     * and KoralQuery.
+     * 
+     * KrillIndex is necessary for caching virtual corpora.
+     * 
+     * @param index
+     * @param jsonString
+     */
+    public KrillCollection (KrillIndex index, String jsonString) {
+        this.index = index;
+        createCollection(jsonString);
+    };
+
+
+    /**
      * Construct a new KrillCollection by passing a KoralQuery.
      * 
      * @param json
      *            The KoralQuery document as a JSON string.
      */
     public KrillCollection (String jsonString) {
+        createCollection(jsonString);
+    }
+
+    public void createCollection (String jsonString) {
         ObjectMapper mapper = new ObjectMapper();
         try {
             JsonNode json = mapper.readTree(jsonString);
@@ -191,12 +212,27 @@
 
         String type = json.get("@type").asText();
 
+        if (json.has("cache")) {
+            setToCache(json.get("cache").asBoolean());
+        }
+
         if (type.equals("koral:doc")) {
 
+            // default key
             String key = "tokens";
             String valtype = "type:string";
             String match = "match:eq";
 
+            if (isToCache()) {
+                if (!json.has("name")) {
+                    throw new QueryException(StatusCodes.MISSING_ID,
+                            "Collection id or name is required for caching.");
+                }
+                else {
+                    setName(json.get("name").asText());
+                }
+            }
+
             if (json.has("key")) key = json.get("key").asText();
 
             if (json.has("type")) valtype = json.get("type").asText();
@@ -291,13 +327,37 @@
 
                 throw new QueryException(841,
                         "Match relation unknown for type");
-            };
+            }
+
+            else if (valtype.equals("type:string[]")) {
+
+                if (json.has("match")) {
+                    match = json.get("match").asText();
+                }
+
+                CollectionBuilder.Group group = null;
+                if (match.equals("match:eq")) {
+                    group = this.cb.orGroup();
+                    for (JsonNode value : json.get("value")) {
+                        group.with(cb.term(key, value.asText()));
+                    }
+                }
+                else if (match.equals("match:ne")) {
+                    group = this.cb.andGroup();
+                    for (JsonNode value : json.get("value")) {
+                        group.with(cb.term(key, value.asText()).not());
+                    }
+                }
+                return group;
+            }
 
             throw new QueryException(843, "Document type is not supported");
         }
 
         // nested group
-        else if (type.equals("koral:docGroup")) {
+        else if (type.equals("koral:docGroup"))
+
+        {
 
             if (!json.has("operands") || !json.get("operands").isArray())
                 throw new QueryException(842,
@@ -328,22 +388,22 @@
                 throw new QueryException(StatusCodes.MISSING_VC_REFERENCE,
                         "ref is not found");
             }
-            
+
             String ref = json.get("ref").asText();
-            if (ref.isEmpty()){
+            if (ref.isEmpty()) {
                 throw new QueryException(StatusCodes.MISSING_VC_REFERENCE,
                         "ref is empty");
             }
-            
+
             Element element = cache.get(ref);
-            if (element == null){
+            if (element == null) {
                 this.addError(StatusCodes.MISSING_COLLECTION,
                         "Collection is not found.");
                 return this.build().nothing();
             }
             else {
-               CachedCollection cc = (CachedCollection) element.getObjectValue();
-               return cb.namedVC(cc);
+                CachedVCData cc = (CachedVCData) element.getObjectValue();
+                return cb.namedVC(cc);
             }
         }
 
@@ -471,7 +531,7 @@
      * @throws IOException
      */
     public FixedBitSet bits (LeafReaderContext atomic) throws IOException {
-        
+
         LeafReader r = atomic.reader();
         FixedBitSet bitset = new FixedBitSet(r.maxDoc());
         DocIdSet docids = this.getDocIdSet(atomic, (Bits) r.getLiveDocs());
@@ -662,11 +722,11 @@
                                 4);
 
                         // Add payload as integer
-                        occurrences += bb.wrap(pl).getInt();
+                        occurrences += ByteBuffer.wrap(pl).getInt();
 
                         if (DEBUG) log.debug(
                                 "Value for {} incremented by {} to {} in {}",
-                                term, bb.wrap(pl).getInt(), occurrences,
+                                term, ByteBuffer.wrap(pl).getInt(), occurrences,
                                 docs.docID());
                     };
                 };
@@ -719,20 +779,43 @@
     };
 
 
-    private void createDocVector () {
-        List<FixedBitSet> bitSetList = new ArrayList<>();
-        try {
-            FixedBitSet bitset;
-            for (LeafReaderContext atomic : this.index.reader().leaves()) {
-                if ((bitset = this.bits(atomic)) != null) {
-                    bitSetList.add(bitset);
-                }
-            };
-        }
-        catch (IOException e) {
-            log.warn(e.getLocalizedMessage());
-        };
+    public CachedVCData storeInCache () throws IOException {
+        List<LeafReaderContext> leaves = this.index.reader().leaves();
+        Map<Integer, DocIdSet> docIdMap =
+                new HashMap<Integer, DocIdSet>(leaves.size());
 
+        for (LeafReaderContext context : leaves) {
+            if (docIdMap.get(context.hashCode()) == null) {
+                FixedBitSet bitset = bits(context);
+                docIdMap.put(context.hashCode(),
+                        new SerializableDocIdSet(bitset));
+            }
+        }
+
+        CachedVCData cc = new CachedVCData(docIdMap);
+        cache.put(new Element(getName(), cc));
+
+        this.cbi = cb.namedVC(cc);
+        return cc;
+    }
+
+    public String getName () {
+        return name;
+    }
+
+
+    public void setName (String name) {
+        this.name = name;
+    }
+
+
+    public boolean isToCache () {
+        return toCache;
+    }
+
+
+    public void setToCache (boolean toCache) {
+        this.toCache = toCache;
     }
 
     /*
diff --git a/src/main/java/de/ids_mannheim/korap/KrillIndex.java b/src/main/java/de/ids_mannheim/korap/KrillIndex.java
index b545cad..8aa57c8 100644
--- a/src/main/java/de/ids_mannheim/korap/KrillIndex.java
+++ b/src/main/java/de/ids_mannheim/korap/KrillIndex.java
@@ -1,44 +1,79 @@
 package de.ids_mannheim.korap;
 
-// Krill classes
-import de.ids_mannheim.korap.index.*;
-import de.ids_mannheim.korap.response.*;
-import de.ids_mannheim.korap.query.SpanElementQuery;
-import de.ids_mannheim.korap.util.KrillProperties;
-import de.ids_mannheim.korap.util.QueryException;
+import java.io.IOException;
+import java.io.InputStream;
+import java.nio.ByteBuffer;
+// Java core classes
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
+import java.util.regex.Pattern;
+import java.util.zip.GZIPInputStream;
 
-// Lucene classes
-import org.apache.lucene.search.*;
-import org.apache.lucene.search.spans.*;
-import org.apache.lucene.document.Document;
-import org.apache.lucene.index.*;
-import org.apache.lucene.index.IndexWriterConfig.OpenMode;
-import org.apache.lucene.store.*;
 import org.apache.lucene.analysis.Analyzer;
 /*
 import org.apache.lucene.analysis.standard.StandardAnalyzer;
 import org.apache.lucene.analysis.core.WhitespaceAnalyzer;
 */
 import org.apache.lucene.analysis.miscellaneous.PerFieldAnalyzerWrapper;
-import org.apache.lucene.analysis.util.CharArraySet;
-import org.apache.lucene.util.*;
-import org.apache.lucene.util.automaton.*;
-
-// JSON helper class
-import com.fasterxml.jackson.annotation.*;
-import com.fasterxml.jackson.databind.ObjectMapper;
-
+import org.apache.lucene.document.Document;
+import org.apache.lucene.index.DirectoryReader;
+import org.apache.lucene.index.DocsAndPositionsEnum;
+import org.apache.lucene.index.IndexReader;
+import org.apache.lucene.index.IndexWriter;
+import org.apache.lucene.index.IndexWriterConfig;
+import org.apache.lucene.index.IndexableField;
+import org.apache.lucene.index.LeafReaderContext;
+import org.apache.lucene.index.Term;
+import org.apache.lucene.index.TermContext;
+import org.apache.lucene.index.Terms;
+import org.apache.lucene.index.TermsEnum;
+// Lucene classes
+import org.apache.lucene.search.BooleanClause;
+import org.apache.lucene.search.BooleanQuery;
+import org.apache.lucene.search.DocIdSet;
+import org.apache.lucene.search.DocIdSetIterator;
+import org.apache.lucene.search.Filter;
+import org.apache.lucene.search.IndexSearcher;
+import org.apache.lucene.search.Query;
+import org.apache.lucene.search.QueryWrapperFilter;
+import org.apache.lucene.search.TermQuery;
+import org.apache.lucene.search.spans.SpanQuery;
+import org.apache.lucene.search.spans.Spans;
+import org.apache.lucene.store.Directory;
+import org.apache.lucene.store.RAMDirectory;
+import org.apache.lucene.util.Bits;
+import org.apache.lucene.util.BytesRef;
+import org.apache.lucene.util.FixedBitSet;
+import org.apache.lucene.util.automaton.CompiledAutomaton;
+import org.apache.lucene.util.automaton.RegExp;
 // Log4j Logger classes
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-// Java core classes
-import java.util.*;
-import java.util.zip.GZIPInputStream;
-import java.util.regex.Pattern;
-import java.io.*;
-import java.net.URL;
-import java.nio.ByteBuffer;
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+// Krill classes
+import de.ids_mannheim.korap.index.FieldDocument;
+import de.ids_mannheim.korap.index.KeywordAnalyzer;
+import de.ids_mannheim.korap.index.PositionsToOffset;
+import de.ids_mannheim.korap.index.SpanInfo;
+import de.ids_mannheim.korap.index.TermInfo;
+import de.ids_mannheim.korap.index.TextAnalyzer;
+import de.ids_mannheim.korap.index.TimeOutThread;
+import de.ids_mannheim.korap.response.Match;
+import de.ids_mannheim.korap.response.MatchCollector;
+import de.ids_mannheim.korap.response.MetaFields;
+import de.ids_mannheim.korap.response.Result;
+import de.ids_mannheim.korap.response.SearchContext;
+import de.ids_mannheim.korap.response.Text;
+import de.ids_mannheim.korap.util.KrillProperties;
+import de.ids_mannheim.korap.util.QueryException;
+import net.sf.ehcache.CacheManager;
 
 /**
  * <p>KrillIndex implements a simple API for searching in and writing
@@ -389,6 +424,7 @@
             log.error("Unable to add document");
         };
 
+        CacheManager.getInstance().clearAll();
         return doc;
     };
 
@@ -419,6 +455,7 @@
             log.error("Unable to delete documents");
         };
 
+        CacheManager.getInstance().clearAll();
         return false;
     };
 
@@ -467,6 +504,7 @@
             fd.setUID(uid);
             fd = this.addDoc(fd);
         };
+        CacheManager.getInstance().clearAll();
         return fd;
     };
 
@@ -522,6 +560,8 @@
             fd.setUID(uid);
             return this.addDoc(fd);
         };
+        
+        CacheManager.getInstance().clearAll();
         return fd;
     };
 
diff --git a/src/main/java/de/ids_mannheim/korap/collection/CachedCollection.java b/src/main/java/de/ids_mannheim/korap/collection/CachedCollection.java
deleted file mode 100644
index 9d393f0..0000000
--- a/src/main/java/de/ids_mannheim/korap/collection/CachedCollection.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package de.ids_mannheim.korap.collection;
-
-import java.util.Map;
-
-import org.apache.lucene.index.LeafReaderContext;
-import org.apache.lucene.search.DocIdSet;
-
-public class CachedCollection {
-
-    private Map<LeafReaderContext, DocIdSet> docIdMap;
-    
-    public Map<LeafReaderContext, DocIdSet> getDocIdMap () {
-        return docIdMap;
-    }
-
-    public void setDocIdMap (Map<LeafReaderContext, DocIdSet> docIdMap) {
-        this.docIdMap = docIdMap;
-    }
-    
-}
diff --git a/src/main/java/de/ids_mannheim/korap/collection/CachedVCData.java b/src/main/java/de/ids_mannheim/korap/collection/CachedVCData.java
new file mode 100644
index 0000000..d4bae4f
--- /dev/null
+++ b/src/main/java/de/ids_mannheim/korap/collection/CachedVCData.java
@@ -0,0 +1,29 @@
+package de.ids_mannheim.korap.collection;
+
+import java.io.Serializable;
+import java.util.Map;
+
+import org.apache.lucene.search.DocIdSet;
+
+public class CachedVCData implements Serializable{
+
+    /** Auto generated
+     * 
+     */
+    private static final long serialVersionUID = 5635087441839303653L;
+    
+    private Map<Integer, DocIdSet> docIdMap;
+    
+    public CachedVCData (Map<Integer, DocIdSet> docIdMap) {
+        this.docIdMap = docIdMap;
+    }
+    
+    public Map<Integer, DocIdSet> getDocIdMap () {
+        return docIdMap;
+    }
+
+    public void setDocIdMap (Map<Integer, DocIdSet> docIdMap) {
+        this.docIdMap = docIdMap;
+    }
+    
+}
diff --git a/src/main/java/de/ids_mannheim/korap/collection/NamedVCFilter.java b/src/main/java/de/ids_mannheim/korap/collection/CachedVCFilter.java
similarity index 67%
rename from src/main/java/de/ids_mannheim/korap/collection/NamedVCFilter.java
rename to src/main/java/de/ids_mannheim/korap/collection/CachedVCFilter.java
index 63e89e0..39a5d93 100644
--- a/src/main/java/de/ids_mannheim/korap/collection/NamedVCFilter.java
+++ b/src/main/java/de/ids_mannheim/korap/collection/CachedVCFilter.java
@@ -7,11 +7,11 @@
 import org.apache.lucene.search.Filter;
 import org.apache.lucene.util.Bits;
 
-public class NamedVCFilter extends Filter {
+public class CachedVCFilter extends Filter {
 
-    private CachedCollection cachedCollection;
+    private CachedVCData cachedCollection;
     
-    public NamedVCFilter (CachedCollection cachedCollection) {
+    public CachedVCFilter (CachedVCData cachedCollection) {
         this.cachedCollection = cachedCollection;
     }
 
@@ -19,7 +19,7 @@
     public DocIdSet getDocIdSet (LeafReaderContext context, Bits acceptDocs)
             throws IOException {
         
-        return cachedCollection.getDocIdMap().get(context);
+        return cachedCollection.getDocIdMap().get(context.hashCode());
     }
 
 }
diff --git a/src/main/java/de/ids_mannheim/korap/collection/CollectionBuilder.java b/src/main/java/de/ids_mannheim/korap/collection/CollectionBuilder.java
index 3fceebb..b3ee552 100644
--- a/src/main/java/de/ids_mannheim/korap/collection/CollectionBuilder.java
+++ b/src/main/java/de/ids_mannheim/korap/collection/CollectionBuilder.java
@@ -373,18 +373,18 @@
         };
     };
     
-    public class NamedVC implements CollectionBuilder.Interface {
+    public class CachedVC implements CollectionBuilder.Interface {
 
-        private CachedCollection cachedCollection;
+        private CachedVCData cachedCollection;
         private boolean isNegative = false;
 
-        public NamedVC (CachedCollection cc) {
+        public CachedVC (CachedVCData cc) {
             this.cachedCollection = cc;
         }
 
         @Override
         public Filter toFilter () {
-            return new NamedVCFilter(cachedCollection);
+            return new CachedVCFilter(cachedCollection);
         }
 
         @Override
@@ -400,7 +400,7 @@
         
     }
 
-    public Interface namedVC (CachedCollection cc) {
-        return new CollectionBuilder.NamedVC(cc);
+    public Interface namedVC (CachedVCData cc) {
+        return new CollectionBuilder.CachedVC(cc);
     }
 };
diff --git a/src/main/java/de/ids_mannheim/korap/collection/SerializableDocIdSet.java b/src/main/java/de/ids_mannheim/korap/collection/SerializableDocIdSet.java
new file mode 100644
index 0000000..22907fe
--- /dev/null
+++ b/src/main/java/de/ids_mannheim/korap/collection/SerializableDocIdSet.java
@@ -0,0 +1,19 @@
+package de.ids_mannheim.korap.collection;
+
+import java.io.Serializable;
+
+import org.apache.lucene.util.BitDocIdSet;
+import org.apache.lucene.util.BitSet;
+
+public class SerializableDocIdSet extends BitDocIdSet implements Serializable {
+
+    /**
+     * Auto generated
+     * 
+     */
+    private static final long serialVersionUID = 171797306573832807L;
+
+    public SerializableDocIdSet (BitSet set) {
+        super(set);
+    }
+}
diff --git a/src/main/java/de/ids_mannheim/korap/util/StatusCodes.java b/src/main/java/de/ids_mannheim/korap/util/StatusCodes.java
index 9aad2f0..b9067ae 100644
--- a/src/main/java/de/ids_mannheim/korap/util/StatusCodes.java
+++ b/src/main/java/de/ids_mannheim/korap/util/StatusCodes.java
@@ -68,12 +68,14 @@
     public static final int INVALID_REGEX = 807;
     public static final int UNKNOWN_REWRITE_OPERATION = 814;
     public static final int MISSING_SOURCE = 815;
+    public static final int MISSING_ID = 816;
     public static final int MISSING_VALUE = 820;
     public static final int EMPTY_FILTER = 830;
     public static final int UNWRAPPABLE_FILTER = 831;
     public static final int INVALID_FILTER_OPERATION = 832;
     public static final int UNSUPPORTED_TYPE = 843;
     public static final int COLLECTIONS_UNSUPPORTED = 850;
+    public static final int CACHING_COLLECTION_FAILED = 851;
 
     // 900 - 999 - Corpus Data errors 
     public static final int INVALID_OFFSET = 952;
diff --git a/src/test/java/de/ids_mannheim/korap/collection/TestVCCaching.java b/src/test/java/de/ids_mannheim/korap/collection/TestVCCaching.java
new file mode 100644
index 0000000..108c1e2
--- /dev/null
+++ b/src/test/java/de/ids_mannheim/korap/collection/TestVCCaching.java
@@ -0,0 +1,77 @@
+package de.ids_mannheim.korap.collection;
+
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertNotNull;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.nio.file.Paths;
+
+import org.apache.commons.io.IOUtils;
+import org.apache.lucene.store.MMapDirectory;
+import org.junit.Test;
+
+import de.ids_mannheim.korap.Krill;
+import de.ids_mannheim.korap.KrillCollection;
+import de.ids_mannheim.korap.KrillIndex;
+import net.sf.ehcache.CacheManager;
+import net.sf.ehcache.Element;
+
+public class TestVCCaching {
+
+    private KrillIndex getSampleIndex () throws IOException {
+        return new KrillIndex(new MMapDirectory(
+                Paths.get(getClass().getResource("/sample-index").getFile())));
+
+    }
+
+    private KrillIndex index;
+
+    public TestVCCaching () throws IOException {
+        index = getSampleIndex();
+    }
+
+    @Test
+    public void testCacheVC () throws IOException {
+        InputStream is = getClass().getClassLoader()
+                .getResourceAsStream("named-vc/named-vc-free.jsonld");
+        String json = IOUtils.toString(is);
+
+        KrillCollection kc = new KrillCollection(json);
+        kc.setIndex(index);
+        kc.storeInCache();
+
+        Element element = KrillCollection.cache.get("cache-goe");
+        CachedVCData cc = (CachedVCData) element.getObjectValue();
+
+        assertTrue(cc.getDocIdMap().size() > 0);
+
+        testSearchCachedVC();
+        testClearCache();
+    }
+
+    private void testSearchCachedVC () throws IOException {
+        InputStream is = getClass().getClassLoader()
+                .getResourceAsStream("collection/query-with-vc-ref.jsonld");
+        String json = IOUtils.toString(is);
+
+        String result = new Krill(json).apply(this.index).toJsonString();
+        assertNotNull(result);
+        assertTrue(!result.isEmpty());
+
+        // test with match:eq
+        json.replaceFirst("match:ne", "match:eq");
+        result = new Krill(json).apply(this.index).toJsonString();
+        assertNotNull(result);
+        assertTrue(!result.isEmpty());
+    }
+    
+    public void testClearCache () {
+        CacheManager cacheManager = CacheManager.getInstance();
+        cacheManager.clearAll();
+        
+        Element element = KrillCollection.cache.get("cache-goe");
+        assertNull(element);
+    }
+}
diff --git a/src/test/resources/collection/query-with-vc-ref.jsonld b/src/test/resources/collection/query-with-vc-ref.jsonld
new file mode 100644
index 0000000..d50cd2a
--- /dev/null
+++ b/src/test/resources/collection/query-with-vc-ref.jsonld
@@ -0,0 +1,15 @@
+{"query":{
+    "@type":"koral:token",
+    "wrap":{
+      "@type":"koral:term",
+      "layer":"orth",
+      "key":"der",
+      "match":"match:eq",
+      "foundry":"opennlp"
+    }
+  },
+  "collection": {
+    "@type": "koral:docGroupRef",
+    "ref": "cache-goe"
+  }
+}
diff --git a/src/test/resources/named-vc/named-vc-free.jsonld b/src/test/resources/named-vc/named-vc-free.jsonld
index 4e8cd83..1f90e4c 100644
--- a/src/test/resources/named-vc/named-vc-free.jsonld
+++ b/src/test/resources/named-vc/named-vc-free.jsonld
@@ -2,10 +2,11 @@
     "name" : "cache-goe",
     "@type": "koral:doc",
     "key": "textSigle",
-    "match": "match:eq",
+    "match": "match:ne",
+    "type" : "type:string[]",
     "value": [
         "GOE/AGF/00000",
         "GOE/AGA/01784"
-    ]
-}}
-
+    ],
+    "cache" : "true"
+}}
\ No newline at end of file
