diff --git a/doc/devel/Benchmarking.md b/doc/devel/Benchmarking.md
new file mode 100644
index 0000000000000000000000000000000000000000..a244a3a64b771060fbf025fc0ee47054b9b95b48
--- /dev/null
+++ b/doc/devel/Benchmarking.md
@@ -0,0 +1,13 @@
+# Manual Java-Side Benchmarking #
+
+Benchmarking can be done using the `TransactionBenchmark` class (in package
+`caosdb.server.database.misc`).
+
+- Single timings can be added to instances of that class via the
+  `addBenchmark(object, time)` method.  Multiple benchmarks for the same object
+  (typically just strings) can be averaged.
+- Benchmarks can be serialized into XML, `Container` and `Query` objects already
+  use this with their included benchmarks to output benchmarking results.
+- To work with the benchmarks of often used objects, use these methods:
+  - `Container.getTransactionBenchmark().addBenchmark()`
+  - `Query.addBenchmark()`
diff --git a/makefile b/makefile
index 688675fe7a1f73e113f9668b3772f470f365e4f1..642e31c538a98b39fdb07aeaed5b8a2515adf947 100644
--- a/makefile
+++ b/makefile
@@ -32,7 +32,7 @@ runserver:
 run: compile
 	mvn exec:java@run
 
-run-debug: jar
+run-debug:
 	java -Dcaosdb.debug=true -jar target/caosdb-server-0.1-SNAPSHOT-jar-with-dependencies.jar
 
 run-single:
diff --git a/pom.xml b/pom.xml
index 42e44ca49b82963a16ac655755ccf29b8fcde6e0..7ba53304ccf5c414fa66e042d1d02d03aede6658 100644
--- a/pom.xml
+++ b/pom.xml
@@ -52,12 +52,12 @@
     <dependency>
       <groupId>org.apache.logging.log4j</groupId>
       <artifactId>log4j-slf4j18-impl</artifactId>
-      <version>2.11.2</version>
+      <version>2.12.1</version>
     </dependency>
     <dependency>
       <groupId>org.slf4j</groupId>
       <artifactId>slf4j-api</artifactId>
-      <version>1.8.0-beta4</version>
+      <version>1.7.28</version>
     </dependency>
     <dependency>
       <groupId>de.timmfitschen</groupId>
@@ -165,12 +165,12 @@
     <dependency>
       <groupId>org.apache.logging.log4j</groupId>
       <artifactId>log4j-api</artifactId>
-      <version>2.11.2</version>
+      <version>2.12.1</version>
     </dependency>
     <dependency>
       <groupId>org.apache.logging.log4j</groupId>
       <artifactId>log4j-core</artifactId>
-      <version>2.11.2</version>
+      <version>2.12.1</version>
     </dependency>
   </dependencies>
   <build>
diff --git a/src/main/java/caosdb/server/query/Query.java b/src/main/java/caosdb/server/query/Query.java
index c9bff5a5f11aa5775582c613d80062419f9adb4c..d3e0e927d14d0b2021f056ad52f10df548c5734c 100644
--- a/src/main/java/caosdb/server/query/Query.java
+++ b/src/main/java/caosdb/server/query/Query.java
@@ -415,6 +415,7 @@ public class Query implements QueryInterface, ToElementable, TransactionInterfac
   }
 
   public void parse() throws ParsingException {
+    final long t1 = System.currentTimeMillis();
     CQLLexer lexer;
     lexer = new CQLLexer(CharStreams.fromString(this.query));
     final CommonTokenStream tokens = new CommonTokenStream(lexer);
@@ -434,6 +435,8 @@ public class Query implements QueryInterface, ToElementable, TransactionInterfac
     this.type = cq.t;
     this.filter = cq.filter;
     this.selections = cq.s;
+    final long t2 = System.currentTimeMillis();
+    addBenchmark("parse (" + this.query + ")", t2 - t1);
   }
 
   private String executeStrategy() throws QueryException {
diff --git a/src/main/java/caosdb/server/resource/ScriptingResource.java b/src/main/java/caosdb/server/resource/ScriptingResource.java
index 81a84ab631d9cd2206fd163b5c64eaac4c967286..d82df5c7443c72ea168ded9483cb374a1f6e5f0b 100644
--- a/src/main/java/caosdb/server/resource/ScriptingResource.java
+++ b/src/main/java/caosdb/server/resource/ScriptingResource.java
@@ -27,6 +27,7 @@ package caosdb.server.resource;
 import caosdb.server.FileSystem;
 import caosdb.server.accessControl.Principal;
 import caosdb.server.accessControl.SessionToken;
+import caosdb.server.accessControl.UserSources;
 import caosdb.server.entity.FileProperties;
 import caosdb.server.entity.Message;
 import caosdb.server.scripting.CallerSerializer;
@@ -82,6 +83,9 @@ public class ScriptingResource extends AbstractCaosDBServerResource {
   @Override
   protected Representation httpPostInChildClass(Representation entity) throws Exception {
 
+    if (isAnonymous()) {
+      throw ServerMessages.AUTHORIZATION_ERROR;
+    }
     MediaType mediaType = entity.getMediaType();
     try {
       if (mediaType.equals(MediaType.MULTIPART_FORM_DATA, true)) {
@@ -202,6 +206,11 @@ public class ScriptingResource extends AbstractCaosDBServerResource {
     return SessionToken.generate((Principal) getUser().getPrincipal(), null);
   }
 
+  boolean isAnonymous() {
+    boolean ret = getUser().hasRole(UserSources.ANONYMOUS_ROLE);
+    return ret;
+  }
+
   public int callScript(
       List<String> commandLine, Integer timeoutMs, List<FileProperties> files, Object authToken)
       throws Message {
diff --git a/src/main/java/caosdb/server/resource/transaction/EntityResource.java b/src/main/java/caosdb/server/resource/transaction/EntityResource.java
index 0e78c46a1f20fd870aca972f5c272c38c78438d0..f55c2b7ae0cb736305086ae131c3a3eeac1ba0ab 100644
--- a/src/main/java/caosdb/server/resource/transaction/EntityResource.java
+++ b/src/main/java/caosdb/server/resource/transaction/EntityResource.java
@@ -99,6 +99,7 @@ public class EntityResource extends AbstractCaosDBServerResource {
       throws ConnectionException, IOException, SQLException, CaosDBException,
           NoSuchAlgorithmException, Exception {
 
+    final long t1 = System.currentTimeMillis();
     if (!this.get) {
       getResponse().setStatus(Status.CLIENT_ERROR_METHOD_NOT_ALLOWED);
       return null;
@@ -112,6 +113,10 @@ public class EntityResource extends AbstractCaosDBServerResource {
     final Retrieve retrieve = new Retrieve(entityContainer);
     retrieve.execute();
 
+    final long t2 = System.currentTimeMillis();
+    entityContainer
+        .getTransactionBenchmark()
+        .addBenchmark(getClass().getSimpleName() + ".httpGetInChildClass", t2 - t1);
     final Element rootElem = generateRootElement();
     entityContainer.addToElement(rootElem);
     doc.setRootElement(rootElem);