diff --git a/Changes b/Changes
index 56f2875..198b940 100644
--- a/Changes
+++ b/Changes
@@ -1,6 +1,9 @@
 # version 0.78
 
 - Renamed free resource to resource.
+- Add required access to resources.
+- Determine corpus access dynamically using koralQuery for resources without 
+  predefined required_access. 
 
 # version 0.77
 
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());
 	}
 }
