diff --git a/src/main/java/de/ids_mannheim/korap/config/FullConfiguration.java b/src/main/java/de/ids_mannheim/korap/config/FullConfiguration.java
index d606c76..0c04abe 100644
--- a/src/main/java/de/ids_mannheim/korap/config/FullConfiguration.java
+++ b/src/main/java/de/ids_mannheim/korap/config/FullConfiguration.java
@@ -66,6 +66,7 @@
     private String namedVCPath;
 
     private boolean createInitialSuperClient;
+    private boolean includeStatisticsInVCList;
 
     public FullConfiguration (Properties properties) throws Exception {
         super(properties);
@@ -96,6 +97,8 @@
 
         setMaxNumberOfUserQueries(Integer.parseInt(
                 properties.getProperty("max.user.persistent.queries", "20")));
+		setIncludeStatisticsInVCList(Boolean.valueOf(properties.getProperty(
+				"vc.list.include.statistics", "false")));
     }
 
     private void setSecurityConfiguration (Properties properties)
@@ -427,4 +430,12 @@
         this.maxNumberOfUserQueries = maxNumberOfUserQueries;
     }
 
+	public boolean includeStatisticsInVCList () {
+		return includeStatisticsInVCList;
+	}
+
+	public void setIncludeStatisticsInVCList (boolean includeStatisticsInVCList) {
+		this.includeStatisticsInVCList = includeStatisticsInVCList;
+	}
+
 }
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 f329ab0..344ba6f 100644
--- a/src/main/java/de/ids_mannheim/korap/service/QueryService.java
+++ b/src/main/java/de/ids_mannheim/korap/service/QueryService.java
@@ -146,24 +146,32 @@
         Iterator<QueryDO> i = queryList.iterator();
         while (i.hasNext()) {
             query = i.next();
-            String json = "";
-            String statistics = null;
-			if (queryType.equals(QueryType.VIRTUAL_CORPUS)) {
-				if (query.isCached()) {
-					List<String> cqList = new ArrayList<>(1);
-					cqList.add("referTo " + query.getName());
-					json = buildKoralQueryFromCorpusQuery(cqList);
-				}
-				else {
-					json = query.getKoralQuery();
-				}
-				statistics = krill.getStatistics(json);
-			}
+            String statistics = computeStatisticsForVC(query, queryType);
 			QueryDto dto = converter.createQueryDto(query, statistics);
 			dtos.add(dto);
 		}
 		return dtos;
     }
+    
+	private String computeStatisticsForVC (QueryDO query, QueryType queryType)
+			throws KustvaktException {
+		if (config.includeStatisticsInVCList() && 
+				queryType.equals(QueryType.VIRTUAL_CORPUS)) {		
+    		String json = "";
+    		if (query.isCached()) {
+    			List<String> cqList = new ArrayList<>(1);
+    			cqList.add("referTo " + query.getName());
+    			json = buildKoralQueryFromCorpusQuery(cqList);
+    		}
+    		else {
+    			json = query.getKoralQuery();
+    		}
+    		return krill.getStatistics(json);
+		}
+		else {
+			return null;
+		}
+	}
 
     public void deleteQueryByName (String deletedBy, String queryName,
             String createdBy, QueryType type) throws KustvaktException {
diff --git a/src/main/resources/kustvakt.conf b/src/main/resources/kustvakt.conf
index e45ea32..7244d35 100644
--- a/src/main/resources/kustvakt.conf
+++ b/src/main/resources/kustvakt.conf
@@ -37,6 +37,9 @@
 default.foundry.morphology = marmot
 default.foundry.surface = base
 
+# Virtual corpus and queries
+max.user.persistent.queries = 5
+vc.list.include.statistics = false
 
 # Availability regex only support |
 # It should be removed/commented when the data doesn't contain availability field.
