diff --git a/Changes b/Changes
index ddf3b85..c710501 100644
--- a/Changes
+++ b/Changes
@@ -15,6 +15,7 @@
 - Improve AvailabilityRewrite and implement operation:override (#781) 
 - Disabled mysql connector Java due to CVE-2023-22102
 - Replace origin with editor in rewrites (#782)
+- Update scope and add _comment as discussed in #782
   
 
 # version 0.75
diff --git a/src/main/java/de/ids_mannheim/korap/authentication/KustvaktAuthenticationManager.java b/src/main/java/de/ids_mannheim/korap/authentication/KustvaktAuthenticationManager.java
index 031c3c1..e76d8c9 100644
--- a/src/main/java/de/ids_mannheim/korap/authentication/KustvaktAuthenticationManager.java
+++ b/src/main/java/de/ids_mannheim/korap/authentication/KustvaktAuthenticationManager.java
@@ -210,7 +210,7 @@
             if (DEBUG) {
                 jlog.debug("setAccessAndLocation: DemoUser: location="
                         + user.locationtoString() + " access="
-                        + user.accesstoString());
+                        + user.getCorpusAccess());
             }
             return;
         }
diff --git a/src/main/java/de/ids_mannheim/korap/core/service/SearchService.java b/src/main/java/de/ids_mannheim/korap/core/service/SearchService.java
index 8d87458..8e8c127 100644
--- a/src/main/java/de/ids_mannheim/korap/core/service/SearchService.java
+++ b/src/main/java/de/ids_mannheim/korap/core/service/SearchService.java
@@ -120,7 +120,7 @@
         if (DEBUG) {
             if (user != null) {
                 jlog.debug("Debug: user location=" + user.locationtoString()
-                        + ", access=" + user.accesstoString());
+                        + ", access=" + user.getCorpusAccess());
             }
         }
         return user;
diff --git a/src/main/java/de/ids_mannheim/korap/rewrite/AvailabilityRewrite.java b/src/main/java/de/ids_mannheim/korap/rewrite/AvailabilityRewrite.java
index e4306eb..934efd0 100644
--- a/src/main/java/de/ids_mannheim/korap/rewrite/AvailabilityRewrite.java
+++ b/src/main/java/de/ids_mannheim/korap/rewrite/AvailabilityRewrite.java
@@ -3,19 +3,18 @@
 import java.util.ArrayList;
 import java.util.List;
 
+import org.apache.commons.text.CaseUtils;
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
 
 import com.fasterxml.jackson.databind.JsonNode;
 import com.google.common.collect.Lists;
 
-import de.ids_mannheim.korap.config.Attributes;
 import de.ids_mannheim.korap.config.FullConfiguration;
 import de.ids_mannheim.korap.config.KustvaktConfiguration;
 import de.ids_mannheim.korap.exceptions.KustvaktException;
 import de.ids_mannheim.korap.query.object.KoralMatchOperator;
 import de.ids_mannheim.korap.query.object.KoralOperation;
-import de.ids_mannheim.korap.rewrite.KoralNode.RewriteIdentifier;
 import de.ids_mannheim.korap.user.User;
 import de.ids_mannheim.korap.user.User.CorpusAccess;
 import de.ids_mannheim.korap.utils.JsonUtils;
@@ -112,6 +111,7 @@
 
         FullConfiguration fullConfig = (FullConfiguration) config;
         CorpusAccess corpusAccess = user.getCorpusAccess();
+        String corpusAccessName = user.accesstoString();
 		List<String> availabilityRules = getAvailabilityRules(corpusAccess,
 				fullConfig);
 
@@ -126,7 +126,7 @@
                 		availabilityRules, actualAvalability, false);
                 if (!actualAvalability.isEmpty()) {
                 	createOperationAnd(availabilityQuery, jsonNode,
-    						corpusAccess.name(), koralNode);
+    						corpusAccessName, koralNode);
                 	
 //                    builder.with(availabilityQuery);
 //                    builder.setBaseQuery(builder.toJSON());
@@ -136,7 +136,7 @@
 			}
 			else {
 				createOperationAnd(availabilityQuery, jsonNode,
-						corpusAccess.name(), koralNode);
+						corpusAccessName, koralNode);
 			}
         }
 		else {
@@ -145,8 +145,9 @@
 			builder.with(availabilityQuery);
 			JsonNode rewrittenNode = JsonUtils.readTree(builder.toJSON())
 					.at("/collection");
-			RewriteIdentifier identifier = new KoralNode.RewriteIdentifier(
-					Attributes.AVAILABILITY, corpusAccess.name());
+			
+			RewriteIdentifier identifier = new RewriteIdentifier(null, null,
+						corpusAccessName + " corpus access policy has been added.");
 			koralNode.set("collection", rewrittenNode, identifier);
 		}
 
@@ -155,7 +156,7 @@
     }
     
     private void createOperationAnd (String availabilityQuery,
-			JsonNode jsonNode, String corpusAccess, KoralNode node)
+			JsonNode jsonNode, String corpusAccessName, KoralNode node)
 			throws KustvaktException {
 
 		KoralCollectionQueryBuilder availabilityBuilder = 
@@ -171,8 +172,8 @@
 		// Base query must contains collection
 		builder.setBaseQuery(availabilityNode);
 		JsonNode rewrittenNode = builder.mergeWith(jsonNode).at("/collection");
-		RewriteIdentifier identifier = new KoralNode.RewriteIdentifier(null,
-				corpusAccess, sourceNode);
+		RewriteIdentifier identifier = new RewriteIdentifier(null, sourceNode,
+				corpusAccessName + " corpus access policy has been added.");
 		node.replace("collection", rewrittenNode, identifier);
 	}
     
