diff --git a/full/src/main/java/de/ids_mannheim/korap/config/NamedVCLoader.java b/full/src/main/java/de/ids_mannheim/korap/config/NamedVCLoader.java
index 1d5f2e5..115405e 100644
--- a/full/src/main/java/de/ids_mannheim/korap/config/NamedVCLoader.java
+++ b/full/src/main/java/de/ids_mannheim/korap/config/NamedVCLoader.java
@@ -60,7 +60,7 @@
         String json = IOUtils.toString(is, "utf-8");
         if (json != null) {
             cacheVC(json, filename);
-            vcService.storeVC(filename, ResourceType.SYSTEM,
+            vcService.storeQuery(filename, ResourceType.SYSTEM,
                     QueryType.VIRTUAL_CORPUS, json, null, null, null, true,
                     "system", null, null);
         }
@@ -102,7 +102,7 @@
                     // ignore
                     if (DEBUG) jlog.debug(e);
                 }
-                vcService.storeVC(filename, ResourceType.SYSTEM,
+                vcService.storeQuery(filename, ResourceType.SYSTEM,
                         QueryType.VIRTUAL_CORPUS, json, null, null, null, true,
                         "system", null, null);
             }
diff --git a/full/src/main/java/de/ids_mannheim/korap/service/VirtualCorpusService.java b/full/src/main/java/de/ids_mannheim/korap/service/VirtualCorpusService.java
index 67d46d7..8d17105 100644
--- a/full/src/main/java/de/ids_mannheim/korap/service/VirtualCorpusService.java
+++ b/full/src/main/java/de/ids_mannheim/korap/service/VirtualCorpusService.java
@@ -62,7 +62,7 @@
 
     public static boolean DEBUG = false;
 
-    public static Pattern vcNamePattern = Pattern.compile("[-\\w.]+");
+    public static Pattern queryNamePattern = Pattern.compile("[-\\w.]+");
 
     @Autowired
     private VirtualCorpusDao vcDao;
@@ -243,17 +243,17 @@
     // }
 
     public Status handlePutRequest (String username, String vcCreator,
-            String vcName, QueryJson vcJson) throws KustvaktException {
+            String vcName, QueryJson queryJson) throws KustvaktException {
 
         verifyUsername(username, vcCreator);
         VirtualCorpus vc = vcDao.retrieveVCByName(vcName, vcCreator);
-        ParameterChecker.checkObjectValue(vcJson, "request entity");
+        ParameterChecker.checkObjectValue(queryJson, "request entity");
         if (vc == null) {
-            storeVC(vcJson, vcName, username);
+            storeQuery(queryJson, vcName, username);
             return Status.CREATED;
         }
         else {
-            editVC(vc, vcJson, vcName, username);
+            editVC(vc, queryJson, vcName, username);
             return Status.NO_CONTENT;
         }
     }
@@ -322,38 +322,40 @@
         }
     }
 
-    public void storeVC (QueryJson vc, String vcName, String createdBy)
+    public void storeQuery (QueryJson query, String queryName, String createdBy)
             throws KustvaktException {
         String koralQuery = null;
-        if (vc.getQueryType().equals(QueryType.VIRTUAL_CORPUS)) {
-            ParameterChecker.checkStringValue(vc.getCorpusQuery(),
+        if (query.getQueryType().equals(QueryType.VIRTUAL_CORPUS)) {
+            ParameterChecker.checkStringValue(query.getCorpusQuery(),
                     "corpusQuery");
-            koralQuery = serializeCorpusQuery(vc.getCorpusQuery());
+            koralQuery = serializeCorpusQuery(query.getCorpusQuery());
         }
-        else if (vc.getQueryType().equals(QueryType.QUERY)) {
-            ParameterChecker.checkStringValue(vc.getQuery(), "query");
-            ParameterChecker.checkStringValue(vc.getQueryLanguage(),
+        else if (query.getQueryType().equals(QueryType.QUERY)) {
+            ParameterChecker.checkStringValue(query.getQuery(), "query");
+            ParameterChecker.checkStringValue(query.getQueryLanguage(),
                     "queryLanguage");
-            koralQuery = serializeQuery(vc.getQuery(), vc.getQueryLanguage());
+            koralQuery =
+                    serializeQuery(query.getQuery(), query.getQueryLanguage());
         }
 
-        storeVC(vcName, vc.getType(), vc.getQueryType(), koralQuery,
-                vc.getDefinition(), vc.getDescription(), vc.getStatus(),
-                vc.isCached(), createdBy, vc.getQuery(), vc.getQueryLanguage());
+        storeQuery(queryName, query.getType(), query.getQueryType(), koralQuery,
+                query.getDefinition(), query.getDescription(),
+                query.getStatus(), query.isCached(), createdBy,
+                query.getQuery(), query.getQueryLanguage());
     }
 
-    public void storeVC (String vcName, ResourceType type, QueryType queryType,
+    public void storeQuery (String queryName, ResourceType type, QueryType queryType,
             String koralQuery, String definition, String description,
             String status, boolean isCached, String username, String query,
             String queryLanguage) throws KustvaktException {
-        ParameterChecker.checkNameValue(vcName, "vcName");
+        ParameterChecker.checkNameValue(queryName, "name");
         ParameterChecker.checkObjectValue(type, "type");
 
-        if (!vcNamePattern.matcher(vcName).matches()) {
+        if (!queryNamePattern.matcher(queryName).matches()) {
             throw new KustvaktException(StatusCodes.INVALID_ARGUMENT,
-                    "Virtual corpus name must only contain letters, numbers, "
-                            + "underscores, hypens and spaces",
-                    vcName);
+                    queryType.displayName() + " name must only contain "
+                            + "letters, numbers, underscores, hypens and spaces",
+                    queryName);
         }
 
         if (type.equals(ResourceType.SYSTEM) && !username.equals("system")
@@ -362,13 +364,18 @@
                     "Unauthorized operation for user: " + username, username);
         }
 
-        CorpusAccess requiredAccess =
-                determineRequiredAccess(isCached, vcName, koralQuery);
+        CorpusAccess requiredAccess = CorpusAccess.PUB;
+        if (queryType.equals(QueryType.VIRTUAL_CORPUS)) {
+            requiredAccess =
+                    determineRequiredAccess(isCached, queryName, koralQuery);
+        }
 
-        if (DEBUG) jlog.debug("Storing VC " + vcName + "in the database ");
-        int vcId = 0;
+        if (DEBUG) jlog.debug("Storing virtul corpus or query: " + queryName
+                + "in the database ");
+        
+        int queryId = 0;
         try {
-            vcId = vcDao.createVirtualCorpus(vcName, type, queryType,
+            queryId = vcDao.createVirtualCorpus(queryName, type, queryType,
                     requiredAccess, koralQuery, definition, description, status,
                     isCached, username, query, queryLanguage);
 
@@ -387,7 +394,7 @@
                     cause.getMessage());
         }
         if (type.equals(ResourceType.PUBLISHED)) {
-            publishVC(vcId);
+            publishVC(queryId);
         }
     }
 
