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 74a5d06..c839afc 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
@@ -12,8 +12,7 @@
  * @author hanl
  * @date 28/07/2015
  */
-
-public class CollectionCleanupFilter implements RewriteTask.RewriteQuery {
+public class CollectionCleanupFilter implements RewriteTask.RewriteNodeAt {
 
     // track path to operand
     @Deprecated
@@ -26,11 +25,11 @@
     @Override
     public JsonNode preProcess(KoralNode node, KustvaktConfiguration config,
             User user) {
-        if (node.has("collection")) {
-            JsonNode coll = node.rawNode().path("collection");
-            process(coll);
-        }
-        return null;
+        //        if (node.has("collection")) {
+        //            JsonNode coll = node.rawNode().path("collection");
+        //            process(coll);
+        //        }
+        return process(node.rawNode());
     }
 
     private JsonNode process(JsonNode root) {
@@ -89,4 +88,9 @@
     public JsonNode postProcess(KoralNode node) {
         return null;
     }
+
+    @Override
+    public String at() {
+        return "/collection";
+    }
 }
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 4e5edf2..d1630dd 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
@@ -13,12 +13,11 @@
  * @date 03/07/2015
  */
 // todo: test
-public class CollectionConstraint implements RewriteTask.RewriteNode {
+public class CollectionConstraint implements RewriteTask.IterableRewriteAt {
 
     @Override
     public JsonNode preProcess(KoralNode node, KustvaktConfiguration config,
             User user) {
-
         if (node.get("@type").equals("koral:doc")) {
             if (node.get("key").equals("corpusID") && !check(node, user)) {
                 node.removeNode();
@@ -52,4 +51,13 @@
         return corpus != null;
     }
 
+    @Override
+    public JsonNode postProcess(KoralNode node) {
+        return null;
+    }
+
+    @Override
+    public String path() {
+        return "collection";
+    }
 }
diff --git a/src/main/java/de/ids_mannheim/korap/resource/rewrite/DocMatchRewrite.java b/src/main/java/de/ids_mannheim/korap/resource/rewrite/DocMatchRewrite.java
deleted file mode 100644
index d5896e7..0000000
--- a/src/main/java/de/ids_mannheim/korap/resource/rewrite/DocMatchRewrite.java
+++ /dev/null
@@ -1,55 +0,0 @@
-package de.ids_mannheim.korap.resource.rewrite;
-
-import com.fasterxml.jackson.databind.JsonNode;
-import de.ids_mannheim.korap.config.BeanConfiguration;
-import de.ids_mannheim.korap.exceptions.KustvaktException;
-import de.ids_mannheim.korap.handlers.DocumentDao;
-import de.ids_mannheim.korap.resources.Document;
-import net.sf.ehcache.Cache;
-import net.sf.ehcache.CacheManager;
-import net.sf.ehcache.Element;
-
-/**
- * @author hanl
- * @date 12/11/2015
- */
-public class DocMatchRewrite implements RewriteTask.RewriteAfter {
-
-    private DocumentDao docDao;
-    private Cache cache;
-
-    // todo: cache already matched documents with ehcache!
-
-    public DocMatchRewrite() {
-        this.docDao = new DocumentDao(
-                BeanConfiguration.getBeans().getPersistenceClient());
-        this.cache = CacheManager.getInstance().getCache("documents");
-    }
-
-    @Override
-    public JsonNode postProcess(KoralNode node) {
-        Document doc = null;
-
-        // todo: check matches for parent
-        if (node.has("docID")) {
-            String docID = node.get("docID");
-            Element e = this.cache.get(docID);
-            if (e == null) {
-                try {
-                    doc = docDao.findbyId(docID, null);
-                }catch (KustvaktException ex) {
-                    ex.printStackTrace();
-                    // todo: what to do here?!
-                }
-
-                if (doc != null)
-                    this.cache.put(new Element(docID, doc));
-            }else
-                doc = (Document) e.getObjectValue();
-
-            if (doc != null && doc.isDisabled())
-                node.removeNode();
-        }
-        return node.rawNode();
-    }
-}
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 14482d1..eebc92c 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
@@ -9,11 +9,8 @@
  * @author hanl
  * @date 30/06/2015
  */
-public class FoundryInject implements RewriteTask.RewriteNode {
+public class FoundryInject implements RewriteTask.IterableRewriteAt {
 
-    public FoundryInject() {
-        super();
-    }
 
     @Override
     public JsonNode preProcess(KoralNode node, KustvaktConfiguration config,
@@ -35,4 +32,14 @@
         }
         return node.rawNode();
     }
+
+    @Override
+    public String path() {
+        return "query";
+    }
+
+    @Override
+    public JsonNode postProcess(KoralNode node) {
+        return null;
+    }
 }
diff --git a/src/main/java/de/ids_mannheim/korap/resource/rewrite/IdWriter.java b/src/main/java/de/ids_mannheim/korap/resource/rewrite/IdWriter.java
index f35597f..102da60 100644
--- a/src/main/java/de/ids_mannheim/korap/resource/rewrite/IdWriter.java
+++ b/src/main/java/de/ids_mannheim/korap/resource/rewrite/IdWriter.java
@@ -49,4 +49,5 @@
             return wrap.path("key").asText();
         return null;
     }
+
 }
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 585d0bf..94dd6c7 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
@@ -18,18 +18,25 @@
     private JsonNode node;
     private KoralRewriteBuilder builder;
     private boolean remove;
+    private final String target;
 
-    private KoralNode(JsonNode node) {
+    private KoralNode(String target, JsonNode node) {
         this.node = node;
+        this.target = target;
         this.builder = new KoralRewriteBuilder();
         this.remove = false;
     }
 
     public static KoralNode wrapNode(JsonNode node) {
-        return new KoralNode(node) {
+        return new KoralNode(null, node) {
         };
     }
 
+    @Override
+    public String toString() {
+        return this.node.toString();
+    }
+
     @Deprecated
     public boolean setNode(Object path) {
         JsonNode n = null;
@@ -104,7 +111,6 @@
         return false;
     }
 
-
     public JsonNode rawNode() {
         return this.node;
     }
@@ -117,6 +123,10 @@
         return this.remove;
     }
 
+    public final String target() {
+        return this.target;
+    }
+
     //todo: 21.10.15 -- redo with better return policies!
     private static class KoralRewriteBuilder {
 
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 8dddf4f..00aa844 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
@@ -8,15 +8,13 @@
  * @author hanl
  * @date 04/07/2015
  */
-public class MetaConstraint implements RewriteTask.RewriteQuery {
+public class MetaConstraint implements RewriteTask.RewriteNodeAt {
 
-    public MetaConstraint() {
-        super();
-    }
 
     @Override
     public JsonNode preProcess(KoralNode node, KustvaktConfiguration config,
             User user) {
+        // redundant
         if (node.rawNode().has("meta")) {
             JsonNode meta = node.rawNode().path("meta");
             //todo: check meta parameter
@@ -29,4 +27,10 @@
     public JsonNode postProcess(KoralNode node) {
         return null;
     }
+
+
+    @Override
+    public String at() {
+        return "/meta";
+    }
 }
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 350bebc..af6470d 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
@@ -15,7 +15,7 @@
  * @date 04/07/2015
  */
 // todo: 11.11.15
-public class PublicCollection implements RewriteTask.RewriteQuery {
+public class PublicCollection implements RewriteTask.RewriteNodeAt {
 
     public PublicCollection() {
         super();
@@ -26,6 +26,7 @@
     public JsonNode preProcess(KoralNode node, KustvaktConfiguration config,
             User user) {
         JsonNode subnode = node.rawNode();
+        // todo: test
         if (!subnode.at("/collection").findValuesAsText("key")
                 .contains("corpusID")) {
             //todo: inject public collection node
@@ -54,4 +55,9 @@
     public JsonNode postProcess(KoralNode node) {
         return null;
     }
+
+    @Override
+    public String at() {
+        return "collection";
+    }
 }
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 8be0799..dc74cab 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
@@ -9,10 +9,7 @@
 
 import java.lang.reflect.Constructor;
 import java.lang.reflect.InvocationTargetException;
-import java.util.Collection;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.Set;
+import java.util.*;
 
 /**
  * @author hanl
@@ -23,9 +20,12 @@
 public class RewriteHandler {
 
     private static Logger jlog = KustvaktLogger.getLogger(RewriteHandler.class);
-    private Collection<RewriteTask> node_processors;
+    private Collection<RewriteTask.IterableRewriteAt> node_processors;
     private Collection<RewriteTask.RewriteKoralToken> token_node_processors;
-    private Collection<RewriteTask.RewriteQuery> query_processors;
+    private Collection<RewriteTask.RewriteNodeAt> query_processors;
+
+    //    private Collection<RewriteTask.RewriteNode2> fixed_nodes;
+    //    private Collection<RewriteTask.IterableRewrite> iterable_nodes;
 
     private Set<Class> failed_task_registration;
 
@@ -44,17 +44,28 @@
         if (rewriter instanceof RewriteTask.RewriteKoralToken)
             return this.token_node_processors
                     .add((RewriteTask.RewriteKoralToken) rewriter);
-        else if (rewriter instanceof RewriteTask.RewriteQuery)
+        else if (rewriter instanceof RewriteTask.RewriteNodeAt)
             return this.query_processors
-                    .add((RewriteTask.RewriteQuery) rewriter);
-        else if (rewriter instanceof RewriteTask.RewriteBefore
-                | rewriter instanceof RewriteTask.RewriteAfter)
-            return this.node_processors.add(rewriter);
+                    .add((RewriteTask.RewriteNodeAt) rewriter);
+        else if (rewriter instanceof RewriteTask.IterableRewriteAt)
+            return this.node_processors
+                    .add((RewriteTask.IterableRewriteAt) rewriter);
 
         this.failed_task_registration.add(rewriter.getClass());
         return false;
     }
 
+    public boolean addProcessor2(RewriteTask rewriteTask) {
+        //        if (rewriteTask instanceof RewriteTask.RewriteNode2)
+        //            return this.fixed_nodes.add((RewriteTask.RewriteNode2) rewriteTask);
+        //        else if (rewriteTask instanceof RewriteTask.IterableRewrite)
+        //            return this.iterable_nodes
+        //                    .add((RewriteTask.IterableRewrite) rewriteTask);
+        //        else if (rewriteTask instanceof RewriteTask.RewriteBefore)
+        // gets the entire pre processed query injected.
+        return false;
+    }
+
     public final Collection<Class> getFailedHandlers() {
         return this.failed_task_registration;
     }
@@ -97,32 +108,31 @@
         this.token_node_processors.clear();
     }
 
-    private boolean process(JsonNode root, User user, boolean post) {
+    private boolean process(String name, JsonNode root, User user,
+            boolean post) {
         if (root.isObject()) {
             if (root.has("operands")) {
                 JsonNode ops = root.at("/operands");
                 Iterator<JsonNode> it = ops.elements();
                 while (it.hasNext()) {
-                    JsonNode n = it.next();
-                    if (process(n, user, post)) {
+                    JsonNode next = it.next();
+                    if (process(name, next, user, post))
                         it.remove();
-                    }
                 }
-
             }else if (root.path("@type").asText().equals("koral:token")) {
                 // todo: koral:token nodes cannot be flagged for deletion --> creates the possibility for empty koral:token nodes
-                processNode(KoralNode.wrapNode(root), user,
-                        this.token_node_processors, post);
-                return process(root.path("wrap"), user, post);
+                //                processIterableNode(KoralNode.wrapNode(root), user,
+                //                        this.token_node_processors, post);
+                return process(name, root.path("wrap"), user, post);
             }else {
-                return processNode(KoralNode.wrapNode(root), user,
+                return processNode(name, KoralNode.wrapNode(root), user,
                         this.node_processors, post);
             }
         }else if (root.isArray()) {
             Iterator<JsonNode> it = root.elements();
             while (it.hasNext()) {
-                JsonNode n = it.next();
-                if (process(n, user, post))
+                JsonNode next = it.next();
+                if (process(name, next, user, post))
                     it.remove();
             }
         }
@@ -131,10 +141,12 @@
 
     public JsonNode preProcess(JsonNode root, User user) {
         boolean post = false;
-        for (JsonNode n : root)
-            process(n, user, post);
-        processNode(KoralNode.wrapNode(root), user, this.query_processors,
-                post);
+        Iterator<Map.Entry<String, JsonNode>> it = root.fields();
+        while (it.hasNext()) {
+            Map.Entry<String, JsonNode> next = it.next();
+            process(next.getKey(), next.getValue(), user, post);
+        }
+        processFixedNode(root, user, this.query_processors, post);
         return root;
     }
 
@@ -144,10 +156,12 @@
 
     public JsonNode postProcess(JsonNode root, User user) {
         boolean post = true;
-        for (JsonNode n : root)
-            process(n, user, post);
-        processNode(KoralNode.wrapNode(root), user, this.query_processors,
-                post);
+        Iterator<Map.Entry<String, JsonNode>> it = root.fields();
+        while (it.hasNext()) {
+            Map.Entry<String, JsonNode> next = it.next();
+            process(next.getKey(), next.getValue(), user, post);
+        }
+        processFixedNode(root, user, this.query_processors, post);
         return root;
     }
 
@@ -162,22 +176,44 @@
      * @return boolean true if node is to be removed from parent! Only applies if parent is an array node
      */
     // todo: integrate notifications into system!
-    private boolean processNode(KoralNode node, User user,
-            Collection<? extends RewriteTask> tasks, boolean post) {
+    private boolean processNode(String rootNode, KoralNode node, User user,
+            Collection<? extends RewriteTask.IterableRewriteAt> tasks,
+            boolean post) {
         for (RewriteTask task : tasks) {
-            if (jlog.isDebugEnabled()) {
-                jlog.debug("running processor on node " + node);
-                jlog.debug("on processor " + task.getClass().toString());
+            jlog.debug("running processor on node: " + node);
+            jlog.debug("on processor: " + task.getClass().toString());
+
+            if (task instanceof RewriteTask.IterableRewriteAt) {
+                RewriteTask.IterableRewriteAt rw = (RewriteTask.IterableRewriteAt) task;
+                if (rw.path() != null && !rw.path().equals(rootNode)) {
+                    jlog.debug("skipping node: " + node);
+                    continue;
+                }
             }
-            if (task instanceof RewriteTask.RewriteBefore)
+
+            if (!post && task instanceof RewriteTask.RewriteBefore)
                 ((RewriteTask.RewriteBefore) task)
                         .preProcess(node, this.config, user);
-            if (post && task instanceof RewriteTask.RewriteAfter)
+            else if (task instanceof RewriteTask.RewriteAfter)
                 ((RewriteTask.RewriteAfter) task).postProcess(node);
+
             if (node.isRemove())
                 break;
         }
         return node.isRemove();
     }
 
+    private void processFixedNode(JsonNode node, User user,
+            Collection<RewriteTask.RewriteNodeAt> tasks, boolean post) {
+        for (RewriteTask.RewriteNodeAt task : tasks) {
+            if (!node.at(task.at()).isMissingNode()) {
+                if (!post)
+                    task.preProcess(KoralNode.wrapNode(node.at(task.at())),
+                            this.config, user);
+                else
+                    task.postProcess(KoralNode.wrapNode(node.at(task.at())));
+            }
+        }
+    }
+
 }
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 17683ce..7a7189c 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
@@ -25,12 +25,21 @@
         JsonNode postProcess(KoralNode node);
     }
 
+    interface RewriteNodeAt extends RewriteBefore, RewriteAfter {
+        String at();
+    }
+
+    interface IterableRewriteAt extends RewriteBefore, RewriteAfter {
+        String path();
+    }
+
     /**
      * query rewrites get injected the entire query from root containing all child nodes
      * <p/>
      * {@link 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
      */
+    @Deprecated
     interface RewriteQuery extends RewriteBefore, RewriteAfter {
     }
 
@@ -40,6 +49,7 @@
      * <p/>
      * {@link RewriteNode} rewrite supports the deletion of the respective node by simply setting the node invalid in KoralNode
      */
+    @Deprecated
     interface RewriteNode extends RewriteBefore {
     }
 
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 e96b3fe..2e56999 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
@@ -42,7 +42,7 @@
  * @author hanl
  * @date 02/07/2015
  */
-public class TreeConstraint implements RewriteTask.RewriteQuery {
+public class TreeConstraint implements RewriteTask.RewriteNodeAt {
 
     private String pointer;
 
@@ -62,4 +62,9 @@
     public JsonNode postProcess(KoralNode node) {
         return null;
     }
+
+    @Override
+    public String at() {
+        return null;
+    }
 }
diff --git a/src/test/java/CollectionRewriteTest.java b/src/test/java/CollectionRewriteTest.java
index 60aff50..d115455 100644
--- a/src/test/java/CollectionRewriteTest.java
+++ b/src/test/java/CollectionRewriteTest.java
@@ -36,13 +36,13 @@
         BeanConfiguration.closeApplication();
     }
 
+    @Deprecated
     @Test
     public void test2() {
         Pattern p = Pattern.compile("([\\.\\w]+)\\((.+)\\)");
         String cl = de.ids_mannheim.korap.security.ac.SecurityManager.class
                 .getCanonicalName();
         Matcher m = p.matcher(cl);
-        System.out.println("FOUND SOMETHING?! " + m.find());
         while (m.find())
             System.out.println("group 1 " + m.group(1));
 
@@ -56,8 +56,8 @@
         s.setQuery(simple_add_query, "poliqarp");
         s.setCollection("textClass=politik & corpusID=WPD");
         String result = s.toJSON();
-        JsonNode node = JsonUtils.readTree(
-                handler.preProcess(result, User.UserFactory.getUser("test_user")));
+        JsonNode node = JsonUtils.readTree(handler.preProcess(result,
+                User.UserFactory.getUser("test_user")));
         assert node != null;
         assert node.at("/collection/operands").size() == 1;
     }
@@ -70,9 +70,9 @@
         s.setQuery(simple_add_query, "poliqarp");
         s.setCollection("corpusID=BRZ13 & corpusID=WPD");
         String result = s.toJSON();
-        JsonNode node = JsonUtils.readTree(
-                handler.preProcess(result, User.UserFactory.getUser("test_user")));
-        System.out.println("RESULTING REWR NODE " + node);
+        JsonNode node = JsonUtils.readTree(handler.preProcess(result,
+                User.UserFactory.getUser("test_user")));
+        //        System.out.println("RESULTING REWR NODE " + node);
         assert node != null;
         assert node.at("/collection/operands").size() == 0;
     }
@@ -86,10 +86,9 @@
         s.setCollection(
                 "(corpusID=BRZ13 & textClass=Wissenschaft) & corpusID=WPD");
         String result = s.toJSON();
-        JsonNode node = JsonUtils.readTree(
-                handler.preProcess(result, User.UserFactory.getUser("test_user")));
+        JsonNode node = JsonUtils.readTree(handler.preProcess(result,
+                User.UserFactory.getUser("test_user")));
 
-        System.out.println("COLLECTION NODE " + result);
         assert node != null;
         assert node.at("/collection/operands/0/@type").asText()
                 .equals("koral:docGroup");
@@ -108,8 +107,9 @@
         s.setCollection(
                 "(corpusID=BRZ13 & corpusID=WPD) & textClass=Wissenschaft & textClass=Sport");
         String result = s.toJSON();
-        JsonNode node = JsonUtils.readTree(
-                handler.preProcess(result, User.UserFactory.getUser("test_user")));
+        JsonNode node = JsonUtils.readTree(handler.preProcess(result,
+                User.UserFactory.getUser("test_user")));
+
         assert node != null;
         assert node.at("/collection/@type").asText().equals("koral:docGroup");
         assert node.at("/collection/operands").size() == 2;
@@ -128,8 +128,8 @@
         s.setQuery(simple_add_query, "poliqarp");
         s.setCollection("(corpusID=BRZ13 & textClass=Wissenschaft)");
         String result = s.toJSON();
-        JsonNode node = JsonUtils.readTree(
-                handler.preProcess(result, User.UserFactory.getUser("test_user")));
+        JsonNode node = JsonUtils.readTree(handler.preProcess(result,
+                User.UserFactory.getUser("test_user")));
         assert node != null;
         assert node.at("/collection/@type").asText().equals("koral:doc");
     }
@@ -144,8 +144,8 @@
         s.setCollection(
                 "(corpusID=BRZ13 & corpusID=WPD) & textClass=Wissenschaft");
         String result = s.toJSON();
-        JsonNode node = JsonUtils.readTree(
-                handler.preProcess(result, User.UserFactory.getUser("test_user")));
+        JsonNode node = JsonUtils.readTree(handler.preProcess(result,
+                User.UserFactory.getUser("test_user")));
 
         assert node != null;
         assert node.at("/collection/@type").asText().equals("koral:doc");
@@ -162,13 +162,15 @@
         s.setCollection(
                 "(docID=random & textClass=Wissenschaft) & corpusID=WPD");
         String result = s.toJSON();
-        JsonNode node = JsonUtils.readTree(
-                handler.preProcess(result, User.UserFactory.getUser("test_user")));
+        JsonNode node = JsonUtils.readTree(handler.preProcess(result,
+                User.UserFactory.getUser("test_user")));
         System.out.println("original node " + result);
         System.out.println("result node " + node);
         assert node != null;
         assert node.at("/collection/@type").asText().equals("koral:docGroup");
         assert node.at("/collection/operands").size() == 2;
+        assert node.at("/collection/operands/0/@type").asText()
+                .equals("koral:doc");
     }
 
 }
