diff --git a/src/main/java/de/ids_mannheim/korap/annotation/ResourceParser.java b/src/main/java/de/ids_mannheim/korap/annotation/ResourceParser.java
index cade8f6..e5cc73c 100644
--- a/src/main/java/de/ids_mannheim/korap/annotation/ResourceParser.java
+++ b/src/main/java/de/ids_mannheim/korap/annotation/ResourceParser.java
@@ -20,6 +20,8 @@
 import de.ids_mannheim.korap.entity.AnnotationLayer;
 import de.ids_mannheim.korap.entity.Resource;
 import de.ids_mannheim.korap.exceptions.KustvaktException;
+import de.ids_mannheim.korap.service.QueryService;
+import de.ids_mannheim.korap.user.User.CorpusAccess;
 
 /**
  * Parser for extracting data from resources.json listing virtual corpora 
@@ -36,6 +38,8 @@
     private ResourceDao resourceDao;
     @Autowired
     private AnnotationDao annotationDao;
+    @Autowired
+    private QueryService queryService;
 
     public static String RESOURCE_FILE = "resources.json";
     public static ObjectMapper mapper = new ObjectMapper();
@@ -54,36 +58,38 @@
         JsonNode node = mapper.readTree(is);
         for (JsonNode resource : node) {
             String resourceId = resource.at("/id").asText();
+            String pid = resource.at("/pid").asText();
+            String deTitle = resource.at("/de_title").asText();
+            String enTitle = resource.at("/en_title").asText();
+            String enDescription = resource.at("/en_description").asText(); 
+            String institution = resource.at("/institution").asText();
             String requiredAccess = resource.at("/required_access").asText();
+            String corpusQuery = resource.at("/corpus_query").asText();
+            
             if (requiredAccess.isEmpty()){
-            	requiredAccess = "free";
+				if (!corpusQuery.isEmpty()) {
+					String koralQuery = queryService
+							.serializeCorpusQuery(corpusQuery);
+					// assume all vc are not cached and use the given koralQuery
+					// for cached-vc, the koralQuery should contain referTo
+					CorpusAccess access = queryService.determineRequiredAccess(
+							false, resourceId, koralQuery);
+					requiredAccess = access.name();
+				}
             }
-            //            log.debug(resourceId);
             Set<AnnotationLayer> layers = parseLayers(resource.at("/layers"));
             try {
                 Resource r = resourceDao.retrieveResource(resourceId);
-                if (r == null) {
-                    resourceDao.createResource(resource.at("/id").asText(),
-                    		resource.at("/pid").asText(),
-                            resource.at("/de_title").asText(),
-                            resource.at("/en_title").asText(),
-                            resource.at("/en_description").asText(), 
-                            layers,
-                            resource.at("/institution").asText(),
-                            resource.at("/corpus_query").asText(),
-                            requiredAccess);
-                }
-                else {
-                	resourceDao.updateResource(r,
-                			resource.at("/pid").asText(),
-                            resource.at("/de_title").asText(),
-                            resource.at("/en_title").asText(),
-                            resource.at("/en_description").asText(), 
-                            layers,
-                            resource.at("/institution").asText(),
-                            resource.at("/corpus_query").asText(),
-                            requiredAccess);
-                }
+				if (r == null) {
+					resourceDao.createResource(resourceId, pid, deTitle,
+							enTitle, enDescription, layers, institution,
+							corpusQuery, requiredAccess);
+				}
+				else {
+					resourceDao.updateResource(r, pid, deTitle, enTitle,
+							enDescription, layers, institution, corpusQuery,
+							requiredAccess);
+				}
             }
             catch (Exception e) {
                 log.warn("Failed creating resource: " + e.getMessage());
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 7cfa9cd..cfa16fd 100644
--- a/src/main/java/de/ids_mannheim/korap/service/QueryService.java
+++ b/src/main/java/de/ids_mannheim/korap/service/QueryService.java
@@ -407,7 +407,7 @@
         }
     }
 
-    private String serializeCorpusQuery (String corpusQuery)
+    public String serializeCorpusQuery (String corpusQuery)
             throws KustvaktException {
         QuerySerializer serializer = new QuerySerializer();
         serializer.setCollection(corpusQuery);
diff --git a/src/main/resources/data/resources.json b/src/main/resources/data/resources.json
index 77a5028..cc9942f 100644
--- a/src/main/resources/data/resources.json
+++ b/src/main/resources/data/resources.json
@@ -13,7 +13,7 @@
         "tt/p"
     ],
     "corpus_query":"corpusSigle=WPD17",
-    "required_access" : "free",
+    "required_access" : "FREE",
     "institution" : "IDS Mannheim"
 },
 {
@@ -31,7 +31,7 @@
         "tt/p"
     ],
     "corpus_query":"corpusSigle=WDD17",
-    "required_access" : "free",
+    "required_access" : "FREE",
     "institution" : "IDS Mannheim"
 },
 {
diff --git a/src/test/java/de/ids_mannheim/korap/web/controller/ResourceControllerTest.java b/src/test/java/de/ids_mannheim/korap/web/controller/ResourceControllerTest.java
index 6322ede..23c8bd7 100644
--- a/src/test/java/de/ids_mannheim/korap/web/controller/ResourceControllerTest.java
+++ b/src/test/java/de/ids_mannheim/korap/web/controller/ResourceControllerTest.java
@@ -22,18 +22,32 @@
 		JsonNode n = JsonUtils.readTree(entity);
 		assertEquals(3, n.size());
 
-		n = n.get(0);
+		JsonNode n0 = n.get(0);
 		assertEquals("http://hdl.handle.net/10932/00-03B6-558F-4E10-6201-1",
-				n.at("/resourceId").asText());
-		assertEquals(n.at("/titles/de").asText(),
+				n0.at("/resourceId").asText());
+		assertEquals(n0.at("/titles/de").asText(),
 				"Deutsche Wikipedia Artikel 2017");
-		assertEquals(n.at("/titles/en").asText(),
+		assertEquals(n0.at("/titles/en").asText(),
 				"German Wikipedia Articles 2017");
-		assertEquals(1, n.at("/languages").size());
-		assertEquals(6, n.at("/layers").size());
-		assertEquals("IDS Mannheim", n.at("/institution").asText());
+		assertEquals(1, n0.at("/languages").size());
+		assertEquals(6, n0.at("/layers").size());
+		assertEquals("IDS Mannheim", n0.at("/institution").asText());
 		assertEquals("https://korap.ids-mannheim.de?cq=corpusSigle=WPD17",
-				n.at("/landingPage").asText());
-		assertEquals("free", n.at("/requiredAccess").asText());
+				n0.at("/landingPage").asText());
+		assertEquals("FREE", n0.at("/requiredAccess").asText());
+		
+		JsonNode n1 = n.get(1);
+		assertEquals("http://hdl.handle.net/10932/00-03B6-558F-5EA0-6301-B",
+				n1.at("/resourceId").asText());
+		assertEquals(n1.at("/titles/de").asText(),
+				"Deutsche Wikipedia-Diskussionskorpus 2017");
+		assertEquals(n1.at("/titles/en").asText(),
+				"German Wikipedia talk corpus 2017");
+		assertEquals(1, n1.at("/languages").size());
+		assertEquals(6, n1.at("/layers").size());
+		assertEquals("IDS Mannheim", n1.at("/institution").asText());
+		assertEquals("https://korap.ids-mannheim.de?cq=corpusSigle=WDD17",
+				n1.at("/landingPage").asText());
+		assertEquals("FREE", n1.at("/requiredAccess").asText());
 	}
 }