diff --git a/src/main/java/de/ids_mannheim/korap/rewrite/CollectionConstraint.java b/src/main/java/de/ids_mannheim/korap/rewrite/CollectionConstraint.java
index d2d3610..979602e 100644
--- a/src/main/java/de/ids_mannheim/korap/rewrite/CollectionConstraint.java
+++ b/src/main/java/de/ids_mannheim/korap/rewrite/CollectionConstraint.java
@@ -24,8 +24,8 @@
                 // EM: MH checks if user has access to corpus
                 //                KustvaktResource corpus = check(id, user);
                 //                if (corpus == null)
-                node.removeNode(new KoralNode.RewriteIdentifier(
-                        Attributes.CORPUS_SIGLE, id));
+                node.removeNode(new RewriteIdentifier(
+                        Attributes.CORPUS_SIGLE, id, "corpus sigle"));
             }
         }
         return node;
diff --git a/src/main/java/de/ids_mannheim/korap/rewrite/FoundryInject.java b/src/main/java/de/ids_mannheim/korap/rewrite/FoundryInject.java
index 73615e0..846d2e5 100644
--- a/src/main/java/de/ids_mannheim/korap/rewrite/FoundryInject.java
+++ b/src/main/java/de/ids_mannheim/korap/rewrite/FoundryInject.java
@@ -6,7 +6,6 @@
 
 import de.ids_mannheim.korap.config.KustvaktConfiguration;
 import de.ids_mannheim.korap.exceptions.KustvaktException;
-import de.ids_mannheim.korap.rewrite.KoralNode.RewriteIdentifier;
 import de.ids_mannheim.korap.user.User;
 import de.ids_mannheim.korap.user.UserSettingProcessor;
 
@@ -20,35 +19,40 @@
     protected LayerMapper mapper;
 
     @Override
-    public KoralNode rewriteQuery (KoralNode node, KustvaktConfiguration config,
+    public KoralNode rewriteQuery (KoralNode koralNode, KustvaktConfiguration config,
             User user) throws KustvaktException {
 
-        if (node.get("@type").equals("koral:span")) {
-            if (!node.isMissingNode("/wrap")) {
-                node = node.at("/wrap");
-                JsonNode term = rewriteQuery(node, config, user).rawNode();
-                node.replaceAt("/wrap", term,
-                        new RewriteIdentifier("koral:term", "replace"));
+    	// EM: I don't know the purpose of the following code and it is not 
+    	// tested
+        if (koralNode.get("@type").equals("koral:span")) {
+            if (!koralNode.isMissingNode("/wrap")) {
+                koralNode = koralNode.at("/wrap");
+                JsonNode term = rewriteQuery(koralNode, config, user).rawNode();
+                koralNode.replaceAt("/wrap", term,
+                        new RewriteIdentifier("koral:term", "replace", ""));
             }
         }
-        else if (node.get("@type").equals("koral:term")
-                && !node.has("foundry")) {
+        else if (koralNode.get("@type").equals("koral:term")
+                && !koralNode.has("foundry")) {
             String layer;
-            if (node.has("layer")) {
-                layer = node.get("layer");
+            if (koralNode.has("layer")) {
+                layer = koralNode.get("layer");
             }
             else {
-                layer = node.get("key");
+                layer = koralNode.get("key");
             }
             UserSettingProcessor settingProcessor = null;
             if (user != null) {
                 settingProcessor = user.getUserSettingProcessor();
             }
             String foundry = mapper.findFoundry(layer, settingProcessor);
-            if (foundry != null)
-                node.put("foundry", foundry);
+			if (foundry != null) {
+				RewriteIdentifier ri = new RewriteIdentifier("foundry", null,
+						"Default foundry has been added.");
+				koralNode.set("foundry", foundry, ri);
+			}
         }
-        return node;
+        return koralNode;
     }
 
     @Override
diff --git a/src/main/java/de/ids_mannheim/korap/rewrite/KoralNode.java b/src/main/java/de/ids_mannheim/korap/rewrite/KoralNode.java
index bbc9cd2..fb99954 100644
--- a/src/main/java/de/ids_mannheim/korap/rewrite/KoralNode.java
+++ b/src/main/java/de/ids_mannheim/korap/rewrite/KoralNode.java
@@ -45,22 +45,6 @@
         return this.node.toString();
     }
 
-    public void put (String name, Object value) {
-        if (this.node.isObject() && this.node.path(name).isMissingNode()) {
-            ObjectNode node = (ObjectNode) this.node;
-            if (value instanceof String)
-                node.put(name, (String) value);
-            else if (value instanceof Integer)
-                node.put(name, (Integer) value);
-            else if (value instanceof JsonNode)
-                node.put(name, (JsonNode) value);
-            this.rewrites.add("injection", name);
-        }
-        else
-            throw new UnsupportedOperationException(
-                    "node doesn't support this operation");
-    }
-
     public void remove (Object identifier, RewriteIdentifier ident) {
         boolean set = false;
         if (this.node.isObject() && identifier instanceof String) {
@@ -75,7 +59,7 @@
         }
 
         if (set) {
-            this.rewrites.add("deletion", "", ident);
+            this.rewrites.add("deletion", ident);
         }
     }
 
@@ -89,10 +73,7 @@
             else if (value instanceof JsonNode)
                 n.put(name, (JsonNode) value);
 
-//            if (ident != null)
-//                name = ident.toString();
-
-            this.rewrites.add("override", null, ident);
+            this.rewrites.add("override", ident);
         }
     }
     
@@ -101,7 +82,7 @@
         if (value instanceof ObjectNode) {
             n.removeAll();
             n.setAll((ObjectNode) value);
-            this.rewrites.add("override", null, ident);
+            this.rewrites.add("override", ident);
         }
     }
 
@@ -119,11 +100,33 @@
             this.rewrites.add("override", name);
         }
     }
