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" />
