diff --git a/Changes b/Changes
index 0049d3c..4f55980 100644
--- a/Changes
+++ b/Changes
@@ -12,6 +12,7 @@
 - Setup creating marlin-vc and published-vc in VirtualCorpusTestBase 
   instead of using SQL for testing 
 - Fixed request URI at OAuth2 token request API.  
+- Improved delete VC tests.
 
 # version 0.76
 
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 c5ae661..188dbcd 100644
--- a/src/test/java/de/ids_mannheim/korap/rewrite/VirtualCorpusReferenceRewriteTest.java
+++ b/src/test/java/de/ids_mannheim/korap/rewrite/VirtualCorpusReferenceRewriteTest.java
@@ -1,23 +1,19 @@
 package de.ids_mannheim.korap.rewrite;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.junit.jupiter.api.Assertions.assertFalse;
-import static org.junit.jupiter.api.Assertions.assertNull;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import java.io.IOException;
 
 import org.junit.jupiter.api.Test;
 import org.springframework.beans.factory.annotation.Autowired;
+
 import com.fasterxml.jackson.databind.JsonNode;
 import com.google.common.net.HttpHeaders;
 
 import de.ids_mannheim.korap.authentication.http.HttpAuthorizationHandler;
 import de.ids_mannheim.korap.cache.VirtualCorpusCache;
 import de.ids_mannheim.korap.config.Attributes;
-import de.ids_mannheim.korap.config.SpringJerseyTest;
-import de.ids_mannheim.korap.dao.QueryDao;
-import de.ids_mannheim.korap.entity.QueryDO;
 import de.ids_mannheim.korap.exceptions.KustvaktException;
 import de.ids_mannheim.korap.init.NamedVCLoader;
 import de.ids_mannheim.korap.util.QueryException;
@@ -33,9 +29,6 @@
     @Autowired
     private NamedVCLoader vcLoader;
 
-    @Autowired
-    private QueryDao dao;
-
     @Test
     public void testRefCachedVC ()
             throws KustvaktException, IOException, QueryException {
@@ -46,20 +39,14 @@
                 .queryParam("cq", "referTo named-vc1").request().get();
         String ent = response.readEntity(String.class);
         JsonNode node = JsonUtils.readTree(ent);
-        node = node.at("/collection");
-        assertEquals("koral:docGroup", node.at("/@type").asText());
+        assertEquals("koral:docGroup", node.at("/collection/@type").asText());
         assertTrue(node.at("/operands/1/rewrites").isMissingNode());
         
         testRefCachedVCWithUsername();
-        QueryDO vc = dao.retrieveQueryByName("named-vc1", "system");
-        dao.deleteQuery(vc);
-        vc = dao.retrieveQueryByName("named-vc1", "system");
-        assertNull(vc);
-        VirtualCorpusCache.delete("named-vc1");
-        assertFalse(VirtualCorpusCache.contains("named-vc1"));
+        testDeleteVC("named-vc1","system",admin);
     }
 