+    
+    // Please use set instead.
+    @Deprecated
+    public void put (String name, Object value) {
+        if (this.node.isObject() && this.node.path(name).isMissingNode()) {
+            ObjectNode node = (ObjectNode) this.node;
+            if (value instanceof String)
+                node.put(name, (String) value);
+            else if (value instanceof Integer)
+                node.put(name, (Integer) value);
+            else if (value instanceof JsonNode)
+                node.set(name, (JsonNode) value);
+            this.rewrites.add("injection", name);
+        }
+        else
+            throw new UnsupportedOperationException(
+                    "node doesn't support this operation");
+    }
 
     // EM: we agree to use injection instead because it has been introduced to
     // public in several occasions.
     // This method is similar to put
-    @Deprecated
+    /**
+     * @param name 	the key name of the node / JSON property to set
+     * @param value	the value of the JSON property to set
+     * @param ident RewriteIdentifier
+     */
     public void set (String name, Object value, RewriteIdentifier ident) {
         if (this.node.isObject()) {
             ObjectNode n = (ObjectNode) this.node;
@@ -132,12 +135,9 @@
             else if (value instanceof Integer)
                 n.put(name, (Integer) value);
             else if (value instanceof JsonNode)
-                n.put(name, (JsonNode) value);
+                n.set(name, (JsonNode) value);
 
-            if (ident != null)
-                name = ident.toString();
-
-            this.rewrites.add("injection", name);
+            this.rewrites.add("injection", ident);
         }
     }
 
@@ -178,130 +178,14 @@
         this.remove = true;
     }
 
-    public static class RewriteIdentifier {
-
-        private String scope, value;
-        private Object source;
-
-        public RewriteIdentifier (String scope) {
-            this.scope = scope;
-        }
-        
-        @Deprecated
-        public RewriteIdentifier (String scope, String value) {
-            this.scope = scope;
-            this.value = value;
-        }
-        
-        public RewriteIdentifier (String scope, String value, Object source) {
-            this.scope = scope;
-            this.value = value;
-            this.source = source;
-        }
-        
-        public String getScope () {
-            return scope;
-        }
-        
-        public Object getSource () {
-            return source;
-        }
-        
-        @Override
-        public String toString () {
-            return scope + "(" + value + ")";
-        }
-
-    }
-
+    
     public boolean isRemove () {
         return this.remove;
     }
 
