diff --git a/src/main/java/de/ids_mannheim/korap/config/KustvaktConfiguration.java b/src/main/java/de/ids_mannheim/korap/config/KustvaktConfiguration.java
index f2742ce..07c963a 100644
--- a/src/main/java/de/ids_mannheim/korap/config/KustvaktConfiguration.java
+++ b/src/main/java/de/ids_mannheim/korap/config/KustvaktConfiguration.java
@@ -76,7 +76,7 @@
     private String default_token;
     private String default_dep;
     private String default_const;
-    
+    @Deprecated    
     private String policyConfig;
     private ArrayList<String> foundries;
     private ArrayList<String> layers;
@@ -163,14 +163,14 @@
         
         ldapConfig = properties.getProperty("ldap.config");
         
-        // EM: replace this later with KoralQuery
+        // EM: regex for matching availability in Krill matches
         freeLicensePattern = Pattern.compile(properties.getProperty("kustvakt.regex.free",""));
         publicLicensePattern = Pattern.compile(properties.getProperty("kustvakt.regex.public",""));
         allLicensePattern = Pattern.compile(properties.getProperty("kustvakt.regex.all",""));
         
         // EM: not use in the future
-        policyConfig = properties.getProperty("policies.config");
-        setFoundriesAndLayers(policyConfig);
+        //policyConfig = properties.getProperty("policies.config");
+        //setFoundriesAndLayers(policyConfig);
         
         KUSTVAKT_USER.put(Attributes.ID, Integer.parseInt(properties.getProperty("kustvakt.init.user.id")));
         KUSTVAKT_USER.put(Attributes.USERNAME, properties.getProperty("kustvakt.init.user.username"));
diff --git a/src/main/java/de/ids_mannheim/korap/resource/rewrite/PublicCollection.java b/src/main/java/de/ids_mannheim/korap/resource/rewrite/PublicCollection.java
index b6508f5..406c342 100644
--- a/src/main/java/de/ids_mannheim/korap/resource/rewrite/PublicCollection.java
+++ b/src/main/java/de/ids_mannheim/korap/resource/rewrite/PublicCollection.java
@@ -20,14 +20,15 @@
  * @author hanl
  * @date 04/07/2015
  */
+// EM: use CollectionRewrite instead
+@Deprecated
 public class PublicCollection implements RewriteTask.RewriteQuery {
 
     public PublicCollection () {
         super();
     }
 
-
-    @Override
+    @Deprecated
     public JsonNode rewriteQuery (KoralNode node, KustvaktConfiguration config,
             User user) throws KustvaktException {
         JsonNode subnode = node.rawNode();
diff --git a/src/main/java/de/ids_mannheim/korap/security/ac/ResourceFinder.java b/src/main/java/de/ids_mannheim/korap/security/ac/ResourceFinder.java
index 6efdb4f..368a36f 100644
--- a/src/main/java/de/ids_mannheim/korap/security/ac/ResourceFinder.java
+++ b/src/main/java/de/ids_mannheim/korap/security/ac/ResourceFinder.java
@@ -96,7 +96,7 @@
                 Permissions.Permission.READ);
     }
 
-
+    @Deprecated
     public static <T extends KustvaktResource> Set<T> searchPublic (
             Class<T> clazz) throws KustvaktException {
         return searchPublicFiltered(clazz);
@@ -133,6 +133,7 @@
         return sets;
     }
     
+    @Deprecated
     public static <T extends KustvaktResource> Set<T> searchPublicFiltered (
             Class<T> clazz, String ... ids) throws KustvaktException {
         overrideProviders(null);
diff --git a/src/main/java/de/ids_mannheim/korap/web/service/CollectionLoader.java b/src/main/java/de/ids_mannheim/korap/web/service/CollectionLoader.java
index 514afcf..5485896 100644
--- a/src/main/java/de/ids_mannheim/korap/web/service/CollectionLoader.java
+++ b/src/main/java/de/ids_mannheim/korap/web/service/CollectionLoader.java
@@ -26,9 +26,11 @@
  * @date 12/01/2016
  * @lastupdate 19/04/2017
  */
+@Deprecated
 public class CollectionLoader implements BootableBeanInterface {
 
     @Override
+    @Deprecated
     public void load (ContextHolder beans) throws KustvaktException {
         SecurityManager.overrideProviders(beans);
         ResourceFinder.overrideProviders(beans);
@@ -37,33 +39,6 @@
                 .toUser(KustvaktConfiguration.KUSTVAKT_USER);
 
         KustvaktConfiguration config = beans.getConfiguration();
-
-        //        KoralCollectionQueryBuilder bui = new KoralCollectionQueryBuilder();
-        //        bui.with("creationDate since 1775 & corpusSigle=GOE");
-        //
-        //        VirtualCollection c1 = new VirtualCollection();
-        //        c1.setName("Weimarer Werke");
-        //
-        //        c1.setFields(bui.toJSON());
-        //
-        //        c1.setDescription("Goethe-Werke in Weimar (seit 1775)");
-        //
-        //        bui = new KoralCollectionQueryBuilder();
-        //        bui.with("textType=Aphorismus");
-        //
-        //        VirtualCollection c2 = new VirtualCollection();
-        //        c2.setName("Aphorismen");
-        //        c2.setFields(bui.toJSON());
-        //        c2.setDescription("Aphorismentexte Goethes");
-        //
-        //        bui = new KoralCollectionQueryBuilder();
-        //        bui.with("title ~ \"Werther\"");
-        //
-        //        VirtualCollection c3 = new VirtualCollection();
-        //        c3.setName("Werther");
-        //        c3.setFields(bui.toJSON());
-        //        c3.setDescription("Goethe - Die Leiden des jungen Werther");
-
         PolicyBuilder builder = new PolicyBuilder(user);
         String result = null;
         BufferedReader br;
diff --git a/src/main/java/de/ids_mannheim/korap/web/service/full/ResourceService.java b/src/main/java/de/ids_mannheim/korap/web/service/full/ResourceService.java
index 03421e1..fdfaf74 100644
--- a/src/main/java/de/ids_mannheim/korap/web/service/full/ResourceService.java
+++ b/src/main/java/de/ids_mannheim/korap/web/service/full/ResourceService.java
@@ -369,6 +369,8 @@
 
     // todo: does cq have any sensible worth here? --> would say no! --> is
     // useful in non type/id scenarios
+    
+    // EM: build query using the given virtual collection id
     @TRACE
     @Path("{type}/{id}/search")
     public Response buildQueryWithId (@Context Locale locale,
@@ -406,13 +408,14 @@
         String query = "";
         KustvaktResource resource;
         try {
-
             if (ctx.isDemo()) {
+                // EM: FIX ME: add CollectionRewrite? Is there public VCs? 
                 Set set = ResourceFinder.searchPublicFiltered(
                         ResourceFactory.getResourceClass(type), id);
                 resource = (KustvaktResource) set.toArray()[0];
             }
             else {
+                // EM: FIX ME: search in user VC
                 User user = controller.getUser(ctx.getUsername());
                 if (StringUtils.isInteger(id))
                     resource = this.resourceHandler