-    private void testRefCachedVCWithUsername ()
+	private void testRefCachedVCWithUsername ()
             throws KustvaktException, IOException, QueryException {
         Response response = target().path(API_VERSION).path("search")
                 .queryParam("q", "[orth=der]").queryParam("ql", "poliqarp")
@@ -67,8 +54,9 @@
                 .get();
         String ent = response.readEntity(String.class);
         JsonNode node = JsonUtils.readTree(ent);
+        assertTrue(node.at("/matches").size()>0);
         node = node.at("/collection");
-        assertEquals(node.at("/@type").asText(), "koral:docGroup");
+        assertEquals("koral:docGroup", node.at("/@type").asText());
         node = node.at("/operands/1/rewrites");
         
         assertEquals(1, node.size());
diff --git a/src/test/java/de/ids_mannheim/korap/web/controller/vc/VirtualCorpusFieldTest.java b/src/test/java/de/ids_mannheim/korap/web/controller/vc/VirtualCorpusFieldTest.java
index a56c34d..48e9c6b 100644
--- a/src/test/java/de/ids_mannheim/korap/web/controller/vc/VirtualCorpusFieldTest.java
+++ b/src/test/java/de/ids_mannheim/korap/web/controller/vc/VirtualCorpusFieldTest.java
@@ -7,14 +7,11 @@
 import org.apache.http.entity.ContentType;
 import org.junit.jupiter.api.Test;
 import org.springframework.beans.factory.annotation.Autowired;
+
 import com.fasterxml.jackson.databind.JsonNode;
 import com.google.common.net.HttpHeaders;
-import jakarta.ws.rs.ProcessingException;
-import jakarta.ws.rs.core.Response;
-import jakarta.ws.rs.core.Response.Status;
 
 import de.ids_mannheim.korap.authentication.http.HttpAuthorizationHandler;
-import de.ids_mannheim.korap.cache.VirtualCorpusCache;
 import de.ids_mannheim.korap.config.Attributes;
 import de.ids_mannheim.korap.dao.QueryDao;
 import de.ids_mannheim.korap.entity.QueryDO;
@@ -23,6 +20,9 @@
 import de.ids_mannheim.korap.init.NamedVCLoader;
 import de.ids_mannheim.korap.util.QueryException;
 import de.ids_mannheim.korap.utils.JsonUtils;
+import jakarta.ws.rs.ProcessingException;
+import jakarta.ws.rs.core.Response;
+import jakarta.ws.rs.core.Response.Status;
 
 public class VirtualCorpusFieldTest extends VirtualCorpusTestBase {
 
@@ -85,9 +85,7 @@
         testRetrieveUnknownTokens();
         testRetrieveProhibitedField("system", "named-vc1", "tokens");
         testRetrieveProhibitedField("system", "named-vc1", "base");
-        VirtualCorpusCache.delete("named-vc1");
-        
-        deleteVC("named-vc1", "system", "admin");
+        testDeleteVC("named-vc1", "system", "admin");
     }
 
     private void testRetrieveUnknownTokens ()
@@ -103,8 +101,7 @@
         vcLoader.loadVCToCache("named-vc2", "/vc/named-vc2.jsonld");
         JsonNode n = testRetrieveField("system", "named-vc2", "textSigle");
         assertEquals(2, n.at("/corpus/value").size());
-        VirtualCorpusCache.delete("named-vc2");
-        deleteVcFromDB("named-vc2");
+        testDeleteVC("named-vc2", "system", admin);
     }
 
     @Test
@@ -115,8 +112,7 @@
         n = n.at("/corpus/value");
         assertEquals(1, n.size());
         assertEquals(n.get(0).asText(), "GOE/AGI/00000");
-        VirtualCorpusCache.delete("named-vc3");
-        deleteVcFromDB("named-vc3");
+        testDeleteVC("named-vc3", "system", admin);
     }
 
     @Test
@@ -137,7 +133,6 @@
                 node.at("/errors/0/0").asInt());
         assertEquals(node.at("/errors/0/1").asText(),
                 "Unauthorized operation for user: dory");
-        VirtualCorpusCache.delete("named-vc3");
-        deleteVcFromDB("named-vc3");
+        testDeleteVC("named-vc3", "system", admin);
     }
 }
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 21833c6..c7a3eec 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
@@ -1,8 +1,6 @@
 package de.ids_mannheim.korap.web.controller.vc;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.junit.jupiter.api.Assertions.assertFalse;
-import static org.junit.jupiter.api.Assertions.assertNull;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import java.io.IOException;
@@ -16,8 +14,6 @@
 import de.ids_mannheim.korap.cache.VirtualCorpusCache;
 import de.ids_mannheim.korap.config.Attributes;
 import de.ids_mannheim.korap.constant.UserGroupStatus;
-import de.ids_mannheim.korap.dao.QueryDao;
-import de.ids_mannheim.korap.entity.QueryDO;
 import de.ids_mannheim.korap.exceptions.KustvaktException;
 import de.ids_mannheim.korap.exceptions.StatusCodes;
 import de.ids_mannheim.korap.init.NamedVCLoader;