-    public static class KoralRewriteBuilder {
+    
 
-        private List<KoralRewrite> rewrites;
-
-        public KoralRewriteBuilder () {
-            this.rewrites = new ArrayList<>();
-        }
-
-        public KoralRewriteBuilder add (String op, Object scope) {
-            KoralRewrite rewrite = new KoralRewrite();
-            rewrite.setOperation(op);
-            if (scope != null) {
-                rewrite.setScope(scope.toString());
-            }
-            this.rewrites.add(rewrite);
-            return this;
-        }
-        
-        public KoralRewriteBuilder add (String op, String scope, RewriteIdentifier ri) {
-            KoralRewrite rewrite = new KoralRewrite();
-            rewrite.setOperation(op);
-            if (ri.getScope() != null) {
-                rewrite.setScope(ri.getScope());
-            }
-            if (ri.getSource() != null) {
-                rewrite.setSource(ri.getSource());
-            }
-            this.rewrites.add(rewrite);
-            return this;
-        }
-
-        public JsonNode build (JsonNode node) {
-            for (KoralRewrite rewrite : this.rewrites) {
-                if (rewrite.map.get("operation") == null)
-                    throw new UnsupportedOperationException(
-                            "operation not set properly");
-
-                if (node.has("rewrites")) {
-                    ArrayNode n = (ArrayNode) node.path("rewrites");
-                    n.add(JsonUtils.valueToTree(rewrite.map));
-                }
-                else if (node.isObject()) {
-                    ObjectNode n = (ObjectNode) node;
-                    List l = new LinkedList<>();
-                    l.add(JsonUtils.valueToTree(rewrite.map));
-                    n.put("rewrites", JsonUtils.valueToTree(l));
-                }
-                else {
-                    //fixme: matches in result will land here. rewrites need to be placed under root node - though then there might be unclear where they belong to
-                }
-
-            }
-            this.rewrites.clear();
-            return node;
-        }
-
-    }
-
-    private static class KoralRewrite {
-
-        private Map<String, Object> map;
-
-        private KoralRewrite () {
-            this.map = new LinkedHashMap<>();
-            this.map.put("@type", "koral:rewrite");
-            this.map.put("src", "Kustvakt");
-            this.map.put("editor", "Kustvakt");
-        }
-
-        public void setOperation (String op) {
-            if (!op.startsWith("operation:"))
-                op = "operation:" + op;
-            this.map.put("operation", op);
-        }
-
-        public void setScope (String scope) {
-            this.map.put("scope", scope);
-        }
-        
-        public void setSource(Object source) {
-            this.map.put("source", source);
-        }
-
-    }
+    
 
     public boolean isMissingNode (String string) {
         return this.node.at(string).isMissingNode();
diff --git a/src/main/java/de/ids_mannheim/korap/rewrite/KoralRewrite.java b/src/main/java/de/ids_mannheim/korap/rewrite/KoralRewrite.java
new file mode 100644
index 0000000..86e5863
--- /dev/null
+++ b/src/main/java/de/ids_mannheim/korap/rewrite/KoralRewrite.java
@@ -0,0 +1,35 @@
+package de.ids_mannheim.korap.rewrite;
+
+import java.util.LinkedHashMap;
+import java.util.Map;
+
+public class KoralRewrite {
+
+    public Map<String, Object> map;
+
+    public KoralRewrite () {
+        this.map = new LinkedHashMap<>();
+        this.map.put("@type", "koral:rewrite");
+        this.map.put("src", "Kustvakt");
+        this.map.put("editor", "Kustvakt");
+    }
+
+    public void setOperation (String op) {
+        if (!op.startsWith("operation:"))
+            op = "operation:" + op;
+        this.map.put("operation", op);
+    }
+
+    public void setScope (String scope) {
+        this.map.put("scope", scope);
+    }
+    
+    public void setSource(Object source) {
+        this.map.put("source", source);
+    }
+    
+    public void setComment(String comment) {
+        this.map.put("_comment", comment);
+    }
+
+}
\ No newline at end of file
diff --git a/src/main/java/de/ids_mannheim/korap/rewrite/KoralRewriteBuilder.java b/src/main/java/de/ids_mannheim/korap/rewrite/KoralRewriteBuilder.java
new file mode 100644
index 0000000..a5824a1
--- /dev/null
+++ b/src/main/java/de/ids_mannheim/korap/rewrite/KoralRewriteBuilder.java
@@ -0,0 +1,73 @@
+package de.ids_mannheim.korap.rewrite;
+
+import java.util.ArrayList;
+import java.util.LinkedList;
+import java.util.List;
+
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.node.ArrayNode;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+
+import de.ids_mannheim.korap.utils.JsonUtils;
+
+public class KoralRewriteBuilder {
+
+	private List<KoralRewrite> rewrites;
+
+	public KoralRewriteBuilder () {
+		this.rewrites = new ArrayList<>();
+	}
+
+	@Deprecated
+	public KoralRewriteBuilder add (String op, Object scope) {
+		KoralRewrite rewrite = new KoralRewrite();
+		rewrite.setOperation(op);
+		if (scope != null) {
+			rewrite.setScope(scope.toString());
+		}
+		this.rewrites.add(rewrite);
+		return this;
+	}
+
+	public KoralRewriteBuilder add (String op, RewriteIdentifier ri) {
+		KoralRewrite rewrite = new KoralRewrite();
+		rewrite.setOperation(op);
+		if (ri.getScope() != null) {
+			rewrite.setScope(ri.getScope());
+		}
+		if (ri.getSource() != null) {
+			rewrite.setSource(ri.getSource());
+		}
+		if (ri.getComment() != null) {
+			rewrite.setComment(ri.getComment());
+		}
+		this.rewrites.add(rewrite);
+		return this;
+	}
+
+	public JsonNode build (JsonNode node) {
+		for (KoralRewrite rewrite : this.rewrites) {
+			if (rewrite.map.get("operation") == null)
+				throw new UnsupportedOperationException(
+						"operation not set properly");
+
+			if (node.has("rewrites")) {
+				ArrayNode n = (ArrayNode) node.path("rewrites");
+				n.add(JsonUtils.valueToTree(rewrite.map));
+			}
+			else if (node.isObject()) {
+				ObjectNode n = (ObjectNode) node;
+				List l = new LinkedList<>();
+				l.add(JsonUtils.valueToTree(rewrite.map));
+				n.put("rewrites", JsonUtils.valueToTree(l));
+			}
+			else {
+				//fixme: matches in result will land here. rewrites need to be placed under root node - though then there might be unclear where they belong to
+			}
+
+		}
+		this.rewrites.clear();
+		return node;
+	}
+
+}
diff --git a/src/main/java/de/ids_mannheim/korap/rewrite/QueryContextRewrite.java b/src/main/java/de/ids_mannheim/korap/rewrite/QueryContextRewrite.java
index 1f75e21..0494fa4 100644
--- a/src/main/java/de/ids_mannheim/korap/rewrite/QueryContextRewrite.java
+++ b/src/main/java/de/ids_mannheim/korap/rewrite/QueryContextRewrite.java
@@ -8,7 +8,6 @@
 
 import de.ids_mannheim.korap.config.KustvaktConfiguration;
 import de.ids_mannheim.korap.exceptions.KustvaktException;
-import de.ids_mannheim.korap.rewrite.KoralNode.RewriteIdentifier;
 import de.ids_mannheim.korap.user.User;
 import de.ids_mannheim.korap.utils.JsonUtils;
 
@@ -45,8 +44,10 @@
                         .readTree(contextPosition.toString());
                 ArrayNode arrayNode = (ArrayNode) contextPosition.rawNode();
                 arrayNode.set(1, maxContextLength);
-                context.replace(position, arrayNode, new RewriteIdentifier(
-                        position, null, sourceNode));
+				context.replace(position, arrayNode,
+						new RewriteIdentifier(position, sourceNode, position
+								+ " has been replaced. The original value is "
+								+ "described in the source property."));
                 return true;
             }
         }
