diff --git a/src/test/java/de/ids_mannheim/korap/dao/VirtualCorpusDaoTest.java b/src/test/java/de/ids_mannheim/korap/dao/VirtualCorpusDaoTest.java
index 9deb763..8445a20 100644
--- a/src/test/java/de/ids_mannheim/korap/dao/VirtualCorpusDaoTest.java
+++ b/src/test/java/de/ids_mannheim/korap/dao/VirtualCorpusDaoTest.java
@@ -25,13 +25,17 @@
 
     @Test
     public void testListVCByType () throws KustvaktException {
+    	createDoryVC();
+    	
         List<QueryDO> vcList = dao.retrieveQueryByType(ResourceType.PUBLISHED,
                 null, QueryType.VIRTUAL_CORPUS);
         assertEquals(1, vcList.size());
         QueryDO vc = vcList.get(0);
-        assertEquals(3, vc.getId());
+        assertEquals(2, vc.getId());
         assertEquals("published-vc", vc.getName());
         assertEquals("marlin", vc.getCreatedBy());
+        
+        deleteVC("dory-vc", "dory", "dory");
     }
 
     @Test
@@ -87,14 +91,18 @@
      */
     @Test
     public void retrieveVCByUserDory () throws KustvaktException {
+    	createDoryVC();
+    	
         List<QueryDO> virtualCorpora = dao.retrieveQueryByUser("dory",
                 QueryType.VIRTUAL_CORPUS);
         assertEquals(3, virtualCorpora.size());
         // ordered by id
         Iterator<QueryDO> i = virtualCorpora.iterator();
-        assertEquals("dory-vc", i.next().getName());
         assertEquals("group-vc", i.next().getName());
         assertEquals("system-vc", i.next().getName());
+        assertEquals("dory-vc", i.next().getName());
+        
+        deleteVC("dory-vc", "dory", "dory");
     }
 
     /**
diff --git a/src/test/java/de/ids_mannheim/korap/rewrite/VirtualCorpusReferenceRewriteTest.java b/src/test/java/de/ids_mannheim/korap/rewrite/VirtualCorpusReferenceRewriteTest.java
index b813c31..c5ae661 100644
--- a/src/test/java/de/ids_mannheim/korap/rewrite/VirtualCorpusReferenceRewriteTest.java
+++ b/src/test/java/de/ids_mannheim/korap/rewrite/VirtualCorpusReferenceRewriteTest.java
@@ -22,12 +22,13 @@
 import de.ids_mannheim.korap.init.NamedVCLoader;
 import de.ids_mannheim.korap.util.QueryException;
 import de.ids_mannheim.korap.utils.JsonUtils;
+import de.ids_mannheim.korap.web.controller.vc.VirtualCorpusTestBase;
 import jakarta.ws.rs.core.Response;
 
 /**
  * @author margaretha
  */
