diff --git a/src/main/java/de/ids_mannheim/korap/core/web/controller/SearchController.java b/src/main/java/de/ids_mannheim/korap/core/web/controller/SearchController.java
index 82e068e..0838cf0 100644
--- a/src/main/java/de/ids_mannheim/korap/core/web/controller/SearchController.java
+++ b/src/main/java/de/ids_mannheim/korap/core/web/controller/SearchController.java
@@ -63,6 +63,9 @@
 
     @Autowired
     private KustvaktResponseHandler kustvaktResponseHandler;
+    
+    @Autowired
+    private Runnable vcLoader;
 
     @Autowired
     private SearchService searchService;
@@ -104,6 +107,8 @@
     public Response closeIndexReader () {
         try {
             searchService.closeIndexReader();
+            Thread t = new Thread(vcLoader);
+            t.start();
         }
         catch (KustvaktException e) {
             throw kustvaktResponseHandler.throwit(e);
diff --git a/src/main/java/de/ids_mannheim/korap/init/DummyNamedVCLoaderImpl.java b/src/main/java/de/ids_mannheim/korap/init/DummyNamedVCLoaderImpl.java
new file mode 100644
index 0000000..dbf8b82
--- /dev/null
+++ b/src/main/java/de/ids_mannheim/korap/init/DummyNamedVCLoaderImpl.java
@@ -0,0 +1,10 @@
+package de.ids_mannheim.korap.init;
+
+public class DummyNamedVCLoaderImpl implements Runnable {
+
+	@Override
+	public void run () {
+		// TODO Auto-generated method stub
+
+	}
+}
diff --git a/src/main/java/de/ids_mannheim/korap/init/NamedVCLoader.java b/src/main/java/de/ids_mannheim/korap/init/NamedVCLoader.java
index 7bf7ccb..294c7f8 100644
--- a/src/main/java/de/ids_mannheim/korap/init/NamedVCLoader.java
+++ b/src/main/java/de/ids_mannheim/korap/init/NamedVCLoader.java
@@ -58,6 +58,9 @@
     @Override
     public void run () {
         try {
+        	VirtualCorpusCache.vcToCleanUp.clear();
+        	VirtualCorpusCache.map.clear();
+        	
             loadVCToCache();
         }
         catch (IOException | QueryException e) {
diff --git a/src/test/java/de/ids_mannheim/korap/web/controller/IndexControllerTest.java b/src/test/java/de/ids_mannheim/korap/web/controller/IndexControllerTest.java
index 3b9dfbc..83de67f 100644
--- a/src/test/java/de/ids_mannheim/korap/web/controller/IndexControllerTest.java
+++ b/src/test/java/de/ids_mannheim/korap/web/controller/IndexControllerTest.java
@@ -10,15 +10,11 @@
 import java.nio.file.Path;
 import java.nio.file.Paths;
 
-import jakarta.ws.rs.client.Entity;
-import jakarta.ws.rs.core.Form;
-import jakarta.ws.rs.core.MediaType;
-
 import org.apache.http.HttpStatus;
 import org.junit.jupiter.api.Test;
 import org.springframework.beans.factory.annotation.Autowired;
+
 import com.fasterxml.jackson.databind.JsonNode;
-import jakarta.ws.rs.core.Response;
 
 import de.ids_mannheim.korap.authentication.http.HttpAuthorizationHandler;
 import de.ids_mannheim.korap.config.Attributes;
@@ -27,6 +23,9 @@
 import de.ids_mannheim.korap.exceptions.StatusCodes;
 import de.ids_mannheim.korap.utils.JsonUtils;
 import de.ids_mannheim.korap.web.SearchKrill;
+import jakarta.ws.rs.client.Entity;
+import jakarta.ws.rs.core.Form;
+import jakarta.ws.rs.core.Response;
 
 /**
  * @author margaretha
@@ -37,30 +36,52 @@
     private SearchKrill searchKrill;
 
     @Test
-    public void testCloseIndex () throws IOException, KustvaktException,
+    public void testRecachingVC_AfterClosingIndex () throws IOException, KustvaktException,
             URISyntaxException, InterruptedException {
+    	// check VC not found
+    	Response response = target().path(API_VERSION).path("vc").path("~system")
+                .path("named-vc1").request()
+                .header(Attributes.AUTHORIZATION, HttpAuthorizationHandler
+                        .createBasicAuthorizationHeaderValue("admin", "pass"))
+                .get();
+
+    	assertEquals(HttpStatus.SC_NOT_FOUND, response.getStatus());
+    	
         URI uri = IndexControllerTest.class.getClassLoader()
                 .getResource("vc/named-vc1.jsonld").toURI();
-        Path toLink = Paths.get(uri);
-        Path symLink = Paths.get("vc/named-vc1.jsonld");
+        Path vcLink = Paths.get(uri);
+        Path targetLink = Paths.get("vc/named-vc1.jsonld");
         Path vcPath = Paths.get("vc");
         if (!Files.exists(vcPath)) {
             Files.createDirectory(vcPath);
         }
-        if (Files.exists(symLink, LinkOption.NOFOLLOW_LINKS)) {
-            Files.delete(symLink);
+        if (Files.exists(targetLink, LinkOption.NOFOLLOW_LINKS)) {
+            Files.delete(targetLink);
         }
-        Files.createSymbolicLink(symLink, toLink);
+        Files.copy(vcLink,targetLink);
         searchKrill.getStatistics(null);
         assertEquals(true, searchKrill.getIndex().isReaderOpen());
         Form form = new Form();
         form.param("token", "secret");
-        Response response = target().path(API_VERSION).path("index")
+        response = target().path(API_VERSION).path("index")
                 .path("close").request().post(Entity.form(form));
         assertEquals(HttpStatus.SC_OK, response.getStatus());
         assertEquals(false, searchKrill.getIndex().isReaderOpen());
         // Cleaning database and cache
         Thread.sleep(200);
+        
+        // check VC has been cached after closing index
+        response = target().path(API_VERSION).path("vc").path("~system")
+                .path("named-vc1").request()
+                .header(Attributes.AUTHORIZATION, HttpAuthorizationHandler
+                        .createBasicAuthorizationHeaderValue("admin", "pass"))
+                .get();
+
+    	assertEquals(HttpStatus.SC_OK, response.getStatus());
+    	String entity = response.readEntity(String.class);
+        JsonNode node = JsonUtils.readTree(entity);
+
+        // clean up
         response = target().path(API_VERSION).path("vc").path("~system")
                 .path("named-vc1").request()
                 .header(Attributes.AUTHORIZATION, HttpAuthorizationHandler
@@ -68,8 +89,8 @@
                 .delete();
         response = target().path(API_VERSION).path("vc").path("~system")
                 .path("named-vc1").request().get();
-        String entity = response.readEntity(String.class);
-        JsonNode node = JsonUtils.readTree(entity);
+        entity = response.readEntity(String.class);
+        node = JsonUtils.readTree(entity);
         assertEquals(StatusCodes.NO_RESOURCE_FOUND,
                 node.at("/errors/0/0").asInt());
     }
diff --git a/src/test/resources/test-config-lite.xml b/src/test/resources/test-config-lite.xml
index 5de7bd6..703ad29 100644
--- a/src/test/resources/test-config-lite.xml
+++ b/src/test/resources/test-config-lite.xml
@@ -176,6 +176,11 @@
 		/> <bean id="searchController" class="de.ids_mannheim.korap.web.controller.SearchController" 
 		/> <bean id="statisticController" class="de.ids_mannheim.korap.web.controller.StatisticController" 
 		/> -->
+		
+	<!-- VC loader -->
+	<bean id="vcLoader"
+		class="de.ids_mannheim.korap.init.DummyNamedVCLoaderImpl" />
+	
 	<!-- Services -->
 	<bean id="scopeService"
 		class="de.ids_mannheim.korap.oauth2.service.DummyOAuth2ScopeServiceImpl" />