diff --git a/src/main/java/de/ids_mannheim/korap/rewrite/QueryReferenceRewrite.java b/src/main/java/de/ids_mannheim/korap/rewrite/QueryReferenceRewrite.java
index 0f6ff8c..b70dbf1 100644
--- a/src/main/java/de/ids_mannheim/korap/rewrite/QueryReferenceRewrite.java
+++ b/src/main/java/de/ids_mannheim/korap/rewrite/QueryReferenceRewrite.java
@@ -4,14 +4,12 @@
 import org.springframework.stereotype.Component;
 
 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.constant.QueryType;
 import de.ids_mannheim.korap.entity.QueryDO;
 import de.ids_mannheim.korap.exceptions.KustvaktException;
 import de.ids_mannheim.korap.exceptions.StatusCodes;
-import de.ids_mannheim.korap.rewrite.KoralNode.RewriteIdentifier;
 import de.ids_mannheim.korap.service.QueryService;
 import de.ids_mannheim.korap.user.User;
 import de.ids_mannheim.korap.utils.JsonUtils;
@@ -93,7 +91,9 @@
             throws KustvaktException {
         String source = koralNode.rawNode().toString();
         JsonNode sourceNode = JsonUtils.readTree(source);
-        koralNode.replace(qref, new RewriteIdentifier(null, "", sourceNode));
+		koralNode.replace(qref, new RewriteIdentifier(null, sourceNode,
+				"This node has been replaced. The original node is described in "
+				+ "the source property."));
         
 //        koralNode.remove("@type",
 //                new RewriteIdentifier("@type", "", jsonNode.at("/@type").asText()));
diff --git a/src/main/java/de/ids_mannheim/korap/rewrite/RewriteIdentifier.java b/src/main/java/de/ids_mannheim/korap/rewrite/RewriteIdentifier.java
new file mode 100644
index 0000000..ad56a3b
--- /dev/null
+++ b/src/main/java/de/ids_mannheim/korap/rewrite/RewriteIdentifier.java
@@ -0,0 +1,37 @@
+package de.ids_mannheim.korap.rewrite;
+
+public class RewriteIdentifier {
+
+    private String scope,comment = "";
+    private Object source;
+
+    public RewriteIdentifier (String scope, String value, String comment) {
+        this.scope = scope;
+        this.source = value;
+        this.comment = comment;
+    }
+    
+	public RewriteIdentifier (String scope, Object source, String comment) {
+		this.scope = scope;
+		this.source = source;
+		this.comment = comment;
+	}
+    
+    public String getScope () {
+        return scope;
+    }
+    
+    public Object getSource () {
+        return source;
+    }
+    
+    public String getComment () {
+		return comment;
+	}
+    
+//    @Override
+//    public String toString () {
+//        return scope + "(" + value + ")";
+//    }
+}
+
diff --git a/src/main/java/de/ids_mannheim/korap/rewrite/VirtualCorpusRewrite.java b/src/main/java/de/ids_mannheim/korap/rewrite/VirtualCorpusRewrite.java
index 41da0e2..7dc4219 100644
--- a/src/main/java/de/ids_mannheim/korap/rewrite/VirtualCorpusRewrite.java
+++ b/src/main/java/de/ids_mannheim/korap/rewrite/VirtualCorpusRewrite.java
@@ -9,7 +9,6 @@
 import de.ids_mannheim.korap.constant.QueryType;
 import de.ids_mannheim.korap.entity.QueryDO;
 import de.ids_mannheim.korap.exceptions.KustvaktException;
-import de.ids_mannheim.korap.rewrite.KoralNode.RewriteIdentifier;
 import de.ids_mannheim.korap.service.QueryService;
 import de.ids_mannheim.korap.user.User;
 import de.ids_mannheim.korap.util.StatusCodes;
@@ -99,7 +98,9 @@
         JsonNode jsonNode = koralNode.rawNode();
         String ref = jsonNode.at("/ref").asText();
         String newRef = ref.substring(vcOwner.length() + 1, ref.length());
-        koralNode.replace("ref", newRef, new RewriteIdentifier("ref", "", ref));
+        koralNode.replace("ref", newRef, new RewriteIdentifier("ref", ref, 
+        		"Ref has been replaced. The original value is described at "
+        		+ "the source property."));
     }
 
     protected void rewriteVC (QueryDO vc, KoralNode koralNode)
@@ -110,8 +111,9 @@
         String source = koralNode.rawNode().toString();
         JsonNode sourceNode = JsonUtils.readTree(source);
         
-        koralNode.replace(newKoralQuery, new RewriteIdentifier(
-                null, "", sourceNode));
+		koralNode.replace(newKoralQuery, new RewriteIdentifier(null, sourceNode,
+				"This node has been replaced. The original node is described at "
+						+ "the source property."));
         
         // rewrite
 //        koralNode.remove("@type", new RewriteIdentifier("@type", "",