-public class VirtualCorpusReferenceRewriteTest extends SpringJerseyTest {
+public class VirtualCorpusReferenceRewriteTest extends VirtualCorpusTestBase {
 
     @Autowired
     private NamedVCLoader vcLoader;
@@ -101,7 +102,6 @@
 //        assertEquals("match:eq", node.at("/operands/1/match").asText());
 //        assertEquals("corpusSigle", node.at("/operands/1/key").asText());
 //        
-        System.out.println(node.toPrettyString());
         node = node.at("/rewrites/0");
         assertEquals("operation:override", node.at("/operation").asText());
         assertEquals("koral:docGroupRef", node.at("/original/@type").asText());
@@ -151,6 +151,8 @@
     @Test
     public void testRewriteWithDoryVCRef ()
             throws KustvaktException, IOException, QueryException {
+    	createDoryVC();
+    	
         Response response = target().path(API_VERSION).path("search")
                 .queryParam("q", "Fisch").queryParam("ql", "poliqarp")
                 .queryParam("cq", "referTo \"dory/dory-vc\"").request()
@@ -173,5 +175,6 @@
         assertEquals("koral:docGroupRef", node.at("/original/@type").asText());
         assertEquals("dory/dory-vc", node.at("/original/ref").asText());
         
+        deleteVC("dory-vc", "dory", "dory");
     }
 }
diff --git a/src/test/java/de/ids_mannheim/korap/web/controller/OAuth2AccessTokenTest.java b/src/test/java/de/ids_mannheim/korap/web/controller/OAuth2AccessTokenTest.java
index d537584..5158b46 100644
--- a/src/test/java/de/ids_mannheim/korap/web/controller/OAuth2AccessTokenTest.java
+++ b/src/test/java/de/ids_mannheim/korap/web/controller/OAuth2AccessTokenTest.java
@@ -18,10 +18,11 @@
 import de.ids_mannheim.korap.exceptions.StatusCodes;
 import de.ids_mannheim.korap.utils.JsonUtils;
 import de.ids_mannheim.korap.web.controller.usergroup.UserGroupTestBase;
+import de.ids_mannheim.korap.web.controller.vc.VirtualCorpusTestBase;
 import jakarta.ws.rs.core.Response;
 import jakarta.ws.rs.core.Response.Status;
 
-public class OAuth2AccessTokenTest extends UserGroupTestBase {
+public class OAuth2AccessTokenTest extends VirtualCorpusTestBase {
 
     private String userAuthHeader;
 
@@ -61,6 +62,8 @@
 
     @Test
     public void testCustomScope () throws KustvaktException {
+    	createDoryVC();
+    	
         Response response = requestAuthorizationCode("code",
                 confidentialClientId, "", OAuth2Scope.VC_INFO.toString(), "",
                 userAuthHeader);
@@ -84,6 +87,8 @@
                 ACCESS_TOKEN_TYPE);
         revokeToken(refreshToken, confidentialClientId, clientSecret,
                 REFRESH_TOKEN_TYPE);
+        
+        deleteVC("dory-vc", "dory", "dory");
     }
 
     @Test
diff --git a/src/test/java/de/ids_mannheim/korap/web/controller/SearchPublicMetadataTest.java b/src/test/java/de/ids_mannheim/korap/web/controller/SearchPublicMetadataTest.java
index 5517c75..c3b9994 100644
--- a/src/test/java/de/ids_mannheim/korap/web/controller/SearchPublicMetadataTest.java
+++ b/src/test/java/de/ids_mannheim/korap/web/controller/SearchPublicMetadataTest.java
@@ -16,11 +16,12 @@
 import de.ids_mannheim.korap.query.serialize.MetaQueryBuilder;
 import de.ids_mannheim.korap.query.serialize.QuerySerializer;
 import de.ids_mannheim.korap.utils.JsonUtils;
+import de.ids_mannheim.korap.web.controller.vc.VirtualCorpusTestBase;
 import jakarta.ws.rs.client.Entity;
 import jakarta.ws.rs.core.Response;
 import jakarta.ws.rs.core.Response.Status;
 
-public class SearchPublicMetadataTest extends SpringJerseyTest {
+public class SearchPublicMetadataTest extends VirtualCorpusTestBase {
 
     @Test
     public void testSearchPublicMetadata () throws KustvaktException {
@@ -138,6 +139,7 @@
     @Test
     public void testSearchPublicMetadataWithPrivateVC ()
             throws KustvaktException {
+    	createDoryVC();
         Response response = target().path(API_VERSION).path("search")
                 .queryParam("q", "Sonne").queryParam("ql", "poliqarp")
                 .queryParam("cq", "referTo \"dory/dory-vc\"")
@@ -147,5 +149,6 @@
         assertEquals(StatusCodes.AUTHORIZATION_FAILED,
                 node.at("/errors/0/0").asInt());
         assertEquals(node.at("/errors/0/2").asText(), "guest");
+        deleteVC("dory-vc", "dory", "dory");
     }
 }
diff --git a/src/test/java/de/ids_mannheim/korap/web/controller/vc/VirtualCorpusControllerTest.java b/src/test/java/de/ids_mannheim/korap/web/controller/vc/VirtualCorpusControllerTest.java
index fad276a..9f53164 100644
--- a/src/test/java/de/ids_mannheim/korap/web/controller/vc/VirtualCorpusControllerTest.java
+++ b/src/test/java/de/ids_mannheim/korap/web/controller/vc/VirtualCorpusControllerTest.java
@@ -42,10 +42,12 @@
 
     @Test
     public void testDeleteVC_unauthorized () throws KustvaktException {
+    	createDoryVC();
         Response response = target().path(API_VERSION).path("vc").path("~dory")
                 .path("dory-vc").request()
                 .header(Attributes.AUTHORIZATION, authHeader).delete();
         testResponseUnauthorized(response, testUser);
+        deleteVC("dory-vc", "dory", "dory");
     }
     
     private void testDeleteSystemVC (String vcName) throws KustvaktException {
@@ -405,6 +407,7 @@
 
     @Test
     public void testEditVC () throws KustvaktException {
+    	createDoryVC();
         // 1st edit
         String json = "{\"description\": \"edited vc\"}";
         editVC("dory", "dory", "dory-vc", json);
@@ -417,6 +420,7 @@
         // check VC
         node = retrieveVCInfo("dory", "dory", "dory-vc");
         assertEquals(node.at("/description").asText(), "test vc");
+        deleteVC("dory-vc", "dory", "dory");
     }
 
     @Test
@@ -438,6 +442,7 @@
     @Test
     public void testEditCorpusQuery ()
             throws ProcessingException, KustvaktException {
+    	createDoryVC();
         JsonNode node = testRetrieveKoralQuery("dory", "dory-vc");
         assertEquals(node.at("/collection/@type").asText(), "koral:docGroup");
         assertEquals(node.at("/collection/operation").asText(),
@@ -463,6 +468,8 @@
         assertEquals(node.at("/collection/operands/1/key").asText(),
                 "creationDate");
         assertEquals(node.at("/collection/operands/1/value").asText(), "1820");
+        
+        deleteVC("dory-vc", "dory", "dory");
     }
 
     private JsonNode testRetrieveKoralQuery (String username, String vcName)
diff --git a/src/test/java/de/ids_mannheim/korap/web/controller/vc/VirtualCorpusInfoTest.java b/src/test/java/de/ids_mannheim/korap/web/controller/vc/VirtualCorpusInfoTest.java
index 552026f..94f4129 100644
--- a/src/test/java/de/ids_mannheim/korap/web/controller/vc/VirtualCorpusInfoTest.java
+++ b/src/test/java/de/ids_mannheim/korap/web/controller/vc/VirtualCorpusInfoTest.java
@@ -4,7 +4,6 @@
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import org.junit.jupiter.api.Test;
-import org.mozilla.javascript.Node;
 
 import com.fasterxml.jackson.databind.JsonNode;
 
@@ -57,23 +56,27 @@
     @Test
     public void testRetrievePrivateVC ()
             throws KustvaktException {
+    	createDoryVC();
         JsonNode node = retrieveVCInfo("dory", "dory", "dory-vc");
         assertEquals(node.at("/name").asText(), "dory-vc");
         assertEquals(ResourceType.PRIVATE.displayName(),
                 node.at("/type").asText());
         
         testStatistics(node);
+        deleteVC("dory-vc", "dory", "dory");
     }
 
     @Test
     public void testRetrievePrivateVC_unauthorized ()
             throws KustvaktException {
+    	createDoryVC();
         Response response = target().path(API_VERSION).path("vc").path("~dory")
                 .path("dory-vc").request()
                 .header(Attributes.AUTHORIZATION, HttpAuthorizationHandler
                         .createBasicAuthorizationHeaderValue(testUser, "pass"))
                 .get();
         testResponseUnauthorized(response, testUser);
+        deleteVC("dory-vc", "dory", "dory");
     }
 
     @Test
@@ -124,6 +127,7 @@
     @Test
     public void testRetrievePrivateVC_admin ()
             throws KustvaktException {
+    	createDoryVC();
         Response response = target().path(API_VERSION).path("vc").path("~dory")
                 .path("dory-vc").request()
                 .header(Attributes.AUTHORIZATION, HttpAuthorizationHandler
@@ -132,8 +136,8 @@
         assertEquals(Status.OK.getStatusCode(), response.getStatus());
         String entity = response.readEntity(String.class);
         JsonNode node = JsonUtils.readTree(entity);
-        assertEquals(1, node.at("/id").asInt());
         assertEquals(node.at("/name").asText(), "dory-vc");
+        deleteVC("dory-vc", "dory", "dory");
     }
 
     @Test
diff --git a/src/test/java/de/ids_mannheim/korap/web/controller/vc/VirtualCorpusListTest.java b/src/test/java/de/ids_mannheim/korap/web/controller/vc/VirtualCorpusListTest.java
index c3191f7..1effbc1 100644
--- a/src/test/java/de/ids_mannheim/korap/web/controller/vc/VirtualCorpusListTest.java
+++ b/src/test/java/de/ids_mannheim/korap/web/controller/vc/VirtualCorpusListTest.java
@@ -61,10 +61,12 @@
     @Test
     public void testListVCDory ()
             throws ProcessingException, KustvaktException {
+    	createDoryVC();
         JsonNode node = testListOwnerVC("dory");
         assertEquals(2, node.size());
         node = listVC("dory");
         assertEquals(3, node.size());
+        deleteVC("dory-vc", "dory", "dory");
     }
 
     @Test
diff --git a/src/test/java/de/ids_mannheim/korap/web/controller/vc/VirtualCorpusPublishedTest.java b/src/test/java/de/ids_mannheim/korap/web/controller/vc/VirtualCorpusPublishedTest.java
index a732de5..09ab24c 100644
--- a/src/test/java/de/ids_mannheim/korap/web/controller/vc/VirtualCorpusPublishedTest.java
+++ b/src/test/java/de/ids_mannheim/korap/web/controller/vc/VirtualCorpusPublishedTest.java
@@ -95,7 +95,8 @@
     
     @Test
     public void testMarlinPublishedVC () throws KustvaktException {
-        
+        createDoryVC();
+    	
         JsonNode node = testListOwnerVC("marlin");
         assertEquals(2, node.size());
         node = listVC("marlin");
@@ -123,6 +124,7 @@
         assertEquals(0, node.size());
         
         deleteGroupByName(marlinGroupName, "marlin");
+        deleteVC("dory-vc", "dory", "dory");
     }
     
     private String testSharePublishedVC (String vcName) throws KustvaktException {
@@ -187,7 +189,7 @@
         
         // check VC type
         node = testListOwnerVC("dory");
-        JsonNode n = node.get(1);
+        JsonNode n = node.get(0);
         assertEquals(ResourceType.PUBLISHED.displayName(),
                 n.get("type").asText());
         
@@ -205,7 +207,7 @@
         editVC("dory", "dory", vcName, json);
         node = testListOwnerVC("dory");
         assertEquals(ResourceType.PROJECT.displayName(),
-                node.get(1).get("type").asText());
+                node.get(0).get("type").asText());
         
         testHiddenGroupNotFound(hiddenGroupName);
     }
diff --git a/src/test/java/de/ids_mannheim/korap/web/controller/vc/VirtualCorpusReferenceTest.java b/src/test/java/de/ids_mannheim/korap/web/controller/vc/VirtualCorpusReferenceTest.java
index ad0ba98..4dc67e7 100644
--- a/src/test/java/de/ids_mannheim/korap/web/controller/vc/VirtualCorpusReferenceTest.java
+++ b/src/test/java/de/ids_mannheim/korap/web/controller/vc/VirtualCorpusReferenceTest.java
@@ -161,6 +161,7 @@
 
     @Test
     public void testRefNotAuthorized () throws KustvaktException {
+    	createDoryVC();
         Response response = target().path(API_VERSION).path("search")
                 .queryParam("q", "[orth=der]").queryParam("ql", "poliqarp")
                 .queryParam("cq", "referTo \"dory/dory-vc\"").request().get();
@@ -169,6 +170,7 @@
         assertEquals(StatusCodes.AUTHORIZATION_FAILED,
                 node.at("/errors/0/0").asInt());
         assertEquals(node.at("/errors/0/2").asText(), "guest");
+        deleteVC("dory-vc", "dory", "dory");
     }
 
     @Test
diff --git a/src/test/java/de/ids_mannheim/korap/web/controller/vc/VirtualCorpusTestBase.java b/src/test/java/de/ids_mannheim/korap/web/controller/vc/VirtualCorpusTestBase.java
index 5826a62..27fecab 100644
--- a/src/test/java/de/ids_mannheim/korap/web/controller/vc/VirtualCorpusTestBase.java
+++ b/src/test/java/de/ids_mannheim/korap/web/controller/vc/VirtualCorpusTestBase.java
@@ -55,6 +55,18 @@
     	createVC(authHeader, "nemo", "nemo-vc", vcJson);
     };
     
+	protected void createDoryVC () throws KustvaktException {
+		String authHeader = HttpAuthorizationHandler
+				.createBasicAuthorizationHeaderValue("dory", "pass");
+
+		String vcJson = "{\"type\": \"PRIVATE\""
+				+ ",\"queryType\": \"VIRTUAL_CORPUS\""
+				+ ",\"status\":\"experimental\""
+				+ ",\"corpusQuery\": \"corpusSigle=GOE AND creationDate since "
+				+ "1820\"}";
+		createVC(authHeader, "dory", "dory-vc", vcJson);
+	};
+    
     
     protected void createVC (String authHeader, String username, String vcName,
             String vcJson) throws KustvaktException {
diff --git a/src/test/resources/kustvakt-icc.conf b/src/test/resources/kustvakt-icc.conf
index 9714955..9e851c9 100644
--- a/src/test/resources/kustvakt-icc.conf
+++ b/src/test/resources/kustvakt-icc.conf
@@ -6,7 +6,7 @@
 krill.index.commit.auto = 500
 krill.index.relations.max = 100
 # Directory path of virtual corpora to cache
-#krill.namedVC = vc
+krill.namedVC = vc
 krill.test = true
 
 # LDAP
