diff --git a/Changes b/Changes
index 57ecbbd..74f0474 100644
--- a/Changes
+++ b/Changes
@@ -1,11 +1,12 @@
-0.58.0 2018-08-02
+0.58.0 2018-08-13
     - Implemented referencing cached collection (margaretha)
     - Implemented deserialization of collection with array values and cache option (margaretha)
     - Implemented caching collection (margaretha)
     - Implemented KrillCollection cache clearing (margaretha)
     - Implemented auto-caching (margaretha)
     - Implemented serializable doc bits vector for caching on disk (margaretha)
-    - Added check for non-existing doc bit vector in the cache (margaretha) 
+    - Added check for non-existing doc bit vector in the cache (margaretha)
+    - Implemented custom namedVC path (margaretha)
 
 0.57 2018-04-05
     - [feature] Support text queries in metadata
diff --git a/src/main/java/de/ids_mannheim/korap/KrillCollection.java b/src/main/java/de/ids_mannheim/korap/KrillCollection.java
index ea0abb3..6e384a1 100644
--- a/src/main/java/de/ids_mannheim/korap/KrillCollection.java
+++ b/src/main/java/de/ids_mannheim/korap/KrillCollection.java
@@ -7,6 +7,7 @@
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Properties;
 
 import org.apache.commons.io.IOUtils;
 import org.apache.lucene.index.DocsAndPositionsEnum;
@@ -33,6 +34,7 @@
 import de.ids_mannheim.korap.collection.CollectionBuilder;
 import de.ids_mannheim.korap.collection.DocBits;
 import de.ids_mannheim.korap.response.Notifications;
+import de.ids_mannheim.korap.util.KrillProperties;
 import de.ids_mannheim.korap.util.QueryException;
 import de.ids_mannheim.korap.util.StatusCodes;
 import net.sf.ehcache.Cache;
@@ -397,7 +399,19 @@
 
     
     private String loadVCFile (String ref) {
-        File file = new File("vc/"+ref+".jsonld");
+        Properties prop = KrillProperties.loadDefaultProperties();
+        if (prop == null){
+            this.addError(StatusCodes.MISSING_KRILL_PROPERTIES,
+                    "krill.properties is not found.");
+            return null;
+        }
+        
+        String namedVCPath = prop.getProperty("krill.namedVC");
+        if (!namedVCPath.endsWith("/")){
+            namedVCPath += "/";
+        }
+        File file = new File(namedVCPath+ref+".jsonld");
+        
         String json = null;
         try {
             FileInputStream fis = new FileInputStream(file);
diff --git a/src/main/java/de/ids_mannheim/korap/collection/DocBits.java b/src/main/java/de/ids_mannheim/korap/collection/DocBits.java
index 59044ab..9b63751 100644
--- a/src/main/java/de/ids_mannheim/korap/collection/DocBits.java
+++ b/src/main/java/de/ids_mannheim/korap/collection/DocBits.java
@@ -13,19 +13,17 @@
 public class DocBits implements Serializable {
 
     /**
-     * 
+     * Auto generated
      */
     private static final long serialVersionUID = -3505650918983180852L;
     final long[] bits;
-    final int numBits;
 
     public DocBits (long[] bits) {
         this.bits = bits;
-        this.numBits = bits.length;
     }
 
     public BitDocIdSet createBitDocIdSet () {
-        FixedBitSet bitset = new FixedBitSet(bits, numBits);
+        FixedBitSet bitset = new FixedBitSet(bits, bits.length);
         BitDocIdSet docIdSet = new BitDocIdSet(bitset);
         return docIdSet;
     }
@@ -36,7 +34,7 @@
         int i = 1;
         for (long b : bits) {
             sb.append(b);
-            if (i < numBits) {
+            if (i < bits.length) {
                 sb.append(",");
             }
             i++;
diff --git a/src/main/java/de/ids_mannheim/korap/collection/ToCacheVCFilter.java b/src/main/java/de/ids_mannheim/korap/collection/ToCacheVCFilter.java
index b0f3b59..981d0ed 100644
--- a/src/main/java/de/ids_mannheim/korap/collection/ToCacheVCFilter.java
+++ b/src/main/java/de/ids_mannheim/korap/collection/ToCacheVCFilter.java
@@ -60,8 +60,6 @@
                 bitset.flip(0, maxDoc);
             }
         }
-        
-        
 
         docIdMap.put(context.hashCode(), new DocBits(bitset.getBits()));
         CachedVCData cachedVCData = new CachedVCData(new HashMap<>(docIdMap));
diff --git a/src/main/java/de/ids_mannheim/korap/util/KrillProperties.java b/src/main/java/de/ids_mannheim/korap/util/KrillProperties.java
index 1ba261c..e9a38e6 100644
--- a/src/main/java/de/ids_mannheim/korap/util/KrillProperties.java
+++ b/src/main/java/de/ids_mannheim/korap/util/KrillProperties.java
@@ -91,4 +91,8 @@
         };
         return info;
     };
+    
+    public static void setProp (Properties prop) {
+        KrillProperties.prop = prop;
+    }
 };
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 b9067ae..a9c9adf 100644
--- a/src/main/java/de/ids_mannheim/korap/util/StatusCodes.java
+++ b/src/main/java/de/ids_mannheim/korap/util/StatusCodes.java
@@ -7,6 +7,7 @@
     public static final int UNABLE_TO_ADD_DOC_TO_INDEX = 602;
     public static final int UNABLE_TP_COMMIT_STAGED_DATA_TO_INDEX = 603;
     public static final int UNABLE_TO_CONNECT_TO_DB = 604;
+    public static final int MISSING_KRILL_PROPERTIES = 605;
     public static final int MISSING_REQUEST_PARAMETER = 610;
     public static final int ARBITRARY_DESERIALIZATION_ERROR = 613;
     public static final int UNABLE_TO_GENERATE_JSON = 620;
diff --git a/src/test/resources/krill.properties b/src/test/resources/krill.properties
index e14926b..a6302b6 100644
--- a/src/test/resources/krill.properties
+++ b/src/test/resources/krill.properties
@@ -1,3 +1,4 @@
 krill.version = ${project.version}
 krill.name = ${project.name}
-krill.indexDir = test-output
\ No newline at end of file
+krill.indexDir = test-output
+krill.namedVC = vc
\ No newline at end of file