diff --git a/src/main/java/de/ids_mannheim/korap/user/User.java b/src/main/java/de/ids_mannheim/korap/user/User.java
index 5f46910..eb6a340 100644
--- a/src/main/java/de/ids_mannheim/korap/user/User.java
+++ b/src/main/java/de/ids_mannheim/korap/user/User.java
@@ -169,11 +169,11 @@
 
     {
         if (this.corpusAccess == CorpusAccess.ALL)
-            return "ALL";
+            return "All";
         else if (this.corpusAccess == CorpusAccess.PUB)
-            return "PUB";
+            return "Public";
         else if (this.corpusAccess == CorpusAccess.FREE)
-            return "FREE";
+            return "Free";
         else
             return "???";
     }
diff --git a/src/test/java/de/ids_mannheim/korap/config/SpringJerseyTest.java b/src/test/java/de/ids_mannheim/korap/config/SpringJerseyTest.java
index a1baccb..4334b97 100644
--- a/src/test/java/de/ids_mannheim/korap/config/SpringJerseyTest.java
+++ b/src/test/java/de/ids_mannheim/korap/config/SpringJerseyTest.java
@@ -25,6 +25,13 @@
 
     public final static String API_VERSION = "v1.0";
 
+    protected final static String allCorpusAccess = "All corpus access policy "
+			+ "has been added.";
+	protected final static String freeCorpusAccess = "Free corpus access policy "
+			+ "has been added.";
+	protected final static String publicCorpusAccess = "Public corpus access "
+			+ "policy has been added.";
+    
     @Autowired
     protected GenericApplicationContext applicationContext;
 
diff --git a/src/test/java/de/ids_mannheim/korap/misc/KoralNodeTest.java b/src/test/java/de/ids_mannheim/korap/misc/KoralNodeTest.java
index dad58bd..08d71f5 100644
--- a/src/test/java/de/ids_mannheim/korap/misc/KoralNodeTest.java
+++ b/src/test/java/de/ids_mannheim/korap/misc/KoralNodeTest.java
@@ -3,9 +3,11 @@
 import static org.junit.jupiter.api.Assertions.assertEquals;
 
 import org.junit.jupiter.api.Test;
+
 import com.fasterxml.jackson.databind.node.ObjectNode;
+
 import de.ids_mannheim.korap.rewrite.KoralNode;