@@ -31,9 +27,6 @@
     @Autowired
     private NamedVCLoader vcLoader;
 
-    @Autowired
-    private QueryDao dao;
-
     /**
      * VC data exists, but it has not been cached, so it is not found
      * in the DB.
@@ -64,19 +57,9 @@
         assertTrue(VirtualCorpusCache.contains("named-vc2"));
         node = testSearchWithRef_VC2();
         assertEquals(numOfMatches, node.at("/matches").size());
-        VirtualCorpusCache.delete("named-vc2");
-        assertFalse(VirtualCorpusCache.contains("named-vc2"));
-        QueryDO vc = dao.retrieveQueryByName("named-vc1", "system");
-        dao.deleteQuery(vc);
-        vc = dao.retrieveQueryByName("named-vc1", "system");
-        assertNull(vc);
-        vc = dao.retrieveQueryByName("named-vc2", "system");
-        dao.deleteQuery(vc);
-        vc = dao.retrieveQueryByName("named-vc2", "system");
-        assertNull(vc);
         
-        VirtualCorpusCache.delete("named-vc1");
-        assertFalse(VirtualCorpusCache.contains("named-vc1"));
+        testDeleteVC("named-vc1", "system", admin);
+        testDeleteVC("named-vc2", "system", admin);
     }
 
     private int testSearchWithoutRef_VC1 () throws KustvaktException {
@@ -122,16 +105,13 @@
         return JsonUtils.readTree(ent);
     }
 
-    @Test
-    public void testStatisticsWithRef () throws KustvaktException {
+    private void testStatisticsWithRef () throws KustvaktException {
         String corpusQuery = "availability = /CC.*/ & referTo named-vc1";
         Response response = target().path(API_VERSION).path("statistics")
                 .queryParam("cq", corpusQuery).request().get();
         String ent = response.readEntity(String.class);
         JsonNode node = JsonUtils.readTree(ent);
         assertEquals(2, node.at("/documents").asInt());
-        VirtualCorpusCache.delete("named-vc1");
-        assertFalse(VirtualCorpusCache.contains("named-vc1"));
     }
 
     @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 8843e51..f3d92de 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
@@ -4,6 +4,7 @@
 import static org.hamcrest.CoreMatchers.not;
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
 
 import java.util.List;
 import java.util.Map.Entry;
@@ -16,6 +17,7 @@
 import com.google.common.net.HttpHeaders;
 
 import de.ids_mannheim.korap.authentication.http.HttpAuthorizationHandler;
+import de.ids_mannheim.korap.cache.VirtualCorpusCache;
 import de.ids_mannheim.korap.config.Attributes;
 import de.ids_mannheim.korap.constant.ResourceType;
 import de.ids_mannheim.korap.exceptions.KustvaktException;
@@ -244,6 +246,24 @@
 //        assertEquals(Status.OK.getStatusCode(), response.getStatus());
         return response;
     }
+    
+	protected void testDeleteVC (String vcName, String vcCreator,
+			String deletedBy) throws KustvaktException {
+		deleteVC(vcName, vcCreator, deletedBy);
+		
+		Response response = target().path(API_VERSION).path("search")
+                .queryParam("q", "[orth=der]").queryParam("ql", "poliqarp")
+                .queryParam("cq", "referTo "+vcName).request().get();
+        
+        String ent = response.readEntity(String.class);
+        JsonNode node = JsonUtils.readTree(ent);
+		assertEquals(StatusCodes.NO_RESOURCE_FOUND,
+				node.at("/errors/0/0").asInt());
+		assertEquals("Virtual corpus "+vcCreator+"/"+vcName+" is not found.",
+				node.at("/errors/0/1").asText());
+        assertFalse(VirtualCorpusCache.contains(vcName));
+		
+	}
 
     protected void testResponseUnauthorized (Response response, String username)
             throws KustvaktException {
