diff --git a/Changes b/Changes
index 5825f43..4ea3238 100644
--- a/Changes
+++ b/Changes
@@ -2,7 +2,9 @@
 
 - Update statistics in VC info and list web-services to use VC cache (referTo) 
   instead of the original KoralQuery definitions (#791).
-- Setup system-vc in Initializator instead of using SQL for testing 
+- Setup system-vc in Initializator instead of using SQL for testing
+- Setup creating nemo-vc in VirtualCorpusTestBase instead of using SQL 
+  for testing 
 
 # version 0.76
 
diff --git a/src/main/resources/db/test/V3.1__insert_virtual_corpus.sql b/src/main/resources/db/test/V3.1__insert_virtual_corpus.sql
index 57b6797..6c22329 100644
--- a/src/main/resources/db/test/V3.1__insert_virtual_corpus.sql
+++ b/src/main/resources/db/test/V3.1__insert_virtual_corpus.sql
@@ -81,9 +81,9 @@
 	VALUES ("marlin-vc", "PRIVATE", "VIRTUAL_CORPUS", "FREE", "marlin", "marlin test share vc", "experimental",
 	'{"collection": { "@type": "koral:docGroup", "operands": [ { "@type": "koral:doc", "key": "corpusSigle", "match": "match:eq", "value": "GOE" }, { "@type": "koral:doc", "key": "creationDate", "match": "match:geq", "type": "type:date", "value": "1820" } ], "operation": "operation:and" }}');
 
-INSERT INTO query(name, type, query_type, required_access, created_by, description, status, koral_query) 
-	VALUES ("nemo-vc", "PRIVATE", "VIRTUAL_CORPUS", "ALL", "nemo", "nemo test vc", "experimental",
-	'{"collection":{"@type":"koral:doc","value":"GOE","match":"match:eq","key":"corpusSigle"}}');	
+--INSERT INTO query(name, type, query_type, required_access, created_by, description, status, koral_query) 
+--	VALUES ("nemo-vc", "PRIVATE", "VIRTUAL_CORPUS", "ALL", "nemo", "nemo test vc", "experimental",
+--	'{"collection":{"@type":"koral:doc","value":"GOE","match":"match:eq","key":"corpusSigle"}}');	
 	
 -- virtual corpus access
 --INSERT INTO query_access(query_id, user_group_id, status, created_by) 
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 63f31ed..9deb763 100644
--- a/src/test/java/de/ids_mannheim/korap/dao/VirtualCorpusDaoTest.java
+++ b/src/test/java/de/ids_mannheim/korap/dao/VirtualCorpusDaoTest.java
@@ -6,20 +6,19 @@
 import java.util.Iterator;
 import java.util.List;
 
-import jakarta.persistence.PersistenceException;
-
 import org.junit.jupiter.api.Test;
 import org.springframework.beans.factory.annotation.Autowired;
 
-import de.ids_mannheim.korap.config.SpringJerseyTest;
 import de.ids_mannheim.korap.constant.QueryType;
 import de.ids_mannheim.korap.constant.ResourceType;
 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.user.User;
+import de.ids_mannheim.korap.web.controller.vc.VirtualCorpusTestBase;
+import jakarta.persistence.PersistenceException;
 
-public class VirtualCorpusDaoTest extends SpringJerseyTest {
+public class VirtualCorpusDaoTest extends VirtualCorpusTestBase {
 
     @Autowired
     private QueryDao dao;
@@ -106,12 +105,16 @@
      */
     @Test
     public void retrieveVCByUserNemo () throws KustvaktException {
+    	createNemoVC();
+    	
         List<QueryDO> virtualCorpora = dao.retrieveQueryByUser("nemo",
                 QueryType.VIRTUAL_CORPUS);
         assertEquals(2, virtualCorpora.size());
         Iterator<QueryDO> i = virtualCorpora.iterator();
-        assertEquals("nemo-vc",i.next().getName());
         assertEquals("system-vc",i.next().getName());
+        assertEquals("nemo-vc",i.next().getName());
+        
+        deleteVC("nemo-vc", "nemo", "nemo");
     }
 
     /**
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 1315c95..c3191f7 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
@@ -1,18 +1,13 @@
 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.assertTrue;
 
 import java.io.IOException;
 
-import org.junit.jupiter.api.AfterAll;
-import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 
 import com.fasterxml.jackson.databind.JsonNode;
 
-import de.ids_mannheim.korap.cache.VirtualCorpusCache;
 import de.ids_mannheim.korap.exceptions.KustvaktException;
 import de.ids_mannheim.korap.user.User.CorpusAccess;
 import de.ids_mannheim.korap.util.QueryException;
@@ -24,12 +19,14 @@
     @Test
     public void testListVCNemo ()
             throws ProcessingException, KustvaktException {
+    	createNemoVC();
         JsonNode node = testListOwnerVC("nemo");
         assertEquals(1, node.size());
         node = listSystemVC("nemo");
         assertEquals(1, node.size());
         node = listVC("nemo");
         assertEquals(2, node.size());
+        deleteVC("nemo-vc", "nemo", "nemo");
     }
 
     @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 6fad6d7..a732de5 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
@@ -160,12 +160,12 @@
     private void testAddMemberAfterSharingPublishedVC (String hiddenGroupName)
             throws KustvaktException {
         JsonNode node = listVC("nemo");
-        assertEquals(2, node.size());
+        assertEquals(1, node.size());
 
         addMember(marlinGroupName, "nemo", "marlin");
 
         node = listVC("nemo");
-        assertEquals(3, node.size());
+        assertEquals(2, node.size());
 
         node = listRolesByGroup("admin", marlinGroupName);
         assertEquals(3, node.at("/0/members").size());
diff --git a/src/test/java/de/ids_mannheim/korap/web/controller/vc/VirtualCorpusSharingTest.java b/src/test/java/de/ids_mannheim/korap/web/controller/vc/VirtualCorpusSharingTest.java
index 5a1b900..96cfab2 100644
--- a/src/test/java/de/ids_mannheim/korap/web/controller/vc/VirtualCorpusSharingTest.java
+++ b/src/test/java/de/ids_mannheim/korap/web/controller/vc/VirtualCorpusSharingTest.java
@@ -62,6 +62,7 @@
         JsonNode node = listRolesByGroup("marlin", marlinGroupName);
         assertEquals(0, node.size());
 
+        createNemoVC();
         // share by member unauthorized
         Response response = shareVCByCreator("nemo", "nemo-vc",
                 marlinGroupName);
@@ -77,6 +78,7 @@
         node = listRolesByGroup("marlin", marlinGroupName);
         assertEquals(1, node.size());
         deleteGroupByName(marlinGroupName, "marlin");
+        deleteVC("nemo-vc", "nemo", "nemo");
     }
 
     private void testShareVC_redundant (String vcCreator, String vcName,
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 4babd96..5826a62 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
@@ -44,6 +44,18 @@
         return JsonUtils.readTree(entity);
     }
 
+    protected void createNemoVC() throws KustvaktException {
+    	String authHeader = HttpAuthorizationHandler
+                .createBasicAuthorizationHeaderValue("nemo", "pass");
+    	
+    	String vcJson = "{\"type\": \"PRIVATE\""
+                + ",\"queryType\": \"VIRTUAL_CORPUS\""
+    			+ ",\"status\":\"experimental\""
+                + ",\"corpusQuery\": \"corpusSigle=GOE\"}";
+    	createVC(authHeader, "nemo", "nemo-vc", vcJson);
+    };
+    
+    
     protected void createVC (String authHeader, String username, String vcName,
             String vcJson) throws KustvaktException {
         Response response = target().path(API_VERSION).path("vc")