-import de.ids_mannheim.korap.rewrite.KoralNode.RewriteIdentifier;
+import de.ids_mannheim.korap.rewrite.RewriteIdentifier;
 import de.ids_mannheim.korap.utils.JsonUtils;
 
 /**
@@ -40,7 +42,7 @@
         node.put("value_1", "setting_1");
         KoralNode knode = KoralNode.wrapNode(node);
         knode.replace("value_1", "settings_2",
-                new RewriteIdentifier("value_1", "setting_1"));
+                new RewriteIdentifier("value_1", "setting_1", ""));
         assertEquals(knode.rawNode().toString(),
                 "{\"value_1\":\"settings_2\"}");
     }
diff --git a/src/test/java/de/ids_mannheim/korap/rewrite/AvailabilityRewriteTest.java b/src/test/java/de/ids_mannheim/korap/rewrite/AvailabilityRewriteTest.java
index d893540..2469746 100644
--- a/src/test/java/de/ids_mannheim/korap/rewrite/AvailabilityRewriteTest.java
+++ b/src/test/java/de/ids_mannheim/korap/rewrite/AvailabilityRewriteTest.java
@@ -183,9 +183,8 @@
         assertEquals(node.at("/collection/value").asText(), "CC.*");
         assertEquals(node.at("/collection/rewrites/0/@type").asText(),
                 "koral:rewrite");
-        assertEquals(node.at("/collection/rewrites/0/scope").asText(),
-                "availability(FREE)");
-        // todo:
+        assertEquals(freeCorpusAccess,
+        		node.at("/collection/rewrites/0/_comment").asText());
     }
 
     @Test
diff --git a/src/test/java/de/ids_mannheim/korap/web/controller/AvailabilityTest.java b/src/test/java/de/ids_mannheim/korap/web/controller/AvailabilityTest.java
index ae9b93b..2500f17 100644
--- a/src/test/java/de/ids_mannheim/korap/web/controller/AvailabilityTest.java
+++ b/src/test/java/de/ids_mannheim/korap/web/controller/AvailabilityTest.java
@@ -33,8 +33,8 @@
 		assertEquals("operation:override",
 				node.at("/rewrites/0/operation").asText());
 		assertEquals(source, node.at("/rewrites/0/source"));
-		//        assertEquals(node.at("/collection/rewrites/0/scope").asText(),
-		//                "availability(FREE)");
+		assertEquals(freeCorpusAccess,
+				node.at("/rewrites/0/_comment").asText());
 	}
 
 	private void checkAndPublic (String json, JsonNode source)
@@ -46,6 +46,8 @@
 		assertEquals("Kustvakt", node.at("/rewrites/0/editor").asText());
 		assertEquals("operation:override", node.at("/rewrites/0/operation").asText());
 		assertEquals(source, node.at("/rewrites/0/source"));
+		assertEquals(publicCorpusAccess,
+				node.at("/rewrites/0/_comment").asText());
 		
 		node = node.at("/operands/0");
 		assertEquals("match:eq", node.at("/operands/0/match").asText());
@@ -71,6 +73,8 @@
 		assertEquals("Kustvakt", node.at("/rewrites/0/editor").asText());
 		assertEquals("operation:override", node.at("/rewrites/0/operation").asText());
 		assertEquals(source, node.at("/rewrites/0/source"));
+		assertEquals(allCorpusAccess,
+				node.at("/rewrites/0/_comment").asText());
 
 		assertEquals("match:eq", node.at("/operands/1/match").asText());
 		assertEquals("type:regex", node.at("/operands/1/type").asText());
@@ -122,6 +126,8 @@
 		assertEquals("CC.*", node.at("/value").asText());
 		assertEquals("operation:injection",
 				node.at("/rewrites/0/operation").asText());
+		assertEquals("Free corpus access policy has been added.",
+				node.at("/rewrites/0/_comment").asText());
     }
     
     @Test
@@ -169,7 +175,7 @@
                 "src" : "Kustvakt",
                 "editor" : "Kustvakt",
                 "operation" : "operation:injection",
-                "scope" : "availability(PUB)"
+                "_comment" : "Public corpus access policy has been added."
               } ]
             }
 			""";
@@ -232,7 +238,7 @@
                 "src" : "Kustvakt",
                 "editor" : "Kustvakt",
                 "operation" : "operation:injection",
-                "scope" : "availability(ALL)"
+                "_comment" : "All corpus access policy has been added."
               } ]
             }
    			""";
diff --git a/src/test/java/de/ids_mannheim/korap/web/controller/SearchControllerTest.java b/src/test/java/de/ids_mannheim/korap/web/controller/SearchControllerTest.java
index a2ce70d..a8db188 100644
--- a/src/test/java/de/ids_mannheim/korap/web/controller/SearchControllerTest.java
+++ b/src/test/java/de/ids_mannheim/korap/web/controller/SearchControllerTest.java
@@ -119,8 +119,8 @@
         assertEquals("koral:doc", node.at("/collection/@type").asText());
         assertEquals("availability", node.at("/collection/key").asText());
         assertEquals("CC.*", node.at("/collection/value").asText());
-        assertEquals("availability(FREE)",
-                node.at("/collection/rewrites/0/scope").asText());
+        assertEquals(freeCorpusAccess,
+                node.at("/collection/rewrites/0/_comment").asText());
         assertEquals("operation:injection",
                 node.at("/collection/rewrites/0/operation").asText());
     }
@@ -182,8 +182,8 @@
         assertEquals("koral:doc", node.at("/collection/@type").asText());
         assertEquals("availability", node.at("/collection/key").asText());
         assertEquals("CC.*", node.at("/collection/value").asText());
-        assertEquals("availability(FREE)",
-                node.at("/collection/rewrites/0/scope").asText());
+        assertEquals(freeCorpusAccess,
+                node.at("/collection/rewrites/0/_comment").asText());
         assertEquals("operation:injection",
                 node.at("/collection/rewrites/0/operation").asText());
     }
@@ -202,8 +202,8 @@
         assertEquals("koral:doc", node.at("/collection/@type").asText());
         assertEquals("availability", node.at("/collection/key").asText());
         assertEquals("CC.*", node.at("/collection/value").asText());
-        assertEquals("availability(FREE)",
-                node.at("/collection/rewrites/0/scope").asText());
+        assertEquals(freeCorpusAccess,
+                node.at("/collection/rewrites/0/_comment").asText());
         assertEquals("operation:injection",
                 node.at("/collection/rewrites/0/operation").asText());
     }
@@ -231,8 +231,8 @@
         assertEquals("QAO-NC",
                 node.at("/collection/operands/1/operands/1/value").asText());
         assertEquals("operation:or", node.at("/collection/operation").asText());
-        assertEquals("availability(PUB)",
-                node.at("/collection/rewrites/0/scope").asText());
+        assertEquals(publicCorpusAccess,
+                node.at("/collection/rewrites/0/_comment").asText());
         assertEquals("operation:injection",
                 node.at("/collection/rewrites/0/operation").asText());
     }
@@ -264,8 +264,8 @@
                 node.at("/collection/operands/1/operands/1/operands/1/value")
                         .asText());
         assertEquals("operation:or", node.at("/collection/operation").asText());
-        assertEquals("availability(ALL)",
-                node.at("/collection/rewrites/0/scope").asText());
+        assertEquals(allCorpusAccess,
+                node.at("/collection/rewrites/0/_comment").asText());
         assertEquals("operation:injection",
                 node.at("/collection/rewrites/0/operation").asText());
     }
@@ -363,7 +363,7 @@
         assertEquals("CC.*", node.at("/collection/operands/0/value").asText());
         assertEquals("ACA.*", node.at("/collection/operands/1/value").asText());
         assertEquals("operation:or", node.at("/collection/operation").asText());
-        assertEquals("availability(PUB)",
+        assertEquals(publicCorpusAccess,
                 node.at("/collection/rewrites/0/scope").asText());
     }
 
@@ -420,7 +420,7 @@
         JsonNode node = JsonUtils.readTree(ent);
         assertNotNull(node);
         assertNotEquals(0, node.path("matches").size());
-        assertEquals("availability(FREE)",
+        assertEquals(freeCorpusAccess,
                 node.at("/collection/rewrites/0/scope").asText());
     }
 
@@ -440,7 +440,7 @@
         JsonNode node = JsonUtils.readTree(ent);
         assertNotNull(node);
         assertNotEquals(0, node.path("matches").size());
-        assertEquals("availability(ALL)",
+        assertEquals(allCorpusAccess,
                 node.at("/collection/rewrites/0/scope").asText());
     }
 
@@ -460,7 +460,7 @@
         JsonNode node = JsonUtils.readTree(ent);
         assertNotNull(node);
         assertNotEquals(0, node.path("matches").size());
-        assertEquals("availability(PUB)",
+        assertEquals(publicCorpusAccess,
                 node.at("/collection/rewrites/0/scope").asText());
     }
 }
diff --git a/src/test/java/de/ids_mannheim/korap/web/controller/SearchPipeTest.java b/src/test/java/de/ids_mannheim/korap/web/controller/SearchPipeTest.java
index 39f1cf9..8ddebae 100644
--- a/src/test/java/de/ids_mannheim/korap/web/controller/SearchPipeTest.java
+++ b/src/test/java/de/ids_mannheim/korap/web/controller/SearchPipeTest.java
@@ -118,8 +118,8 @@
         assertEquals(1, node.at("/collection/rewrites").size());
         assertEquals(node.at("/collection/rewrites/0/operation").asText(),
                 "operation:injection");
-        assertEquals(node.at("/collection/rewrites/0/scope").asText(),
-                "availability(FREE)");
+		assertEquals(freeCorpusAccess,
+				node.at("/collection/rewrites/0/_comment").asText());
         node = node.at("/query/wrap/rewrites");
         assertEquals(2, node.size());
         assertEquals(node.at("/0/src").asText(), "Glemm");
diff --git a/src/test/java/de/ids_mannheim/korap/web/controller/SearchPublicMetadataTest.java b/src/test/java/de/ids_mannheim/korap/web/controller/SearchPublicMetadataTest.java
index 2b85901..dfa3553 100644
--- a/src/test/java/de/ids_mannheim/korap/web/controller/SearchPublicMetadataTest.java
+++ b/src/test/java/de/ids_mannheim/korap/web/controller/SearchPublicMetadataTest.java
@@ -1,16 +1,14 @@
 package de.ids_mannheim.korap.web.controller;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
-import jakarta.ws.rs.client.Entity;
-import jakarta.ws.rs.core.Response.Status;
-
 import org.junit.jupiter.api.Disabled;
 import org.junit.jupiter.api.Test;
+
 import com.fasterxml.jackson.databind.JsonNode;
 import com.google.common.net.HttpHeaders;
-import jakarta.ws.rs.core.Response;
 
 import de.ids_mannheim.korap.config.SpringJerseyTest;
 import de.ids_mannheim.korap.exceptions.KustvaktException;
@@ -18,6 +16,9 @@
 import de.ids_mannheim.korap.query.serialize.MetaQueryBuilder;
 import de.ids_mannheim.korap.query.serialize.QuerySerializer;
 import de.ids_mannheim.korap.utils.JsonUtils;
+import jakarta.ws.rs.client.Entity;
+import jakarta.ws.rs.core.Response;
+import jakarta.ws.rs.core.Response.Status;
 
 public class SearchPublicMetadataTest extends SpringJerseyTest {
 
@@ -29,9 +30,11 @@
         assertEquals(Status.OK.getStatusCode(), response.getStatus());
         String entity = response.readEntity(String.class);
         JsonNode node = JsonUtils.readTree(entity);
-        assertEquals(node.at("/collection/rewrites/0/scope").asText(),
-                "availability(ALL)");
-        assertTrue(node.at("/matches/0/snippet").isMissingNode());
+        assertTrue(node.at("/meta/snippet").isMissingNode());
+        assertEquals(allCorpusAccess,
+        		node.at("/collection/rewrites/0/_comment").asText());
+        assertFalse(node.at("/matches/0/snippet").asBoolean());
+        assertFalse(node.at("/matches/0/tokens").asBoolean());
     }
 
     @Test
@@ -43,8 +46,8 @@
         assertEquals(Status.OK.getStatusCode(), response.getStatus());
         String entity = response.readEntity(String.class);
         JsonNode node = JsonUtils.readTree(entity);
-        assertEquals(node.at("/collection/rewrites/0/scope").asText(),
-                "availability(ALL)");
+        assertEquals("All corpus access policy has been added.",
+        		node.at("/collection/rewrites/0/_comment").asText());
         assertTrue(node.at("/matches/0/snippet").isMissingNode());
     }
 
@@ -58,8 +61,8 @@
         assertEquals(Status.OK.getStatusCode(), response.getStatus());
         String entity = response.readEntity(String.class);
         JsonNode node = JsonUtils.readTree(entity);
-        assertEquals(node.at("/collection/rewrites/0/scope").asText(),
-                "availability(ALL)");
+		assertEquals(allCorpusAccess,
+				node.at("/collection/rewrites/0/_comment").asText());
         assertTrue(node.at("/matches/0/snippet").isMissingNode());
         assertEquals(node.at("/matches/0/author").asText(),
                 "Goethe, Johann Wolfgang von");
@@ -101,8 +104,8 @@
         assertEquals(Status.OK.getStatusCode(), response.getStatus());
         String ent = response.readEntity(String.class);
         JsonNode node = JsonUtils.readTree(ent);
-        assertEquals(node.at("/collection/rewrites/0/scope").asText(),
-                "availability(ALL)");
+        assertEquals(allCorpusAccess,
+        		node.at("/collection/rewrites/0/_comment").asText());
         assertTrue(node.at("/matches/0/snippet").isMissingNode());
     }
 
