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 c839afc..6f12d59 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
@@ -14,21 +14,9 @@
  */
 public class CollectionCleanupFilter implements RewriteTask.RewriteNodeAt {
 
-    // track path to operand
-    @Deprecated
-    private StringBuilder builder;
-
-    public CollectionCleanupFilter() {
-        super();
-    }
-
     @Override
     public JsonNode preProcess(KoralNode node, KustvaktConfiguration config,
             User user) {
-        //        if (node.has("collection")) {
-        //            JsonNode coll = node.rawNode().path("collection");
-        //            process(coll);
-        //        }
         return process(node.rawNode());
     }
 
@@ -46,8 +34,10 @@
                 }
 
                 int count = node.size();
+                // remove group element and replace with single doc
                 if (count == 1)
                     sub = node.path(0);
+                    // indicate empty group
                 else if (count
                         == 0) // can't do anything here -- fixme: edge case?!
                     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 102da60..737cbe4 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
@@ -1,7 +1,6 @@
 package de.ids_mannheim.korap.resource.rewrite;
 
 import com.fasterxml.jackson.databind.JsonNode;
-import com.fasterxml.jackson.databind.node.ObjectNode;
 import de.ids_mannheim.korap.config.KustvaktConfiguration;
 import de.ids_mannheim.korap.user.User;
 
@@ -14,9 +13,7 @@
     private int counter;
 
     public IdWriter() {
-        super();
         this.counter = 0;
-
     }
 
     @Override
@@ -27,21 +24,9 @@
             if (s != null && !s.isEmpty())
                 node.put("idn", s + "_" + counter++);
         }
-
         return node.rawNode();
     }
 
-    @Deprecated
-    private JsonNode addId(JsonNode node) {
-        if (node.isObject()) {
-            ObjectNode o = (ObjectNode) node;
-            String s = extractToken(node);
-            if (s != null && !s.isEmpty())
-                o.put("idn", s + "_" + counter++);
-        }
-        return node;
-    }
-
     // fixme: koral token --> how does grouping behave?!
     private String extractToken(JsonNode token) {
         JsonNode wrap = token.path("wrap");
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 5b31fa4..b16d65c 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
@@ -22,7 +22,7 @@
     private static Logger jlog = KustvaktLogger.getLogger(RewriteHandler.class);
     private Collection<RewriteTask.IterableRewriteAt> node_processors;
     private Collection<RewriteTask.RewriteKoralToken> token_node_processors;
-    private Collection<RewriteTask.RewriteNodeAt> query_processors;
+    private Collection<RewriteTask> query_processors;
 
     //    private Collection<RewriteTask.RewriteNode2> fixed_nodes;
     //    private Collection<RewriteTask.IterableRewrite> iterable_nodes;
@@ -44,12 +44,12 @@
         if (rewriter instanceof RewriteTask.RewriteKoralToken)
             return this.token_node_processors
                     .add((RewriteTask.RewriteKoralToken) rewriter);
-        else if (rewriter instanceof RewriteTask.RewriteNodeAt)
-            return this.query_processors
-                    .add((RewriteTask.RewriteNodeAt) rewriter);
         else if (rewriter instanceof RewriteTask.IterableRewriteAt)
             return this.node_processors
                     .add((RewriteTask.IterableRewriteAt) rewriter);
+        else if (rewriter instanceof RewriteTask.RewriteBefore
+                | rewriter instanceof RewriteTask.RewriteAfter)
+            return this.query_processors.add(rewriter);
 
         this.failed_task_registration.add(rewriter.getClass());
         return false;
@@ -121,7 +121,7 @@
                 }
             }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(name,KoralNode.wrapNode(root), user,
+                processNode(name, KoralNode.wrapNode(root), user,
                         this.token_node_processors, post);
                 return process(name, root.path("wrap"), user, post);
             }else {
@@ -199,16 +199,22 @@
     }
 
     private void processFixedNode(JsonNode node, User user,
-            Collection<RewriteTask.RewriteNodeAt> tasks, boolean post) {
-        for (RewriteTask.RewriteNodeAt task : tasks) {
+            Collection<RewriteTask> tasks, boolean post) {
+        for (RewriteTask task : tasks) {
             JsonNode next = node;
-            if ((task.at() != null && !node.at(task.at()).isMissingNode()))
-                next = node.at(task.at());
+            if (task instanceof RewriteTask.RewriteNodeAt) {
+                RewriteTask.RewriteNodeAt rwa = (RewriteTask.RewriteNodeAt) task;
+                if ((rwa.at() != null && !node.at(rwa.at()).isMissingNode()))
+                    next = node.at(rwa.at());
+            }
 
-            if (!post)
-                task.preProcess(KoralNode.wrapNode(next), this.config, user);
+            if (!post && task instanceof RewriteTask.RewriteBefore)
+                ((RewriteTask.RewriteBefore) task)
+                        .preProcess(KoralNode.wrapNode(next), this.config,
+                                user);
             else
-                task.postProcess(KoralNode.wrapNode(next));
+                ((RewriteTask.RewriteAfter) task)
+                        .postProcess(KoralNode.wrapNode(next));
         }
     }
 
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 11e29b8..47b65ae 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
@@ -22,7 +22,9 @@
     }
 
     /**
-     *
+     * Post processor targeted at result sets for queries
+     * {@link de.ids_mannheim.korap.resource.rewrite.RewriteTask.RewriteAfter} queries will run
+     * after {@link de.ids_mannheim.korap.resource.rewrite.RewriteTask.IterableRewriteAt} have been processed
      */
     interface RewriteAfter extends RewriteTask {
         JsonNode postProcess(KoralNode node);
@@ -31,7 +33,7 @@
     /**
      * nodes subject to rewrites at fixed json pointer location.
      * Json-pointer based rewrites are processed after iterable rewrites
-     * Deletion via KoralNode not allowed.
+     * Deletion via KoralNode not allowed. Supports pre- and post-processing
      */
     interface RewriteNodeAt extends RewriteBefore, RewriteAfter {
         String at();
@@ -46,6 +48,14 @@
     }
 
     /**
+     * koral token nodes that are subject to rewrites
+     * Be aware that node rewrites are processed before query rewrites. Thus query rewrite may override previous node rewrites
+     * {@link RewriteKoralToken} rewrite DOES NOT support the deletion of the respective node
+     */
+    interface RewriteKoralToken extends RewriteBefore {
+    }
+
+    /**
      * 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.
@@ -65,11 +75,4 @@
     interface RewriteNode extends RewriteBefore {
     }
 
-    /**
-     * koral token nodes that are subject to rewrites
-     * Be aware that node rewrites are processed before query rewrites. Thus query rewrite may override previous node rewrites
-     * {@link RewriteKoralToken} rewrite DOES NOT support the deletion of the respective node
-     */
-    interface RewriteKoralToken extends RewriteBefore {
-    }
 }
