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 "???";
     }
