diff --git a/Changes b/Changes
index 4cf31b7..44e175c 100644
--- a/Changes
+++ b/Changes
@@ -1,3 +1,8 @@
+# version 0.77-SNAPSHOT
+
+- Update statistics in VC info and list web-services to use VC cache (referTo) 
+  instead of the original KoralQuery definitions (#791).
+
 # version 0.76
 
 - Add institution & landingPage to the resource web-service (#777)
diff --git a/src/main/java/de/ids_mannheim/korap/core/service/StatisticService.java b/src/main/java/de/ids_mannheim/korap/core/service/StatisticService.java
index e4451b8..f7fadb1 100644
--- a/src/main/java/de/ids_mannheim/korap/core/service/StatisticService.java
+++ b/src/main/java/de/ids_mannheim/korap/core/service/StatisticService.java
@@ -22,26 +22,34 @@
     @Autowired
     private KustvaktConfiguration config;
 
-    public String retrieveStatisticsForCorpusQuery (List<String> cqList) throws KustvaktException {
+	public String retrieveStatisticsForCorpusQuery (List<String> cqList)
+			throws KustvaktException {
 
-        KoralCollectionQueryBuilder builder = new KoralCollectionQueryBuilder();
-        String cq = combineMultipleCorpusQuery(cqList);
-        String json = null;
-        if (cq != null && !cq.isEmpty()) {
-            builder.with(cq);
-            json = builder.toJSON();
-        }
+		String json = buildKoralQueryFromCorpusQuery(cqList);
+		String stats = searchKrill.getStatistics(json);
 
-        if (json != null) {
-            checkVC(json);
-        }
-        String stats = searchKrill.getStatistics(json);
+		if (stats.contains("-1")) {
+			throw new KustvaktException(StatusCodes.NO_RESULT_FOUND);
+		}
+		return stats;
+	}
 
-        if (stats.contains("-1")) {
-            throw new KustvaktException(StatusCodes.NO_RESULT_FOUND);
-        }
-        return stats;
-    }
+	public String buildKoralQueryFromCorpusQuery (List<String> cqList)
+			throws KustvaktException {
+		KoralCollectionQueryBuilder builder = new KoralCollectionQueryBuilder();
+		String cq = combineMultipleCorpusQuery(cqList);
+		String json = null;
+		if (cq != null && !cq.isEmpty()) {
+			builder.with(cq);
+			json = builder.toJSON();
+		}
+
+		if (json != null) {
+			checkVC(json);
+		}
+		return json;
+	}
+    
 
     private void checkVC (String json) throws KustvaktException {
         JsonNode node = JsonUtils.readTree(json);
diff --git a/src/main/java/de/ids_mannheim/korap/service/QueryService.java b/src/main/java/de/ids_mannheim/korap/service/QueryService.java
index 1962167..e3591c3 100644
--- a/src/main/java/de/ids_mannheim/korap/service/QueryService.java
+++ b/src/main/java/de/ids_mannheim/korap/service/QueryService.java
@@ -23,6 +23,7 @@
 import de.ids_mannheim.korap.constant.PrivilegeType;
 import de.ids_mannheim.korap.constant.QueryType;
 import de.ids_mannheim.korap.constant.ResourceType;
+import de.ids_mannheim.korap.core.service.StatisticService;
 import de.ids_mannheim.korap.dao.AdminDao;
 import de.ids_mannheim.korap.dao.QueryDao;
 import de.ids_mannheim.korap.dao.RoleDao;
@@ -90,6 +91,9 @@
     @Autowired
     private UserGroupService userGroupService;
     @Autowired
+    private StatisticService statisticService;
+    
+    @Autowired
     private SearchKrill krill;
     @Autowired
     private FullConfiguration config;
@@ -144,15 +148,24 @@
         Iterator<QueryDO> i = queryList.iterator();
         while (i.hasNext()) {
             query = i.next();
-            // String json = query.getKoralQuery();
+            String json = "";
             String statistics = null;
-            // if (queryType.equals(QueryType.VIRTUAL_CORPUS)) {
-            // statistics = krill.getStatistics(json);
-            // }
-            QueryDto dto = converter.createQueryDto(query, statistics);
-            dtos.add(dto);
-        }
-        return dtos;
+			if (queryType.equals(QueryType.VIRTUAL_CORPUS)) {
+				if (query.isCached()) {
+					List<String> cqList = new ArrayList<>(1);
+					cqList.add("referTo " + query.getName());
+					json = statisticService
+							.buildKoralQueryFromCorpusQuery(cqList);
+				}
+				else {
+					json = query.getKoralQuery();
+				}
+				statistics = krill.getStatistics(json);
+			}
+			QueryDto dto = converter.createQueryDto(query, statistics);
+			dtos.add(dto);
+		}
+		return dtos;
     }
 
     public void deleteQueryByName (String deletedBy, String queryName,
@@ -675,24 +688,30 @@
         return query;
     }
 
-    public QueryDto retrieveQueryByName (String username, String queryName,
+	public QueryDto retrieveQueryByName (String username, String queryName,
             String createdBy, QueryType queryType) throws KustvaktException {
         QueryDO query = searchQueryByName(username, queryName, createdBy,
                 queryType);
 
         String statistics = null;
-        // long start,end;
-        // start = System.currentTimeMillis();
-         if (query.getQueryType().equals(QueryType.VIRTUAL_CORPUS)) {
-              String json = query.getKoralQuery();
-              statistics = krill.getStatistics(json);
-         }
-        // end = System.currentTimeMillis();
-        // jlog.debug("{} statistics duration: {}", queryName, (end -
-        // start));
+        String json = "";
+		if (query.getQueryType().equals(QueryType.VIRTUAL_CORPUS)) {
+			if (query.isCached()) {
+				List<String> cqList = new ArrayList<>(1);
+				cqList.add("referTo " + query.getName());
+				json = statisticService
+						.buildKoralQueryFromCorpusQuery(cqList);
+			}
+			else { 
+				json = query.getKoralQuery();
+			}
+			statistics = krill.getStatistics(json);
+		}
         return converter.createQueryDto(query, statistics);
     }
 
+    //EM: unused
+	@Deprecated
     public QueryDto searchQueryById (String username, int queryId)
             throws KustvaktException {
 
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 7f45f6f..1315c95 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,14 +1,21 @@
 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;
 import jakarta.ws.rs.ProcessingException;
 import jakarta.ws.rs.core.Response;
 
@@ -27,7 +34,7 @@
 
     @Test
     public void testListVCPearl ()
-            throws ProcessingException, KustvaktException {
+            throws ProcessingException, KustvaktException, IOException, QueryException {
         JsonNode node = testListOwnerVC("pearl");
         assertEquals(0, node.size());
         node = listVC("pearl");
@@ -35,14 +42,13 @@
         node = node.get(0);
 		assertEquals("system-vc", node.at("/name").asText());
 		assertEquals("system", node.at("/type").asText());
-		assertEquals("experimental", node.at("/status").asText());
 		assertEquals(CorpusAccess.ALL.name(),
 				node.at("/requiredAccess").asText());
 		assertEquals("system", node.at("/createdBy").asText());
-        assertTrue(node.at("/numberOfDoc").isMissingNode());
-        assertTrue(node.at("/numberOfParagraphs").isMissingNode());
-        assertTrue(node.at("/numberOfSentences").isMissingNode());
-        assertTrue(node.at("/numberOfTokens").isMissingNode());
+        assertEquals(11,node.at("/numberOfDoc").asInt());
+        assertEquals(772,node.at("/numberOfParagraphs").asInt());
+        assertEquals(25074,node.at("/numberOfSentences").asInt());
+        assertEquals(665842,node.at("/numberOfTokens").asInt());
     }
 
     @Test
