diff --git a/src/main/java/de/ids_mannheim/korap/resource/rewrite/CollectionCleanupFilter.java b/src/main/java/de/ids_mannheim/korap/resource/rewrite/CollectionCleanupFilter.java
index edca117..b55f18f 100644
--- a/src/main/java/de/ids_mannheim/korap/resource/rewrite/CollectionCleanupFilter.java
+++ b/src/main/java/de/ids_mannheim/korap/resource/rewrite/CollectionCleanupFilter.java
@@ -10,7 +10,7 @@
  * @author hanl
  * @date 28/07/2015
  */
-public class CollectionCleanupFilter extends RewriteQuery {
+public class CollectionCleanupFilter extends RewriteTask.RewriteQuery {
 
     // track path to operand
     @Deprecated
diff --git a/src/main/java/de/ids_mannheim/korap/resource/rewrite/CollectionConstraint.java b/src/main/java/de/ids_mannheim/korap/resource/rewrite/CollectionConstraint.java
index a4cf771..1ceb1e3 100644
--- a/src/main/java/de/ids_mannheim/korap/resource/rewrite/CollectionConstraint.java
+++ b/src/main/java/de/ids_mannheim/korap/resource/rewrite/CollectionConstraint.java
@@ -1,20 +1,28 @@
 package de.ids_mannheim.korap.resource.rewrite;
 
 import com.fasterxml.jackson.databind.JsonNode;
-import de.ids_mannheim.korap.user.User;
+import de.ids_mannheim.korap.exceptions.KustvaktException;
+import de.ids_mannheim.korap.resources.Corpus;
+import de.ids_mannheim.korap.resources.KustvaktResource;
+import de.ids_mannheim.korap.security.ac.SecurityManager;
 
 /**
  * @author hanl
  * @date 03/07/2015
  */
-public class CollectionConstraint extends RewriteNode {
+// todo: test
+public class CollectionConstraint extends RewriteTask.RewriteNode {
+
+    public CollectionConstraint() {
+        super();
+    }
 
     @Override
     public JsonNode rewrite(KoralNode koralnode) {
         JsonNode node = koralnode.rawNode();
         if (node.at("/@type").asText().equals("koral:doc")) {
-            if (node.at("/key").asText().equals("corpusID") && !check(node,
-                    koralnode.getUser())) {
+            if (node.at("/key").asText().equals("corpusID") && !check(
+                    koralnode)) {
                 koralnode.removeNode();
                 // todo: add message that node was removed!
             }
@@ -22,8 +30,20 @@
         return node;
     }
 
-    private boolean check(JsonNode node, User user) {
-        return false;
+    private boolean check(KoralNode node) {
+        if (!node.hasUser())
+            return true;
+
+        String id = node.rawNode().at("/value").asText();
+        KustvaktResource corpus;
+        try {
+            SecurityManager m = SecurityManager
+                    .findbyId(id, node.getUser(), Corpus.class);
+            corpus = m.getResource();
+        }catch (KustvaktException e) {
+            return false;
+        }
+        return corpus != null;
     }
 
 }
diff --git a/src/main/java/de/ids_mannheim/korap/resource/rewrite/FoundryInject.java b/src/main/java/de/ids_mannheim/korap/resource/rewrite/FoundryInject.java
index 58e3ff2..b166181 100644
--- a/src/main/java/de/ids_mannheim/korap/resource/rewrite/FoundryInject.java
+++ b/src/main/java/de/ids_mannheim/korap/resource/rewrite/FoundryInject.java
@@ -4,15 +4,17 @@
 import de.ids_mannheim.korap.config.KustvaktConfiguration;
 import de.ids_mannheim.korap.resource.LayerMapper;
 
+
 /**
  * @author hanl
  * @date 30/06/2015
  */
-public class FoundryInject extends RewriteNode {
+public class FoundryInject extends RewriteTask.RewriteNode {
 
     private KustvaktConfiguration config;
 
     public FoundryInject(KustvaktConfiguration config) {
+        super();
         this.config = config;
     }
 
diff --git a/src/main/java/de/ids_mannheim/korap/resource/rewrite/KoralNode.java b/src/main/java/de/ids_mannheim/korap/resource/rewrite/KoralNode.java
index e708504..64365e1 100644
--- a/src/main/java/de/ids_mannheim/korap/resource/rewrite/KoralNode.java
+++ b/src/main/java/de/ids_mannheim/korap/resource/rewrite/KoralNode.java
@@ -45,6 +45,11 @@
         };
     }
 
+    public static KoralNode getNode(JsonNode node, User user) {
+        return new KoralNode(node, user) {
+        };
+    }
+
     public void set(String name, Object value) {
 
         if (this.node.isObject()) {
diff --git a/src/main/java/de/ids_mannheim/korap/resource/rewrite/MetaConstraint.java b/src/main/java/de/ids_mannheim/korap/resource/rewrite/MetaConstraint.java
index 4660235..af7d998 100644
--- a/src/main/java/de/ids_mannheim/korap/resource/rewrite/MetaConstraint.java
+++ b/src/main/java/de/ids_mannheim/korap/resource/rewrite/MetaConstraint.java
@@ -6,7 +6,7 @@
  * @author hanl
  * @date 04/07/2015
  */
-public class MetaConstraint extends RewriteQuery {
+public class MetaConstraint extends RewriteTask.RewriteQuery {
 
     public MetaConstraint() {
         super();
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 d6685ea..88ce41e 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
@@ -1,20 +1,42 @@
 package de.ids_mannheim.korap.resource.rewrite;
 
 import com.fasterxml.jackson.databind.JsonNode;
+import de.ids_mannheim.korap.exceptions.KustvaktException;
+import de.ids_mannheim.korap.resources.Corpus;
+import de.ids_mannheim.korap.security.ac.ResourceFinder;
+import de.ids_mannheim.korap.utils.CollectionQueryBuilder3;
+
+import java.util.Set;
 
 /**
  * @author hanl
  * @date 04/07/2015
  */
-public class PublicCollection extends RewriteQuery {
+public class PublicCollection extends RewriteTask.RewriteQuery {
 
+    // todo: where to inject the array node into? --> super group with and relation plus subgroup with ids and or operation
     @Override
     public JsonNode rewrite(KoralNode node) {
         JsonNode subnode = node.rawNode();
         if (!subnode.at("/collection").findValuesAsText("key")
                 .contains("corpusID")) {
             //todo: inject public collection node
+            if (node.hasUser()) {
+                try {
+                    ResourceFinder finder = ResourceFinder
+                            .init(node.getUser(), Corpus.class);
+                    Set<String> ids = finder.getIds();
+                    createNode(ids);
+                }catch (KustvaktException e) {
+                    e.printStackTrace();
+                }
+            }
         }
         return subnode;
     }
+
+    private JsonNode createNode(Set<String> ids) {
+        JsonNode node = CollectionQueryBuilder3.Utils.buildDocGroup();
+        return node;
+    }
 }
diff --git a/src/main/java/de/ids_mannheim/korap/resource/rewrite/RewriteHandler.java b/src/main/java/de/ids_mannheim/korap/resource/rewrite/RewriteHandler.java
index 5676817..6c613ca 100644
--- a/src/main/java/de/ids_mannheim/korap/resource/rewrite/RewriteHandler.java
+++ b/src/main/java/de/ids_mannheim/korap/resource/rewrite/RewriteHandler.java
@@ -18,8 +18,8 @@
 public class RewriteHandler {
 
     private static Logger jlog = KustvaktLogger.initiate(RewriteHandler.class);
-    private Collection<RewriteNode> node_processors;
-    private Collection<RewriteQuery> query_processors;
+    private Collection<RewriteTask.RewriteNode> node_processors;
+    private Collection<RewriteTask.RewriteQuery> query_processors;
 
     public RewriteHandler() {
         this.node_processors = new HashSet<>();
@@ -27,11 +27,11 @@
         // add defaults?!
     }
 
-    public void add(RewriteNode node) {
+    public void add(RewriteTask.RewriteNode node) {
         this.node_processors.add(node);
     }
 
-    public void add(RewriteQuery node) {
+    public void add(RewriteTask.RewriteQuery node) {
         this.query_processors.add(node);
     }
 
@@ -73,10 +73,12 @@
 
     private static boolean processNode(JsonNode node, User user,
             Collection<? extends RewriteTask> tasks) {
-        KoralNode knode = KoralNode.getNode(node);
+        KoralNode knode = KoralNode.getNode(node, user);
         for (RewriteTask task : tasks) {
-            jlog.debug("running node in processor " + node);
-            jlog.debug("on processor " + task.getClass().toString());
+            if (jlog.isDebugEnabled()) {
+                jlog.debug("running node in processor " + node);
+                jlog.debug("on processor " + task.getClass().toString());
+            }
             task.rewrite(knode);
             if (knode.toRemove())
                 break;
diff --git a/src/main/java/de/ids_mannheim/korap/resource/rewrite/RewriteTask.java b/src/main/java/de/ids_mannheim/korap/resource/rewrite/RewriteTask.java
index ed5ad34..4b44c42 100644
--- a/src/main/java/de/ids_mannheim/korap/resource/rewrite/RewriteTask.java
+++ b/src/main/java/de/ids_mannheim/korap/resource/rewrite/RewriteTask.java
@@ -10,8 +10,41 @@
 @Getter
 public abstract class RewriteTask {
 
-    protected RewriteTask() {
+    private RewriteTask() {
     }
 
     public abstract JsonNode rewrite(KoralNode node);
+
+
+    /**
+     * query rewrites get injected the entire query from root containing all child nodes
+     * <p/>
+     * {@link de.ids_mannheim.korap.resource.rewrite.RewriteTask.RewriteQuery} does not allow the deletion of the root node or subnode through KoralNode.
+     * The {@link de.ids_mannheim.korap.resource.rewrite.RewriteHandler} will igonore respecitve invalid requests
+     *
+     * @author hanl
+     * @date 03/07/2015
+     */
+    public static abstract class RewriteQuery extends RewriteTask {
+        public RewriteQuery() {
+            super();
+        }
+    }
+
+
+
+    /**
+     * node rewrites get injected typically object nodes that are subject to altering.
+     * Be aware that node rewrites are processed before query rewrites. Thus query rewrite may override previous node rewrites
+     *
+     * {@link de.ids_mannheim.korap.resource.rewrite.RewriteTask.RewriteNode} rewrite support the deletion of the respective node by simply setting the node invalid in KoralNode
+     *
+     * @author hanl
+     * @date 03/07/2015
+     */
+    public static abstract class RewriteNode extends RewriteTask {
+        public RewriteNode() {
+            super();
+        }
+    }
 }
diff --git a/src/main/java/de/ids_mannheim/korap/resource/rewrite/TreeConstraint.java b/src/main/java/de/ids_mannheim/korap/resource/rewrite/TreeConstraint.java
index e285114..0bde30f 100644
--- a/src/main/java/de/ids_mannheim/korap/resource/rewrite/TreeConstraint.java
+++ b/src/main/java/de/ids_mannheim/korap/resource/rewrite/TreeConstraint.java
@@ -40,7 +40,7 @@
  * @author hanl
  * @date 02/07/2015
  */
-public class TreeConstraint extends RewriteQuery {
+public class TreeConstraint extends RewriteTask.RewriteQuery {
 
     private String pointer;
 
