diff --git a/Changes b/Changes
index 98f331d..37d2ffc 100644
--- a/Changes
+++ b/Changes
@@ -1,9 +1,10 @@
-0.62.5 2024-05-31
+0.62.5 2024-06-11
     - [bugfix] cut primary data according to max values (margaretha, #143)
     - [enhancement] restrict match expansion by max token and context 
       size (margaretha, #144)
+    - [bugfix] Set the default value for named-vc path (margaretha, 
+      fixes #146)
     
-
 0.62.4 2024-05-27
     - [feature] Make match and context size configurable (address #128, 
       diewald & margaretha)
diff --git a/src/main/java/de/ids_mannheim/korap/KrillCollection.java b/src/main/java/de/ids_mannheim/korap/KrillCollection.java
index fbd2f4f..ffa99cd 100644
--- a/src/main/java/de/ids_mannheim/korap/KrillCollection.java
+++ b/src/main/java/de/ids_mannheim/korap/KrillCollection.java
@@ -167,20 +167,8 @@
 
 
 	public KrillCollection fromStore (String ref) throws QueryException {
-        Properties prop = KrillProperties.loadDefaultProperties();
 		this.prefiltered = null;
-	
-        if (prop == null) {
-            this.addError(StatusCodes.MISSING_KRILL_PROPERTIES,
-						  "krill.properties is not found.");
-			return null;
-        }
-
-        String p = prop.getProperty("krill.test", "false");
-        boolean isTest = Boolean.parseBoolean(p);
-                
-        String namedVCPath = prop.getProperty("krill.namedVC");
-
+		String namedVCPath = KrillProperties.namedVCPath;
 		if (!namedVCPath.endsWith("/")) {
             namedVCPath += "/";
         };
@@ -215,7 +203,7 @@
             }
         }
         // for testing
-        else if (isTest
+        else if (KrillProperties.isTest
                 && (is = retrieveInputStreamFromClasspath(fileName)) != null) {
             try {
                 json = IOUtils.toString(is, "utf-8");
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 db73e36..1ebc449 100644
--- a/src/main/java/de/ids_mannheim/korap/util/KrillProperties.java
+++ b/src/main/java/de/ids_mannheim/korap/util/KrillProperties.java
@@ -23,6 +23,9 @@
     public static int maxTokenContextSize = 60;
     public static int maxCharContextSize = 500;
     
+    public static String namedVCPath = "";
+    public static boolean isTest = false;
+    
     // Logger
     private final static Logger log = LoggerFactory
             .getLogger(KrillProperties.class);
@@ -74,7 +77,7 @@
         return prop;
     };
 
-    private static void updateConfigurations (Properties  prop) {
+    public static void updateConfigurations (Properties  prop) {
         String maxTokenMatchSize = prop.getProperty("krill.match.max.token");
         String maxTokenContextSize = prop.getProperty("krill.context.max.token");
 
@@ -92,6 +95,11 @@
             log.error("A Krill property expects numerical values: "
                     + e.getMessage());
         };
+        
+        String p = prop.getProperty("krill.test", "false");
+        isTest = Boolean.parseBoolean(p);
+        
+        namedVCPath = prop.getProperty("krill.namedVC", "");
     }
     
 
diff --git a/src/test/java/de/ids_mannheim/korap/collection/TestKrillCollection.java b/src/test/java/de/ids_mannheim/korap/collection/TestKrillCollection.java
new file mode 100644
index 0000000..ff8e755
--- /dev/null
+++ b/src/test/java/de/ids_mannheim/korap/collection/TestKrillCollection.java
@@ -0,0 +1,25 @@
+package de.ids_mannheim.korap.collection;
+
+import static org.junit.Assert.assertEquals;
+
+import java.io.IOException;
+
+import org.junit.Test;
+
+import de.ids_mannheim.korap.KrillCollection;
+import de.ids_mannheim.korap.util.KrillProperties;
+import de.ids_mannheim.korap.util.QueryException;
+
+public class TestKrillCollection {
+
+    @Test
+    public void testLoadVCFromStore () throws QueryException, IOException {
+        KrillProperties.loadProperties("krill.properties.info");
+        KrillCollection kc = new KrillCollection();
+        kc = kc.fromStore("unknown-vc");
+        assertEquals(-1, kc.numberOf("tokens"));
+        assertEquals(-1, kc.numberOf("documents"));
+        assertEquals(-1, kc.numberOf("sentences"));
+        KrillProperties.loadDefaultProperties();
+    }
+}
