diff --git a/src/main/java/caosdb/server/CaosAuthenticator.java b/src/main/java/caosdb/server/CaosAuthenticator.java
index d07c047d1ec3c66da1064a331778c618a186d26a..f2297c56ab843cd16d3997fc6ac8985d5c5ac33c 100644
--- a/src/main/java/caosdb/server/CaosAuthenticator.java
+++ b/src/main/java/caosdb/server/CaosAuthenticator.java
@@ -22,6 +22,10 @@
  */
 package caosdb.server;
 
+import caosdb.server.accessControl.AnonymousAuthenticationToken;
+import caosdb.server.accessControl.AuthenticationUtils;
+import caosdb.server.resource.DefaultResource;
+import caosdb.server.utils.ServerMessages;
 import org.apache.shiro.SecurityUtils;
 import org.apache.shiro.authc.AuthenticationException;
 import org.apache.shiro.authc.AuthenticationToken;
@@ -32,10 +36,6 @@ import org.restlet.Response;
 import org.restlet.security.Authenticator;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-import caosdb.server.accessControl.AnonymousAuthenticationToken;
-import caosdb.server.accessControl.AuthenticationUtils;
-import caosdb.server.resource.DefaultResource;
-import caosdb.server.utils.ServerMessages;
 
 public class CaosAuthenticator extends Authenticator {
 
diff --git a/src/main/java/caosdb/server/CaosDBServer.java b/src/main/java/caosdb/server/CaosDBServer.java
index f5495256640edf4e97169ed089a9cfb3b57dc849..eb4f7df164b7362641d0c963332b4905291f2642 100644
--- a/src/main/java/caosdb/server/CaosDBServer.java
+++ b/src/main/java/caosdb/server/CaosDBServer.java
@@ -19,6 +19,51 @@
  */
 package caosdb.server;
 
+import caosdb.server.accessControl.AnonymousAuthenticationToken;
+import caosdb.server.accessControl.AnonymousRealm;
+import caosdb.server.accessControl.AuthenticationUtils;
+import caosdb.server.accessControl.CaosDBAuthorizingRealm;
+import caosdb.server.accessControl.CaosDBDefaultRealm;
+import caosdb.server.accessControl.OneTimeAuthenticationToken;
+import caosdb.server.accessControl.SessionToken;
+import caosdb.server.accessControl.SessionTokenRealm;
+import caosdb.server.database.BackendTransaction;
+import caosdb.server.database.access.Access;
+import caosdb.server.database.backend.transaction.RetrieveDatatypes;
+import caosdb.server.database.misc.TransactionBenchmark;
+import caosdb.server.datatype.AbstractDatatype;
+import caosdb.server.entity.EntityInterface;
+import caosdb.server.entity.Role;
+import caosdb.server.entity.container.Container;
+import caosdb.server.logging.RequestErrorLogMessage;
+import caosdb.server.resource.AuthenticationResource;
+import caosdb.server.resource.DefaultResource;
+import caosdb.server.resource.EntityOwnerResource;
+import caosdb.server.resource.EntityPermissionsResource;
+import caosdb.server.resource.FileSystemResource;
+import caosdb.server.resource.InfoResource;
+import caosdb.server.resource.LogoutResource;
+import caosdb.server.resource.PermissionRulesResource;
+import caosdb.server.resource.RolesResource;
+import caosdb.server.resource.ScriptingResource;
+import caosdb.server.resource.ServerLogsResource;
+import caosdb.server.resource.ServerPropertiesResource;
+import caosdb.server.resource.SharedFileResource;
+import caosdb.server.resource.ThumbnailsResource;
+import caosdb.server.resource.UserResource;
+import caosdb.server.resource.UserRolesResource;
+import caosdb.server.resource.Webinterface;
+import caosdb.server.resource.WebinterfaceBuildNumber;
+import caosdb.server.resource.transaction.EntityNamesResource;
+import caosdb.server.resource.transaction.EntityResource;
+import caosdb.server.terminal.CaosDBTerminal;
+import caosdb.server.terminal.StatsPanel;
+import caosdb.server.terminal.SystemErrPanel;
+import caosdb.server.transaction.ChecksumUpdater;
+import caosdb.server.utils.FileUtils;
+import caosdb.server.utils.Initialization;
+import caosdb.server.utils.NullPrintStream;
+import caosdb.server.utils.Utils;
 import java.io.BufferedReader;
 import java.io.FileNotFoundException;
 import java.io.IOException;
@@ -66,51 +111,6 @@ import org.restlet.routing.Variable;
 import org.restlet.util.Series;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-import caosdb.server.accessControl.AnonymousAuthenticationToken;
-import caosdb.server.accessControl.AnonymousRealm;
-import caosdb.server.accessControl.AuthenticationUtils;
-import caosdb.server.accessControl.CaosDBAuthorizingRealm;
-import caosdb.server.accessControl.CaosDBDefaultRealm;
-import caosdb.server.accessControl.OneTimeAuthenticationToken;
-import caosdb.server.accessControl.SessionToken;
-import caosdb.server.accessControl.SessionTokenRealm;
-import caosdb.server.database.BackendTransaction;
-import caosdb.server.database.access.Access;
-import caosdb.server.database.backend.transaction.RetrieveDatatypes;
-import caosdb.server.database.misc.TransactionBenchmark;
-import caosdb.server.datatype.AbstractDatatype;
-import caosdb.server.entity.EntityInterface;
-import caosdb.server.entity.Role;
-import caosdb.server.entity.container.Container;
-import caosdb.server.logging.RequestErrorLogMessage;
-import caosdb.server.resource.AuthenticationResource;
-import caosdb.server.resource.DefaultResource;
-import caosdb.server.resource.EntityOwnerResource;
-import caosdb.server.resource.EntityPermissionsResource;
-import caosdb.server.resource.FileSystemResource;
-import caosdb.server.resource.InfoResource;
-import caosdb.server.resource.LogoutResource;
-import caosdb.server.resource.PermissionRulesResource;
-import caosdb.server.resource.RolesResource;
-import caosdb.server.resource.ScriptingResource;
-import caosdb.server.resource.ServerLogsResource;
-import caosdb.server.resource.ServerPropertiesResource;
-import caosdb.server.resource.SharedFileResource;
-import caosdb.server.resource.ThumbnailsResource;
-import caosdb.server.resource.UserResource;
-import caosdb.server.resource.UserRolesResource;
-import caosdb.server.resource.Webinterface;
-import caosdb.server.resource.WebinterfaceBuildNumber;
-import caosdb.server.resource.transaction.EntityNamesResource;
-import caosdb.server.resource.transaction.EntityResource;
-import caosdb.server.terminal.CaosDBTerminal;
-import caosdb.server.terminal.StatsPanel;
-import caosdb.server.terminal.SystemErrPanel;
-import caosdb.server.transaction.ChecksumUpdater;
-import caosdb.server.utils.FileUtils;
-import caosdb.server.utils.Initialization;
-import caosdb.server.utils.NullPrintStream;
-import caosdb.server.utils.Utils;
 
 public class CaosDBServer extends Application {
 
diff --git a/src/main/java/caosdb/server/accessControl/AuthenticationUtils.java b/src/main/java/caosdb/server/accessControl/AuthenticationUtils.java
index 252218bd99abce5dd0ef90a1b8ba19a548448e21..9dd660e54fc6c91d97470467dcddef01fd7e4d05 100644
--- a/src/main/java/caosdb/server/accessControl/AuthenticationUtils.java
+++ b/src/main/java/caosdb/server/accessControl/AuthenticationUtils.java
@@ -23,17 +23,18 @@
 package caosdb.server.accessControl;
 
 import static caosdb.server.utils.Utils.URLDecodeWithUTF8;
+
+import caosdb.server.CaosDBServer;
+import caosdb.server.ServerProperties;
+import caosdb.server.permissions.ResponsibleAgent;
+import caosdb.server.permissions.Role;
+import caosdb.server.utils.Utils;
 import java.sql.Timestamp;
 import java.util.Collection;
 import java.util.LinkedList;
 import org.apache.shiro.subject.Subject;
 import org.restlet.data.Cookie;
 import org.restlet.data.CookieSetting;
-import caosdb.server.CaosDBServer;
-import caosdb.server.ServerProperties;
-import caosdb.server.permissions.ResponsibleAgent;
-import caosdb.server.permissions.Role;
-import caosdb.server.utils.Utils;
 
 /**
  * Useful static methods, mainly for parsing and serializing SessionTokens by the means of web
@@ -50,7 +51,7 @@ public class AuthenticationUtils {
   public static boolean isAnonymous(Subject user) {
     return AnonymousAuthenticationToken.PRINCIPAL.equals(user.getPrincipal());
   }
-  
+
   public static boolean isAnonymous(Principal principal) {
     return AnonymousAuthenticationToken.PRINCIPAL.equals(principal);
   }
@@ -143,7 +144,7 @@ public class AuthenticationUtils {
   }
 
   // TODO move
-  public static boolean isResponsibleAgentExistent(final ResponsibleAgent agent) {    
+  public static boolean isResponsibleAgentExistent(final ResponsibleAgent agent) {
     // 1) check OWNER, OTHER
     if (Role.OTHER_ROLE.equals(agent) || Role.OWNER_ROLE.equals(agent)) {
       return true;
diff --git a/src/main/java/caosdb/server/accessControl/OneTimeAuthenticationToken.java b/src/main/java/caosdb/server/accessControl/OneTimeAuthenticationToken.java
index f0f57a1d4a82056155c683721b5f162bde177d42..72edefb303b4391321f30b807e951fd407962a43 100644
--- a/src/main/java/caosdb/server/accessControl/OneTimeAuthenticationToken.java
+++ b/src/main/java/caosdb/server/accessControl/OneTimeAuthenticationToken.java
@@ -22,6 +22,11 @@
  */
 package caosdb.server.accessControl;
 
+import caosdb.server.CaosDBServer;
+import caosdb.server.ServerProperties;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.ObjectReader;
+import com.fasterxml.jackson.dataformat.yaml.YAMLFactory;
 import java.io.FileInputStream;
 import java.io.FileNotFoundException;
 import java.io.IOException;
@@ -45,11 +50,6 @@ import org.quartz.JobExecutionException;
 import org.quartz.SchedulerException;
 import org.quartz.Trigger;
 import org.quartz.TriggerBuilder;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.databind.ObjectReader;
-import com.fasterxml.jackson.dataformat.yaml.YAMLFactory;
-import caosdb.server.CaosDBServer;
-import caosdb.server.ServerProperties;
 
 class ConsumedInfo {
 
diff --git a/src/main/java/caosdb/server/accessControl/UserSources.java b/src/main/java/caosdb/server/accessControl/UserSources.java
index 55c36d44bfe87c3d3866d06192e5daa0cddd132b..2b3019f9655a972267668ba1dc2166bfc8f23a06 100644
--- a/src/main/java/caosdb/server/accessControl/UserSources.java
+++ b/src/main/java/caosdb/server/accessControl/UserSources.java
@@ -22,6 +22,12 @@
  */
 package caosdb.server.accessControl;
 
+import caosdb.server.CaosDBServer;
+import caosdb.server.ServerProperties;
+import caosdb.server.entity.Message;
+import caosdb.server.transaction.RetrieveRoleTransaction;
+import caosdb.server.transaction.RetrieveUserTransaction;
+import caosdb.server.utils.ServerMessages;
 import java.io.FileInputStream;
 import java.io.FileNotFoundException;
 import java.io.IOException;
@@ -33,12 +39,6 @@ import org.apache.shiro.authc.AuthenticationException;
 import org.apache.shiro.config.Ini;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-import caosdb.server.CaosDBServer;
-import caosdb.server.ServerProperties;
-import caosdb.server.entity.Message;
-import caosdb.server.transaction.RetrieveRoleTransaction;
-import caosdb.server.transaction.RetrieveUserTransaction;
-import caosdb.server.utils.ServerMessages;
 
 public class UserSources extends HashMap<String, UserSource> {
 
diff --git a/src/main/java/caosdb/server/jobs/extension/AWIBoxLoan.java b/src/main/java/caosdb/server/jobs/extension/AWIBoxLoan.java
deleted file mode 100644
index 30dd77e0c0fc7f97f85db7d45c00cf762badc695..0000000000000000000000000000000000000000
--- a/src/main/java/caosdb/server/jobs/extension/AWIBoxLoan.java
+++ /dev/null
@@ -1,562 +0,0 @@
-package caosdb.server.jobs.extension;
-
-import static caosdb.server.permissions.Role.ANONYMOUS_ROLE;
-
-import caosdb.server.accessControl.UserSources;
-import caosdb.server.database.exceptions.EntityDoesNotExistException;
-import caosdb.server.datatype.SingleValue;
-import caosdb.server.entity.EntityInterface;
-import caosdb.server.entity.Message;
-import caosdb.server.entity.Message.MessageType;
-import caosdb.server.entity.wrapper.Property;
-import caosdb.server.jobs.JobAnnotation;
-import caosdb.server.jobs.core.CheckPropValid;
-import caosdb.server.permissions.EntityACL;
-import caosdb.server.permissions.EntityACLFactory;
-import caosdb.server.permissions.EntityPermission;
-import caosdb.server.query.Query;
-import caosdb.server.transaction.Delete;
-import caosdb.server.transaction.Insert;
-import caosdb.server.transaction.Update;
-import caosdb.server.utils.EntityStatus;
-import caosdb.server.utils.ServerMessages;
-import caosdb.server.utils.Utils;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Objects;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-@JobAnnotation(transaction = caosdb.server.transaction.WriteTransaction.class, loadAlways = true)
-public class AWIBoxLoan extends AWIBoxLoanModel {
-
-  public Logger logger = LoggerFactory.getLogger(getClass());
-  private static final Message UNIQUE_USER =
-      new Message("The user must have a unique combination of first name and last name!");
-  private static final Message BOX_HAS_LOAN =
-      new Message(
-          "This box cannot be be requested right now because it appears to have a Loan property attached to it. This usually means, that the box is already requested or borrowed by someone.");
-
-  @Override
-  protected void run() {
-    try {
-      if (isAnonymous()
-          && (getTransaction() instanceof Delete
-              || isAcceptBorrowUpdateLoan()
-              || isConfirmLoanUpdateLoan()
-              || isRejectReturnUpdateLoan()
-              || isAcceptReturnUpdateLoan()
-              || isManualReturnUpdateBox()
-              || isManualReturnUpdateLoan()
-              || !(isRequestLoanSetUser()
-                  || isRequestLoanInsertLoan()
-                  || isRequestLoanUpdateBox()
-                  || isRequestReturnSetUser()
-                  || isRequestReturnUpdateLoan()))) {
-        addError(ServerMessages.AUTHORIZATION_ERROR);
-        getContainer()
-            .addMessage(
-                new Message(MessageType.Info, 0, "Anonymous users have restricted permissions."));
-        return;
-      }
-    } catch (EntityDoesNotExistException exc) {
-      addError(ServerMessages.AUTHORIZATION_ERROR);
-      getContainer()
-          .addMessage(
-              new Message(MessageType.Info, 0, "Anonymous users have restricted permissions."));
-      return;
-    }
-
-    try {
-      if (!(getTransaction() instanceof Delete
-          || isRequestLoanSetUser()
-          || isRequestLoanInsertLoan()
-          || isManualReturnUpdateLoan()
-          || isManualReturnUpdateBox()
-          || isRequestLoanUpdateBox()
-          || isAcceptBorrowUpdateLoan()
-          || isConfirmLoanUpdateLoan()
-          || isRequestReturnSetUser()
-          || isRequestReturnUpdateLoan()
-          || isRejectReturnUpdateLoan())) {
-        isAcceptReturnUpdateLoan();
-      }
-    } catch (EntityDoesNotExistException exc) {
-      // ignore
-    }
-
-    // special ACL for boxes, loans and persons
-    try {
-      if (getTransaction() instanceof Insert) {
-        for (EntityInterface e : getContainer()) {
-          if (isBoxRecord(e)) {
-            e.setEntityACL(EntityACL.combine(e.getEntityACL(), getBoxACL()));
-          } else if (isLoanRecord(e)) {
-            e.setEntityACL(EntityACL.combine(e.getEntityACL(), getLoanACL()));
-          } else if (isPersonRecord(e)) {
-            e.setEntityACL(EntityACL.combine(e.getEntityACL(), getPersonACL()));
-          }
-        }
-      }
-    } catch (EntityDoesNotExistException e) {
-    }
-  }
-
-  boolean isManualReturnUpdateLoan() {
-    for (EntityInterface e : getContainer()) {
-      if (!isLoanRecord(e) || !hasManualReturnLoanProperties(e)) {
-        logger.trace("isManualReturnUpdateLoan: false");
-        return false;
-      }
-    }
-    for (EntityInterface e : getContainer()) {
-      removeAnonymousPermissions(e);
-    }
-    logger.trace("isManualReturnUpdateLoan: true");
-    return true;
-  }
-
-  boolean hasManualReturnLoanProperties(EntityInterface e) {
-    for (Property p : e.getProperties()) {
-      if (isReturnedProperty(p)) {
-        return true;
-      }
-    }
-    return false;
-  }
-
-  boolean isReturnedProperty(Property p) {
-    return Objects.equals(p.getId(), getReturnedId());
-  }
-
-  void removeAnonymousPermissions(EntityInterface e) {
-    EntityACLFactory f = new EntityACLFactory();
-    f.deny(ANONYMOUS_ROLE, false, EntityPermission.UPDATE_ADD_PROPERTY);
-    f.deny(ANONYMOUS_ROLE, false, EntityPermission.UPDATE_REMOVE_PROPERTY);
-    e.setEntityACL(EntityACL.combine(e.getEntityACL(), f.create()));
-  }
-
-  boolean isManualReturnUpdateBox() {
-    for (EntityInterface e : getContainer()) {
-      if (!isBoxRecord(e) || !hasManualReturnBoxProperties(e)) {
-        logger.trace("isManualReturnUpdateBox: false");
-        return false;
-      }
-    }
-    logger.trace("isManualReturnUpdateBox: true");
-    return true;
-  }
-
-  boolean hasManualReturnBoxProperties(EntityInterface e) {
-    return validBoxHasLoanProperty(e) && boxLoanHasReturnedProperty(e);
-  }
-
-  boolean boxLoanHasReturnedProperty(EntityInterface e) {
-    try {
-      EntityInterface validBox = retrieveValidEntity(e.getId());
-
-      for (Property p : validBox.getProperties()) {
-        if (isLoanProperty(p)) {
-          return validLoanHasReturnedProperty(p.getId());
-        }
-      }
-    } catch (EntityDoesNotExistException exc) {
-      return false;
-    }
-    return false;
-  }
-
-  boolean validLoanHasReturnedProperty(Integer id) {
-    try {
-      EntityInterface validLoan = retrieveValidEntity(id);
-      for (Property p : validLoan.getProperties()) {
-        if (isReturnedProperty(p)) {
-          return true;
-        }
-      }
-    } catch (EntityDoesNotExistException exc) {
-      return false;
-    }
-    return false;
-  }
-
-  boolean isLoanProperty(Property p) {
-    return Objects.equals(p.getId(), getLoanId());
-  }
-
-  private boolean isRejectReturnUpdateLoan() {
-    for (EntityInterface e : getContainer()) {
-      if (!isLoanRecord(e) || !hasRejectReturnProperties(e)) {
-        logger.trace("isRejectReturnUpdateLoan: false");
-        return false;
-      }
-    }
-    for (EntityInterface e : getContainer()) {
-      removeDestinationProperty(e);
-    }
-    logger.trace("isRejectReturnUpdateLoan: true");
-    return true;
-  }
-
-  void removeDestinationProperty(EntityInterface e) {
-    Iterator<Property> iterator = e.getProperties().iterator();
-    while (iterator.hasNext()) {
-      Property p = iterator.next();
-      if (isDestinationProperty(p)) {
-        iterator.remove();
-      }
-    }
-  }
-
-  boolean hasRejectReturnProperties(EntityInterface e) {
-    boolean found = false;
-    for (Property p : e.getProperties()) {
-      if (isDestinationProperty(p)) {
-        found = true;
-      } else if (isReturnAcceptedProperty(p) || isReturnRequestProperty(p)) {
-        logger.trace("hasRejectReturnProperties: false");
-        return false;
-      }
-    }
-    logger.trace("hasRejectReturnProperties found: {}", found);
-    return found;
-  }
-
-  boolean isDestinationProperty(Property p) {
-    return Objects.equals(p.getId(), getDestinationId());
-  }
-
-  boolean isAcceptReturnUpdateLoan() {
-    for (EntityInterface e : getContainer()) {
-      if (!isLoanRecord(e) || !hasAcceptReturnProperties(e)) {
-        logger.trace("isAcceptReturnUpdateLoan: false");
-        return false;
-      }
-    }
-    logger.trace("isAcceptReturnUpdateLoan: true");
-    return true;
-  }
-
-  boolean hasAcceptReturnProperties(EntityInterface e) {
-    boolean found = false;
-    for (Property p : e.getProperties()) {
-      if (isReturnAcceptedProperty(p)) {
-        found = true;
-      }
-    }
-    return found;
-  }
-
-  boolean isConfirmLoanUpdateLoan() {
-    for (EntityInterface e : getContainer()) {
-      if (!isLoanRecord(e) || !hasConfirmLoanProperties(e)) {
-        logger.trace("isConfirmLoanUpdateLoan: false");
-        return false;
-      }
-    }
-    // switch from destination to location
-    for (EntityInterface e : getContainer()) {
-      switchDestinationToLocation(e);
-    }
-    logger.trace("isConfirmLoanUpdateLoan: true");
-    return true;
-  }
-
-  void switchDestinationToLocation(EntityInterface e) {
-    Iterator<Property> iterator = e.getProperties().iterator();
-    EntityInterface p = retrieveValidEntity(getLocationId());
-    while (iterator.hasNext()) {
-      Property next = iterator.next();
-      if (isDestinationProperty(next)) {
-        iterator.remove();
-        p.setValue(next.getValue());
-        e.addProperty(new Property(p));
-        break;
-      }
-    }
-  }
-
-  boolean hasConfirmLoanProperties(EntityInterface e) {
-    boolean found = false;
-    for (Property p : e.getProperties()) {
-      if (isLentProperty(p)) {
-        found = true;
-      } else if (isReturnAcceptedProperty(p) || isDestinationProperty(p)) {
-        logger.trace("hasConfirmLoanProperties: false");
-        return false;
-      }
-    }
-    logger.trace("hasConfirmLoanProperties found: {}", found);
-    return found;
-  }
-
-  boolean isAcceptBorrowUpdateLoan() {
-    for (EntityInterface e : getContainer()) {
-      if (!isLoanRecord(e) || !hasLoanAcceptProperties(e)) {
-        logger.trace("isAcceptBorrowUpdateLoan: false");
-        return false;
-      }
-    }
-    logger.trace("isAcceptBorrowUpdateLoan: true");
-    return true;
-  }
-
-  boolean hasLoanAcceptProperties(EntityInterface e) {
-    boolean found = false;
-    for (Property p : e.getProperties()) {
-      if (isLoanAcceptProperty(p)) {
-        found = true;
-      } else if (isLentProperty(p) || isReturnAcceptedProperty(p)) {
-        logger.trace("hasLoanAcceptProperties: false");
-        return false;
-      }
-    }
-    logger.trace("hasLoanAcceptProperties found: {}", found);
-    return found;
-  }
-
-  boolean isReturnAcceptedProperty(Property p) {
-    return Objects.equals(p.getId(), getReturnAcceptedId());
-  }
-
-  boolean isLentProperty(Property p) {
-    return Objects.equals(p.getId(), getLentId());
-  }
-
-  boolean isLoanAcceptProperty(Property p) {
-    return Objects.equals(p.getId(), getLoanAcceptedId());
-  }
-
-  EntityACL getPersonACL() {
-    // same as loan acl - property updates are allowed for anonymous.
-    return getLoanACL();
-  }
-
-  EntityACL getLoanACL() {
-    EntityACLFactory f = new EntityACLFactory();
-    f.grant(ANONYMOUS_ROLE, false, EntityPermission.UPDATE_ADD_PROPERTY);
-    f.grant(ANONYMOUS_ROLE, false, EntityPermission.UPDATE_REMOVE_PROPERTY);
-    return f.create();
-  }
-
-  EntityACL getBoxACL() {
-    EntityACLFactory f = new EntityACLFactory();
-    f.grant(ANONYMOUS_ROLE, false, EntityPermission.UPDATE_ADD_PROPERTY);
-    f.grant(ANONYMOUS_ROLE, false, EntityPermission.UPDATE_REMOVE_PROPERTY);
-    return f.create();
-  }
-
-  boolean isAnonymous() {
-    boolean ret = getUser().hasRole(UserSources.ANONYMOUS_ROLE);
-    logger.trace("is Anonymous: {}", ret);
-    return ret;
-  }
-
-  boolean isRequestReturnUpdateLoan() {
-    // is UPDATE transaction
-    if (getTransaction() instanceof Update) {
-      // Container has only loan elements with special properties
-      for (EntityInterface e : getContainer()) {
-        if (!isLoanRecord(e) || !hasOnlyAllowedLoanProperties4RequestReturn(e)) {
-          logger.trace("isRequestReturnUpdateLoan: false");
-          return false;
-        }
-        setReturnRequestedDate(e);
-      }
-      appendJob(AWIBoxLoanRequestReturnCuratorEmail.class);
-      logger.trace("isRequestReturnUpdateLoan: true");
-      return true;
-    }
-    logger.trace("isRequestReturnUpdateLoan: false");
-    return false;
-  }
-
-  boolean isRequestReturnSetUser() {
-    // same as request_loan.set_user
-    logger.trace("isRequestReturnSetUser: ->");
-    return isRequestLoanSetUser();
-  }
-
-  boolean isRequestLoanUpdateBox() {
-    // is UPDATE transaction
-    if (getTransaction() instanceof Update) {
-      // Container has only box elements
-      for (EntityInterface e : getContainer()) {
-        if (validBoxHasLoanProperty(e)) {
-          e.addError(BOX_HAS_LOAN);
-          return false;
-        }
-        if (!isBoxRecord(e) || !hasOnlyAllowedBoxProperties4RequestLoan(e)) {
-          return false;
-        }
-        // TODO this breaks the box loan functionality if any other prior changes have been made to
-        // the box
-        //        appendJob(e, CheckNoAdditionalPropertiesPresent.class);
-      }
-      return true;
-    }
-    return false;
-  }
-
-  boolean validBoxHasLoanProperty(EntityInterface e) {
-    try {
-      EntityInterface validBox = retrieveValidEntity(e.getId());
-      for (Property p : validBox.getProperties()) {
-        if (isLoanProperty(p)) {
-          return true;
-        }
-      }
-    } catch (EntityDoesNotExistException exc) {
-      return false;
-    }
-    return false;
-  }
-
-  /** Has only one new property -> Loan. */
-  boolean hasOnlyAllowedBoxProperties4RequestLoan(EntityInterface e) {
-    int count = 0;
-    for (Property p : e.getProperties()) {
-      if (p.getEntityStatus() == EntityStatus.QUALIFIED && Objects.equals(p.getId(), getLoanId())) {
-        count++;
-      }
-    }
-
-    // Box has only one update, a loan property
-    return count == 1;
-  }
-
-  boolean isRequestLoanInsertLoan() {
-    // is INSERT transaction
-    if (getTransaction() instanceof Insert) {
-      // Container has only loan elements
-      for (EntityInterface e : getContainer()) {
-        if (!isLoanRecord(e)) {
-          return false;
-        }
-      }
-      for (EntityInterface e : getContainer()) {
-        if (isAnonymous()) {
-          setCuratorAsOwner(e);
-        }
-        setLoanRequestDate(e);
-        // TODO this check breaks the box loan functionality if any other changes have been made to
-        // the box entity
-        //        appendJob(e, CheckNoAdditionalPropertiesPresent.class);
-        //        appendJob(e, CheckNoOverridesPresent.class);
-      }
-      appendJob(AWIBoxLoanRequestLoanCuratorEmail.class);
-      return true;
-    }
-    return false;
-  }
-
-  void setCuratorAsOwner(EntityInterface e) {
-    e.setEntityACL(EntityACL.getOwnerACLFor(caosdb.server.permissions.Role.create("curator")));
-  }
-
-  void setReturnRequestedDate(EntityInterface e) {
-    // TODO setDateProperty(e, getReturnRequestedId());
-  }
-
-  private void setDateProperty(EntityInterface e, Integer propertyId) {
-    // TODO
-    EntityInterface p = retrieveValidEntity(propertyId);
-    p.setValue(getTransaction().getTimestamp());
-    e.addProperty(new Property(p));
-  }
-
-  void setLoanRequestDate(EntityInterface e) {
-    // TODO setDateProperty(e, getLoanRequestedId());
-  }
-
-  boolean isRequestLoanSetUser() {
-    // is INSERT/UPDATE transaction
-    // Container has only one element, user
-    if ((getTransaction() instanceof Update || getTransaction() instanceof Insert)
-        && getContainer().size() == 1
-        && isPersonRecord(getContainer().get(0))
-        && checkUniqueName(getContainer().get(0))
-        && checkEmail(getContainer().get(0))) {
-      // TODO this check breaks the box loan functionality if any other changes have been made to
-      // the box entity
-      //      appendJob(getContainer().get(0), CheckNoAdditionalPropertiesPresent.class);
-      //      appendJob(getContainer().get(0), CheckNoOverridesPresent.class);
-      logger.trace("isRequestReturnSetUser: true");
-      return true;
-    }
-    logger.trace("isRequestReturnSetUser: false");
-    return false;
-  }
-
-  boolean checkEmail(EntityInterface entity) {
-    runJobFromSchedule(entity, CheckPropValid.class);
-    for (Property p : entity.getProperties()) {
-      if (Objects.equals(p.getId(), getEmailID()) && p.getValue() instanceof SingleValue) {
-        if (!Utils.isRFC822Compliant(((SingleValue) p.getValue()).toDatabaseString())) {
-          p.addError(ServerMessages.EMAIL_NOT_WELL_FORMED);
-        } else {
-          p.setName("email"); // TODO fix webinterface to use lower-case email
-          p.setNameOverride(false);
-        }
-        return true;
-      }
-    }
-    return false;
-  }
-
-  private boolean checkUniqueName(EntityInterface entity) {
-    String firstName = null;
-    String lastName = null;
-    Query q =
-        new Query(
-                "FIND "
-                    + getPersonID().toString()
-                    + " WITH "
-                    + getFirstNameId().toString()
-                    + "='"
-                    + firstName
-                    + "' AND "
-                    + getLastNameId().toString()
-                    + "='"
-                    + lastName
-                    + "'",
-                getUser())
-            .execute(getTransaction().getAccess());
-    List<Integer> resultSet = q.getResultSet();
-    if (resultSet.isEmpty()
-        || (resultSet.size() == 1 && Objects.equals(resultSet.get(0), entity.getId()))) {
-      return true;
-    }
-    entity.addError(UNIQUE_USER);
-    return false;
-  }
-
-  /**
-   * Has only 5/6 new/updated properties: content, returnRequested, destination, Borrower, comment
-   * (optional), location
-   *
-   * @throws Message
-   */
-  boolean hasOnlyAllowedLoanProperties4RequestReturn(EntityInterface e) {
-    runJobFromSchedule(e, CheckPropValid.class);
-    //    appendJob(e, CheckNoOverridesPresent.class);
-
-    boolean foundReturnRequested = false;
-    for (Property p : e.getProperties()) {
-      if (p.getEntityStatus() == EntityStatus.QUALIFIED) { // this means update
-        if (isReturnRequestProperty(p)) {
-          foundReturnRequested = true;
-        } else if (isReturnAcceptedProperty(p) || isReturnedProperty(p)) {
-          logger.trace("hasOnlyAllowedLoanProperties4RequestReturn: false");
-          return false; // this is not a returnRequest, return has already been accepted
-        }
-      }
-    }
-    logger.trace("hasOnlyAllowedLoanProperties4RequestReturn found: {}", foundReturnRequested);
-    return foundReturnRequested;
-  }
-
-  boolean isReturnRequestProperty(Property p) {
-    return Objects.equals(p.getId(), getReturnRequestedId());
-  }
-}
diff --git a/src/main/java/caosdb/server/jobs/extension/AWIBoxLoanCuratorEmail.java b/src/main/java/caosdb/server/jobs/extension/AWIBoxLoanCuratorEmail.java
deleted file mode 100644
index 2bf51e76e7357839ee0c52d28caa18017691849f..0000000000000000000000000000000000000000
--- a/src/main/java/caosdb/server/jobs/extension/AWIBoxLoanCuratorEmail.java
+++ /dev/null
@@ -1,92 +0,0 @@
-package caosdb.server.jobs.extension;
-
-import caosdb.datetime.DateTimeInterface;
-import caosdb.server.CaosDBServer;
-import caosdb.server.ServerProperties;
-import caosdb.server.datatype.ReferenceValue;
-import caosdb.server.datatype.SingleValue;
-import caosdb.server.datatype.Value;
-import caosdb.server.entity.EntityInterface;
-import caosdb.server.entity.wrapper.Property;
-import caosdb.server.utils.mail.Mail;
-import java.util.TimeZone;
-
-public abstract class AWIBoxLoanCuratorEmail extends AWIBoxLoanModel {
-
-  public static final String KEY_EXT_AWI_CURATOR_EMAIL = "EXT_AWI_BOX_CURATOR_EMAIL";
-  protected static final String FROM_EMAIL =
-      CaosDBServer.getServerProperty(ServerProperties.KEY_NO_REPLY_EMAIL);
-  protected static final String FROM_NAME =
-      CaosDBServer.getServerProperty(ServerProperties.KEY_NO_REPLY_NAME);
-  protected static final String CURATOR_EMAIL =
-      CaosDBServer.getServerProperty(KEY_EXT_AWI_CURATOR_EMAIL);
-
-  protected String loanToString(EntityInterface e) {
-    StringBuilder s = new StringBuilder();
-    for (Property p : e.getProperties()) {
-      s.append("\n");
-      s.append(p.getName());
-      s.append(": ");
-      if (p.getValue() instanceof ReferenceValue) {
-        Integer id = ((ReferenceValue) p.getValue()).getId();
-        if (isBorrowerProperty(p)) {
-          s.append(borrowerToString(id));
-        } else if (isBoxProperty(p)) {
-          s.append(boxToString(id));
-        } else {
-          s.append(valueToString(p.getValue()));
-        }
-      } else {
-        s.append(valueToString(p.getValue()));
-      }
-    }
-    return s.toString();
-  }
-
-  private String valueToString(Value value) {
-    if (value == null) {
-      return "";
-    }
-    if (value instanceof DateTimeInterface) {
-      return ((DateTimeInterface) value).toDateTimeString(TimeZone.getDefault());
-    }
-    if (value instanceof SingleValue) {
-      return ((SingleValue) value).toDatabaseString();
-    } else {
-      return value.toString();
-    }
-  }
-
-  private String boxToString(Integer id) {
-    StringBuilder s = new StringBuilder();
-    EntityInterface box = retrieveValidEntity(id);
-    for (Property sp : box.getProperties()) {
-      if (isNumberProperty(sp) || isContentProperty(sp) || isLocationProperty(sp)) {
-        s.append("\n  ");
-        s.append(sp.getName());
-        s.append(": ");
-        s.append(valueToString(sp.getValue()));
-      }
-    }
-    return s.toString();
-  }
-
-  private String borrowerToString(Integer id) {
-    StringBuilder s = new StringBuilder();
-    EntityInterface borrower = retrieveValidEntity(id);
-    for (Property sp : borrower.getProperties()) {
-      s.append("\n  ");
-      s.append(sp.getName());
-      s.append(": ");
-      s.append(valueToString(sp.getValue()));
-    }
-    return s.toString();
-  }
-
-  protected void sendCuratorEmail(String body, String subject) {
-    for (String addr : CURATOR_EMAIL.split(" ")) {
-      Mail m = new Mail(FROM_NAME, FROM_EMAIL, null, addr, subject, body);
-      m.send();
-    }
-  }
-}
diff --git a/src/main/java/caosdb/server/jobs/extension/AWIBoxLoanModel.java b/src/main/java/caosdb/server/jobs/extension/AWIBoxLoanModel.java
deleted file mode 100644
index 92a8a240363cf8659e0d3526dec1c5fcac8ddd11..0000000000000000000000000000000000000000
--- a/src/main/java/caosdb/server/jobs/extension/AWIBoxLoanModel.java
+++ /dev/null
@@ -1,154 +0,0 @@
-package caosdb.server.jobs.extension;
-
-import caosdb.server.CaosDBServer;
-import caosdb.server.database.exceptions.EntityDoesNotExistException;
-import caosdb.server.entity.EntityInterface;
-import caosdb.server.entity.Role;
-import caosdb.server.entity.wrapper.Property;
-import caosdb.server.jobs.ContainerJob;
-import caosdb.server.utils.Utils;
-import java.util.Objects;
-
-public abstract class AWIBoxLoanModel extends ContainerJob {
-
-  /** Is Record and has single user parent. */
-  boolean isPersonRecord(EntityInterface entity) {
-    try {
-      return entity.getParents().size() == 1
-          && Objects.equals(
-              retrieveValidIDByName(entity.getParents().get(0).getName()), getPersonID());
-    } catch (EntityDoesNotExistException exc) {
-      return false;
-    }
-  }
-
-  /** Is Record an has single box parent. */
-  boolean isBoxRecord(EntityInterface e) {
-    return e.getRole() == Role.Record
-        && e.getParents().size() == 1
-        && Objects.equals(e.getParents().get(0).getId(), getBoxId());
-  }
-
-  /** Is Record and has single loan parent */
-  boolean isLoanRecord(EntityInterface e) {
-    try {
-      return e.getRole() == Role.Record
-          && e.getParents().size() == 1
-          && Objects.equals(retrieveValidIDByName(e.getParents().get(0).getName()), getLoanId());
-    } catch (EntityDoesNotExistException exc) {
-      return false;
-    }
-  }
-
-  boolean isBoxProperty(Property p) {
-    return Objects.equals(p.getId(), getBoxId());
-  }
-
-  boolean isBorrowerProperty(Property p) {
-    return Objects.equals(p.getId(), getBorrowerId());
-  }
-
-  boolean isLocationProperty(Property p) {
-    return Objects.equals(p.getId(), getLocationId());
-  }
-
-  boolean isContentProperty(Property p) {
-    return Objects.equals(p.getId(), getContentId());
-  }
-
-  boolean isNumberProperty(Property p) {
-    return Objects.equals(p.getId(), getNumberId());
-  }
-
-  Integer getIdOf(String string) {
-    String id = CaosDBServer.getServerProperty("EXT_AWI_" + string.toUpperCase() + "_ID");
-    if (id != null && Utils.isNonNullInteger(id)) {
-      return Integer.parseInt(id);
-    }
-    String name = CaosDBServer.getServerProperty("EXT_AWI_" + string.toUpperCase() + "_NAME");
-    if (name == null || name.isEmpty()) {
-      name = string;
-    }
-    return retrieveValidIDByName(name);
-  }
-
-  Integer getBorrowerId() {
-    return getIdOf("Borrower");
-  }
-
-  Integer getCommentId() {
-    return getIdOf("comment");
-  }
-
-  Integer getLocationId() {
-    return getIdOf("Location");
-  }
-
-  Integer getDestinationId() {
-    return getIdOf("destination");
-  }
-
-  Integer getContentId() {
-    return getIdOf("Content");
-  }
-
-  Integer getBoxId() {
-    return getIdOf("Box");
-  }
-
-  Integer getLoanId() {
-    return getIdOf("Loan");
-  }
-
-  Integer getPersonID() {
-    return getIdOf("Person");
-  }
-
-  Integer getEmailID() {
-    return getIdOf("email");
-  }
-
-  Integer getLoanAcceptedId() {
-    return getIdOf("loanAccepted");
-  }
-
-  Integer getReturnAcceptedId() {
-    return getIdOf("returnAccepted");
-  }
-
-  Integer getLentId() {
-    return getIdOf("lent");
-  }
-
-  Integer getLoanRequestedId() {
-    return getIdOf("loanRequested");
-  }
-
-  Integer getExhaustContentsId() {
-    return getIdOf("exhaustContents");
-  }
-
-  Integer getExpectedReturnId() {
-    return getIdOf("expectedReturn");
-  }
-
-  Integer getReturnRequestedId() {
-    return getIdOf("returnRequested");
-  }
-
-  Integer getLastNameId() {
-    return getIdOf("lastName");
-  }
-
-  Integer getFirstNameId() {
-    return getIdOf("firstName");
-  }
-
-  Integer getNumberId() {
-    return getIdOf("Number");
-  }
-
-  Integer getReturnedId() {
-    return getIdOf("returned");
-  }
-}
diff --git a/src/main/java/caosdb/server/jobs/extension/AWIBoxLoanRequestLoanCuratorEmail.java b/src/main/java/caosdb/server/jobs/extension/AWIBoxLoanRequestLoanCuratorEmail.java
deleted file mode 100644
index ff490e99a72e93b03b04a0134c81790b1a2a1bec..0000000000000000000000000000000000000000
--- a/src/main/java/caosdb/server/jobs/extension/AWIBoxLoanRequestLoanCuratorEmail.java
+++ /dev/null
@@ -1,24 +0,0 @@
-package caosdb.server.jobs.extension;
-
-import caosdb.server.entity.EntityInterface;
-import caosdb.server.jobs.JobAnnotation;
-import caosdb.server.jobs.JobExecutionTime;
-
-@JobAnnotation(time = JobExecutionTime.POST_TRANSACTION)
-public class AWIBoxLoanRequestLoanCuratorEmail extends AWIBoxLoanCuratorEmail {
-
-  private static final String SUBJECT = "Box Loan Requests";
-
-  @Override
-  protected void run() {
-    StringBuilder body = new StringBuilder("LOAN REQUEST(S):");
-
-    if (!getContainer().isEmpty()) {
-      for (EntityInterface e : getContainer()) {
-        body.append("\n");
-        body.append(loanToString(e));
-      }
-      this.sendCuratorEmail(body.toString(), SUBJECT);
-    }
-  }
-}
diff --git a/src/main/java/caosdb/server/jobs/extension/AWIBoxLoanRequestReturnCuratorEmail.java b/src/main/java/caosdb/server/jobs/extension/AWIBoxLoanRequestReturnCuratorEmail.java
deleted file mode 100644
index 373ce0b8d10ef6db560decb6afcc3e7ab5aa71b3..0000000000000000000000000000000000000000
--- a/src/main/java/caosdb/server/jobs/extension/AWIBoxLoanRequestReturnCuratorEmail.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package caosdb.server.jobs.extension;
-
-import caosdb.server.entity.EntityInterface;
-import caosdb.server.jobs.JobAnnotation;
-import caosdb.server.jobs.JobExecutionTime;
-
-@JobAnnotation(time = JobExecutionTime.POST_TRANSACTION)
-public class AWIBoxLoanRequestReturnCuratorEmail extends AWIBoxLoanCuratorEmail {
-  private static final String SUBJECT = "Box Return Requests";
-
-  @Override
-  protected void run() {
-    if (!getContainer().isEmpty()) {
-      StringBuilder body = new StringBuilder("RETURN REQUEST(S):");
-      for (EntityInterface e : getContainer()) {
-        body.append("\n");
-        body.append(loanToString(e));
-      }
-      this.sendCuratorEmail(body.toString(), SUBJECT);
-    }
-  }
-}
diff --git a/src/main/java/caosdb/server/permissions/EntityACL.java b/src/main/java/caosdb/server/permissions/EntityACL.java
index 208099c5c38003499d626bc1489e117ef56df8bf..426edaba7ca9ab49cbefedcd58d2c9a265b85ed0 100644
--- a/src/main/java/caosdb/server/permissions/EntityACL.java
+++ b/src/main/java/caosdb/server/permissions/EntityACL.java
@@ -24,6 +24,12 @@ package caosdb.server.permissions;
 
 import static caosdb.server.permissions.Role.OTHER_ROLE;
 import static caosdb.server.permissions.Role.OWNER_ROLE;
+
+import caosdb.server.CaosDBServer;
+import caosdb.server.ServerProperties;
+import caosdb.server.accessControl.AuthenticationUtils;
+import caosdb.server.accessControl.Principal;
+import caosdb.server.database.exceptions.TransactionException;
 import java.io.File;
 import java.io.IOException;
 import java.util.ArrayList;
@@ -41,11 +47,6 @@ import org.jdom2.Document;
 import org.jdom2.Element;
 import org.jdom2.JDOMException;
 import org.jdom2.input.SAXBuilder;
-import caosdb.server.CaosDBServer;
-import caosdb.server.ServerProperties;
-import caosdb.server.accessControl.AuthenticationUtils;
-import caosdb.server.accessControl.Principal;
-import caosdb.server.database.exceptions.TransactionException;
 
 public class EntityACL {
 
diff --git a/src/main/java/caosdb/server/transaction/Transaction.java b/src/main/java/caosdb/server/transaction/Transaction.java
index a8f481efc87b7c47bfd492d893600b95f087e387..99161894234214bff84d67fe6ded0af1d2ae4767 100644
--- a/src/main/java/caosdb/server/transaction/Transaction.java
+++ b/src/main/java/caosdb/server/transaction/Transaction.java
@@ -22,9 +22,6 @@
  */
 package caosdb.server.transaction;
 
-import java.util.HashMap;
-import java.util.List;
-import org.apache.shiro.subject.Subject;
 import caosdb.datetime.UTCDateTime;
 import caosdb.server.accessControl.Principal;
 import caosdb.server.database.DatabaseMonitor;
@@ -47,6 +44,9 @@ import caosdb.server.jobs.core.PickUp;
 import caosdb.server.utils.AbstractObservable;
 import caosdb.server.utils.Info;
 import caosdb.server.utils.Observer;
+import java.util.HashMap;
+import java.util.List;
+import org.apache.shiro.subject.Subject;
 
 public abstract class Transaction<C extends TransactionContainer> extends AbstractObservable
     implements TransactionInterface {
diff --git a/src/test/java/caosdb/server/jobs/extension/TestAWIBoxLoan.java b/src/test/java/caosdb/server/jobs/extension/TestAWIBoxLoan.java
deleted file mode 100644
index 08a0e412d8562779cb54574f94ddca932ff54777..0000000000000000000000000000000000000000
--- a/src/test/java/caosdb/server/jobs/extension/TestAWIBoxLoan.java
+++ /dev/null
@@ -1,277 +0,0 @@
-package caosdb.server.jobs.extension;
-
-import static org.junit.Assert.assertEquals;
-
-import caosdb.server.entity.container.TransactionContainer;
-import caosdb.server.jobs.core.Mode;
-import caosdb.server.transaction.Transaction;
-import caosdb.server.utils.EntityStatus;
-import java.util.Collection;
-import java.util.List;
-import java.util.concurrent.Callable;
-import org.apache.shiro.authc.AuthenticationException;
-import org.apache.shiro.authc.AuthenticationToken;
-import org.apache.shiro.authz.AuthorizationException;
-import org.apache.shiro.authz.Permission;
-import org.apache.shiro.session.Session;
-import org.apache.shiro.subject.ExecutionException;
-import org.apache.shiro.subject.PrincipalCollection;
-import org.apache.shiro.subject.Subject;
-import org.junit.Test;
-
-public class TestAWIBoxLoan {
-
-  @Test
-  public void testNonAnonymousUser() {
-    TransactionContainer container = new TransactionContainer();
-    AWIBoxLoan j =
-        new AWIBoxLoan() {
-
-          @Override
-          protected Subject getUser() {
-            return new Subject() {
-
-              @Override
-              public void runAs(PrincipalCollection principals)
-                  throws NullPointerException, IllegalStateException {}
-
-              @Override
-              public PrincipalCollection releaseRunAs() {
-                return null;
-              }
-
-              @Override
-              public void logout() {}
-
-              @Override
-              public void login(AuthenticationToken token) throws AuthenticationException {}
-
-              @Override
-              public boolean isRunAs() {
-                return false;
-              }
-
-              @Override
-              public boolean isRemembered() {
-                return false;
-              }
-
-              @Override
-              public boolean isPermittedAll(Collection<Permission> permissions) {
-                return false;
-              }
-
-              @Override
-              public boolean isPermittedAll(String... permissions) {
-                return false;
-              }
-
-              @Override
-              public boolean[] isPermitted(List<Permission> permissions) {
-                return null;
-              }
-
-              @Override
-              public boolean[] isPermitted(String... permissions) {
-                return null;
-              }
-
-              @Override
-              public boolean isPermitted(Permission permission) {
-
-                return false;
-              }
-
-              @Override
-              public boolean isPermitted(String permission) {
-
-                return false;
-              }
-
-              @Override
-              public boolean isAuthenticated() {
-
-                return false;
-              }
-
-              @Override
-              public boolean[] hasRoles(List<String> roleIdentifiers) {
-
-                return null;
-              }
-
-              @Override
-              public boolean hasRole(String roleIdentifier) {
-
-                return false;
-              }
-
-              @Override
-              public boolean hasAllRoles(Collection<String> roleIdentifiers) {
-
-                return false;
-              }
-
-              @Override
-              public Session getSession(boolean create) {
-                return null;
-              }
-
-              @Override
-              public Session getSession() {
-                return null;
-              }
-
-              @Override
-              public PrincipalCollection getPrincipals() {
-                return null;
-              }
-
-              @Override
-              public Object getPrincipal() {
-                return null;
-              }
-
-              @Override
-              public PrincipalCollection getPreviousPrincipals() {
-                return null;
-              }
-
-              @Override
-              public void execute(Runnable runnable) {}
-
-              @Override
-              public <V> V execute(Callable<V> callable) throws ExecutionException {
-                return null;
-              }
-
-              @Override
-              public void checkRoles(String... roleIdentifiers) throws AuthorizationException {}
-
-              @Override
-              public void checkRoles(Collection<String> roleIdentifiers)
-                  throws AuthorizationException {}
-
-              @Override
-              public void checkRole(String roleIdentifier) throws AuthorizationException {}
-
-              @Override
-              public void checkPermissions(Collection<Permission> permissions)
-                  throws AuthorizationException {}
-
-              @Override
-              public void checkPermissions(String... permissions) throws AuthorizationException {}
-
-              @Override
-              public void checkPermission(Permission permission) throws AuthorizationException {}
-
-              @Override
-              public void checkPermission(String permission) throws AuthorizationException {}
-
-              @Override
-              public Runnable associateWith(Runnable runnable) {
-                return null;
-              }
-
-              @Override
-              public <V> Callable<V> associateWith(Callable<V> callable) {
-                return null;
-              }
-            };
-          }
-        };
-    Transaction<TransactionContainer> t =
-        new Transaction<TransactionContainer>(container, null) {
-
-          @Override
-          protected void transaction() throws Exception {}
-
-          @Override
-          protected void preTransaction() throws InterruptedException {}
-
-          @Override
-          protected void preCheck() throws InterruptedException, Exception {}
-
-          @Override
-          protected void postTransaction() throws Exception {}
-
-          @Override
-          protected void postCheck() {}
-
-          @Override
-          public boolean logHistory() {
-            return false;
-          }
-
-          @Override
-          protected void init() throws Exception {}
-
-          @Override
-          protected void cleanUp() {}
-        };
-
-    j.init(Mode.MUST, null, t);
-    assertEquals(0, j.getContainer().getMessages().size());
-    assertEquals(EntityStatus.QUALIFIED, j.getContainer().getStatus());
-
-    // non-anonymous user
-    j.run();
-    assertEquals(0, j.getContainer().getMessages().size());
-    assertEquals(EntityStatus.QUALIFIED, j.getContainer().getStatus());
-  }
-
-  @Test
-  public void testAnonymousUserUnqualified() {
-    TransactionContainer container = new TransactionContainer();
-    AWIBoxLoan j =
-        new AWIBoxLoan() {
-
-          @Override
-          protected Subject getUser() {
-            return null;
-          }
-
-          @Override
-          boolean isAnonymous() {
-            return true;
-          }
-        };
-    Transaction<TransactionContainer> t =
-        new Transaction<TransactionContainer>(container, null) {
-
-          @Override
-          protected void transaction() throws Exception {}
-
-          @Override
-          protected void preTransaction() throws InterruptedException {}
-
-          @Override
-          protected void preCheck() throws InterruptedException, Exception {}
-
-          @Override
-          protected void postTransaction() throws Exception {}
-
-          @Override
-          protected void postCheck() {}
-
-          @Override
-          public boolean logHistory() {
-            return false;
-          }
-
-          @Override
-          protected void init() throws Exception {}
-
-          @Override
-          protected void cleanUp() {}
-        };
-
-    j.init(Mode.MUST, null, t);
-    assertEquals(0, j.getContainer().getMessages().size());
-    assertEquals(EntityStatus.QUALIFIED, j.getContainer().getStatus());
-
-    j.run();
-    assertEquals(2, j.getContainer().getMessages().size());
-    assertEquals(EntityStatus.UNQUALIFIED, j.getContainer().getStatus());
-  }
-}
diff --git a/src/test/java/caosdb/server/permissions/EntityACLTest.java b/src/test/java/caosdb/server/permissions/EntityACLTest.java
index a088a43a6a97a400703fcfdd59b1d10fbd6c8d1a..d62cb625c8319e676614bf6770eea2f9794daaee 100644
--- a/src/test/java/caosdb/server/permissions/EntityACLTest.java
+++ b/src/test/java/caosdb/server/permissions/EntityACLTest.java
@@ -24,6 +24,15 @@ package caosdb.server.permissions;
 
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertTrue;
+
+import caosdb.server.CaosDBServer;
+import caosdb.server.accessControl.AnonymousAuthenticationToken;
+import caosdb.server.accessControl.AuthenticationUtils;
+import caosdb.server.accessControl.OneTimeAuthenticationToken;
+import caosdb.server.accessControl.OneTimeAuthenticationToken.Config;
+import caosdb.server.resource.AbstractCaosDBServerResource;
+import caosdb.server.resource.AbstractCaosDBServerResource.XMLParser;
+import caosdb.server.utils.Utils;
 import java.io.IOException;
 import java.util.BitSet;
 import java.util.LinkedList;
@@ -34,14 +43,6 @@ import org.jdom2.JDOMException;
 import org.junit.Assert;
 import org.junit.BeforeClass;
 import org.junit.Test;
-import caosdb.server.CaosDBServer;
-import caosdb.server.accessControl.AnonymousAuthenticationToken;
-import caosdb.server.accessControl.AuthenticationUtils;
-import caosdb.server.accessControl.OneTimeAuthenticationToken;
-import caosdb.server.accessControl.OneTimeAuthenticationToken.Config;
-import caosdb.server.resource.AbstractCaosDBServerResource;
-import caosdb.server.resource.AbstractCaosDBServerResource.XMLParser;
-import caosdb.server.utils.Utils;
 
 public class EntityACLTest {
 
@@ -179,30 +180,26 @@ public class EntityACLTest {
     Assert.assertEquals(convert(EntityACL.convert(EntityACL.OWNER_BITSET).get(1, 32)), 0);
   }
 
-   @Test
-   public void testDeserialize() {
-   Assert.assertTrue(EntityACL.deserialize("{}") instanceof EntityACL);
-   Assert.assertTrue(EntityACL.deserialize("{\"tf\":134}") instanceof
-   EntityACL);
-   Assert.assertTrue(EntityACL.deserialize("{\"tf\":6343,\"bla\":884}") instanceof
-   EntityACL);
-   Assert.assertTrue(EntityACL.deserialize("{\"tf\":-2835,\"bla\":884}") instanceof
-   EntityACL);
-   Assert.assertTrue(EntityACL.deserialize("{\"?OWNER?\":526,\"tahsdh   \": -235}")
-   instanceof EntityACL);
-   Assert.assertTrue(EntityACL.deserialize("{\"asdf\":2345}") instanceof
-   EntityACL);
-   Assert.assertTrue(raisesIllegalStateException("{"));
-   Assert.assertTrue(raisesIllegalStateException("}"));
-   Assert.assertTrue(raisesIllegalStateException("{tf:}"));
-   Assert.assertTrue(raisesIllegalStateException("{tf:;}"));
-   Assert.assertTrue(raisesIllegalStateException("{:234}"));
-   Assert.assertTrue(raisesIllegalStateException("{:234;}"));
-   Assert.assertTrue(raisesIllegalStateException("{tf:tf;}"));
-   Assert.assertTrue(raisesIllegalStateException("{tf: +5259;}"));
-   Assert.assertTrue(raisesIllegalStateException("{tf;}"));
-   Assert.assertTrue(raisesIllegalStateException("{tf:123223727356235782735235;}"));
-   }
+  @Test
+  public void testDeserialize() {
+    Assert.assertTrue(EntityACL.deserialize("{}") instanceof EntityACL);
+    Assert.assertTrue(EntityACL.deserialize("{\"tf\":134}") instanceof EntityACL);
+    Assert.assertTrue(EntityACL.deserialize("{\"tf\":6343,\"bla\":884}") instanceof EntityACL);
+    Assert.assertTrue(EntityACL.deserialize("{\"tf\":-2835,\"bla\":884}") instanceof EntityACL);
+    Assert.assertTrue(
+        EntityACL.deserialize("{\"?OWNER?\":526,\"tahsdh   \": -235}") instanceof EntityACL);
+    Assert.assertTrue(EntityACL.deserialize("{\"asdf\":2345}") instanceof EntityACL);
+    Assert.assertTrue(raisesIllegalStateException("{"));
+    Assert.assertTrue(raisesIllegalStateException("}"));
+    Assert.assertTrue(raisesIllegalStateException("{tf:}"));
+    Assert.assertTrue(raisesIllegalStateException("{tf:;}"));
+    Assert.assertTrue(raisesIllegalStateException("{:234}"));
+    Assert.assertTrue(raisesIllegalStateException("{:234;}"));
+    Assert.assertTrue(raisesIllegalStateException("{tf:tf;}"));
+    Assert.assertTrue(raisesIllegalStateException("{tf: +5259;}"));
+    Assert.assertTrue(raisesIllegalStateException("{tf;}"));
+    Assert.assertTrue(raisesIllegalStateException("{tf:123223727356235782735235;}"));
+  }
 
   public boolean raisesIllegalStateException(final String input) {
     try {
@@ -218,158 +215,144 @@ public class EntityACLTest {
   public Element stringToJdom(final String s) throws JDOMException, IOException {
     return parser.parse(Utils.String2InputStream(s)).getRootElement();
   }
-  
+
   @Test
   public void testEntityACLForAnonymous() {
     Subject anonymous = SecurityUtils.getSubject();
     anonymous.login(AnonymousAuthenticationToken.getInstance());
     assertTrue(AuthenticationUtils.isAnonymous(anonymous));
-    EntityACL acl = 
-        EntityACL.getOwnerACLFor(anonymous);
+    EntityACL acl = EntityACL.getOwnerACLFor(anonymous);
     assertNotNull(acl);
     assertTrue(acl.getOwners().isEmpty());
+  }
 
+  //   @Test
+  //   public void testParseFromElement() throws JDOMException, IOException {
+  //   Assert.assertEquals("[]",
+  //   EntityACL.serialize(EntityACL.parseFromElement(stringToJdom("<ACL></ACL>"))));
+  //   Assert.assertEquals("[]", EntityACL.serialize(EntityACL
+  //   .parseFromElement(stringToJdom("<ACL><Grant></Grant></ACL>"))));
+  //   Assert.assertEquals("[]", EntityACL.serialize(EntityACL
+  //   .parseFromElement(stringToJdom("<ACL><Deny></Deny></ACL>"))));
+  //   Assert.assertEquals("[]", EntityACL.serialize(EntityACL
+  //   .parseFromElement(stringToJdom("<ACL><Grant role='bla'></Grant></ACL>"))));
+  //   Assert.assertEquals("[]", EntityACL.serialize(EntityACL
+  //   .parseFromElement(stringToJdom("<ACL><Deny role='bla'></Deny></ACL>"))));
+  //   Assert.assertEquals(
+  //   "{bla:2;}",
+  //   EntityACL.serialize(EntityACL
+  //   .parseFromElement(stringToJdom("<ACL><Grant role='bla'><Permission
+  // name='DELETE'/></Grant></ACL>"))));
+  //   Assert.assertEquals(
+  //   "{bla:" + (Long.MIN_VALUE + 2) + ";}",
+  //   EntityACL.serialize(EntityACL
+  //   .parseFromElement(stringToJdom("<ACL><Deny role='bla'><Permission name='DELETE'
+  // /></Deny></ACL>"))));
+  //   Assert.assertEquals(
+  //   "{bla:32;}",
+  //   EntityACL.serialize(EntityACL
+  //   .parseFromElement(stringToJdom("<ACL><Grant role='bla'><Permission name='RETRIEVE:ACL'
+  // /></Grant></ACL>"))));
+  //   }
+
+  @Test
+  public void testFactory() {
+    final EntityACLFactory f = new EntityACLFactory();
+
+    caosdb.server.permissions.Role role1 = caosdb.server.permissions.Role.create("role1");
+    Config config1 = new Config();
+    config1.setRoles(new String[] {role1.toString()});
+    OneTimeAuthenticationToken token1 = OneTimeAuthenticationToken.generate(config1);
+    Subject user1 = SecurityUtils.getSecurityManager().createSubject(null);
+    user1.login(token1);
+
+    caosdb.server.permissions.Role role2 = caosdb.server.permissions.Role.create("role2");
+    Config config2 = new Config();
+    config2.setRoles(new String[] {role2.toString()});
+    OneTimeAuthenticationToken token2 = OneTimeAuthenticationToken.generate(config2);
+    Subject user2 = SecurityUtils.getSecurityManager().createSubject(null);
+    user2.login(token2);
+
+    f.grant(role1, "UPDATE:NAME");
+    Assert.assertTrue((f.create().isPermitted(user1, EntityPermission.UPDATE_NAME)));
+    Assert.assertFalse((f.create().isPermitted(user2, EntityPermission.UPDATE_NAME)));
+    f.grant(role2, "DELETE");
+    Assert.assertFalse((f.create().isPermitted(user1, EntityPermission.DELETE)));
+    Assert.assertTrue((f.create().isPermitted(user2, EntityPermission.DELETE)));
+    f.deny(role2, 1);
+    f.deny(role1, 1);
+    Assert.assertFalse((f.create().isPermitted(user1, EntityPermission.DELETE)));
+    Assert.assertFalse((f.create().isPermitted(user2, EntityPermission.DELETE)));
+    f.grant(role1, true, 1);
+    Assert.assertTrue((f.create().isPermitted(user1, EntityPermission.DELETE)));
+    Assert.assertFalse((f.create().isPermitted(user2, EntityPermission.DELETE)));
+    f.deny(role2, true, 1);
+    Assert.assertTrue((f.create().isPermitted(user1, EntityPermission.DELETE)));
+    Assert.assertFalse((f.create().isPermitted(user2, EntityPermission.DELETE)));
+    f.grant(role2, true, 1);
+    Assert.assertTrue((f.create().isPermitted(user1, EntityPermission.DELETE)));
+    Assert.assertFalse((f.create().isPermitted(user2, EntityPermission.DELETE)));
+    f.deny(role1, true, 1);
+    Assert.assertFalse((f.create().isPermitted(user1, EntityPermission.DELETE)));
+    Assert.assertFalse((f.create().isPermitted(user2, EntityPermission.DELETE)));
+    Assert.assertTrue((f.create().isPermitted(user1, EntityPermission.UPDATE_NAME)));
+    Assert.assertFalse((f.create().isPermitted(user2, EntityPermission.UPDATE_NAME)));
   }
 
-//   @Test
-//   public void testParseFromElement() throws JDOMException, IOException {
-//   Assert.assertEquals("[]",
-//   EntityACL.serialize(EntityACL.parseFromElement(stringToJdom("<ACL></ACL>"))));
-//   Assert.assertEquals("[]", EntityACL.serialize(EntityACL
-//   .parseFromElement(stringToJdom("<ACL><Grant></Grant></ACL>"))));
-//   Assert.assertEquals("[]", EntityACL.serialize(EntityACL
-//   .parseFromElement(stringToJdom("<ACL><Deny></Deny></ACL>"))));
-//   Assert.assertEquals("[]", EntityACL.serialize(EntityACL
-//   .parseFromElement(stringToJdom("<ACL><Grant role='bla'></Grant></ACL>"))));
-//   Assert.assertEquals("[]", EntityACL.serialize(EntityACL
-//   .parseFromElement(stringToJdom("<ACL><Deny role='bla'></Deny></ACL>"))));
-//   Assert.assertEquals(
-//   "{bla:2;}",
-//   EntityACL.serialize(EntityACL
-//   .parseFromElement(stringToJdom("<ACL><Grant role='bla'><Permission name='DELETE'/></Grant></ACL>"))));
-//   Assert.assertEquals(
-//   "{bla:" + (Long.MIN_VALUE + 2) + ";}",
-//   EntityACL.serialize(EntityACL
-//   .parseFromElement(stringToJdom("<ACL><Deny role='bla'><Permission name='DELETE' /></Deny></ACL>"))));
-//   Assert.assertEquals(
-//   "{bla:32;}",
-//   EntityACL.serialize(EntityACL
-//   .parseFromElement(stringToJdom("<ACL><Grant role='bla'><Permission name='RETRIEVE:ACL' /></Grant></ACL>"))));
-//   }
-
-   @Test
-   public void testFactory() {
-   final EntityACLFactory f = new EntityACLFactory();
-
-   caosdb.server.permissions.Role role1 = caosdb.server.permissions.Role.create("role1");
-   Config config1 = new Config();
-   config1.setRoles(new String[] {role1.toString()});
-   OneTimeAuthenticationToken token1 = OneTimeAuthenticationToken.generate(config1);
-   Subject user1 = SecurityUtils.getSecurityManager().createSubject(null);
-   user1.login(token1);
-
-   caosdb.server.permissions.Role role2 = caosdb.server.permissions.Role.create("role2");
-   Config config2 = new Config();
-   config2.setRoles(new String[] {role2.toString()});
-   OneTimeAuthenticationToken token2 = OneTimeAuthenticationToken.generate(config2);
-   Subject user2 = SecurityUtils.getSecurityManager().createSubject(null);
-   user2.login(token2);
-
-   f.grant(role1, "UPDATE:NAME");
-   Assert.assertTrue((f.create().isPermitted(user1, EntityPermission.UPDATE_NAME)));
-   Assert.assertFalse((f.create().isPermitted(user2,
-   EntityPermission.UPDATE_NAME)));
-   f.grant(role2, "DELETE");
-   Assert.assertFalse((f.create().isPermitted(user1,
-   EntityPermission.DELETE)));
-   Assert.assertTrue((f.create().isPermitted(user2,
-   EntityPermission.DELETE)));
-   f.deny(role2, 1);
-   f.deny(role1, 1);
-   Assert.assertFalse((f.create().isPermitted(user1,
-   EntityPermission.DELETE)));
-   Assert.assertFalse((f.create().isPermitted(user2,
-   EntityPermission.DELETE)));
-   f.grant(role1, true, 1);
-   Assert.assertTrue((f.create().isPermitted(user1,
-   EntityPermission.DELETE)));
-   Assert.assertFalse((f.create().isPermitted(user2,
-   EntityPermission.DELETE)));
-   f.deny(role2, true, 1);
-   Assert.assertTrue((f.create().isPermitted(user1,
-   EntityPermission.DELETE)));
-   Assert.assertFalse((f.create().isPermitted(user2,
-   EntityPermission.DELETE)));
-   f.grant(role2, true, 1);
-   Assert.assertTrue((f.create().isPermitted(user1,
-   EntityPermission.DELETE)));
-   Assert.assertFalse((f.create().isPermitted(user2,
-   EntityPermission.DELETE)));
-   f.deny(role1, true, 1);
-   Assert.assertFalse((f.create().isPermitted(user1,
-   EntityPermission.DELETE)));
-   Assert.assertFalse((f.create().isPermitted(user2,
-   EntityPermission.DELETE)));
-   Assert.assertTrue((f.create().isPermitted(user1,
-   EntityPermission.UPDATE_NAME)));
-   Assert.assertFalse((f.create().isPermitted(user2,
-   EntityPermission.UPDATE_NAME)));
-   }
-
-//   @Test
-//   public void niceFactoryStuff() {
-//   final EntityACLFactory f = new EntityACLFactory();
-//   f.grant("user1", "*");
-//   final EntityACL acl1 = f.create();
-//   Assert.assertTrue(acl1.isPermitted("user1", EntityPermission.EDIT_ACL));
-//   Assert.assertTrue(acl1.isPermitted("user1", EntityPermission.DELETE));
-//   Assert.assertTrue(acl1.isPermitted("user1",
-//   EntityPermission.RETRIEVE_ENTITY));
-//   Assert.assertTrue(acl1.isPermitted("user1",
-//   EntityPermission.UPDATE_DATA_TYPE));
-//   Assert.assertTrue(acl1.isPermitted("user1",
-//   EntityPermission.USE_AS_PROPERTY));
-//  
-//   f.grant("?OWNER?", "DELETE", "EDIT:ACL", "RETRIEVE:*", "UPDATE:*",
-//   "USE:*");
-//   f.grant("user2", "EDIT:ACL");
-//   final EntityACL acl2 = f.create();
-//   Assert.assertTrue(acl2.isPermitted("user2", EntityPermission.EDIT_ACL));
-//   Assert.assertTrue(acl2.isPermitted("user2", EntityPermission.DELETE));
-//   Assert.assertTrue(acl2.isPermitted("user2",
-//   EntityPermission.RETRIEVE_ENTITY));
-//   Assert.assertTrue(acl2.isPermitted("user2",
-//   EntityPermission.UPDATE_DATA_TYPE));
-//   Assert.assertTrue(acl2.isPermitted("user2",
-//   EntityPermission.USE_AS_PROPERTY));
-//  
-//   }
-//
-//   @Test
-//   public void testDeny() {
-//   EntityACLFactory f = new EntityACLFactory();
-//   f.deny("test", "DELETE");
-//   Assert.assertFalse(f.create().isPermitted("test",
-//   EntityPermission.DELETE));
-//  
-//   System.out.println(Utils.element2String(f.create().toElement()));
-//  
-//   System.out.println(Utils.element2String(EntityACL.GLOBAL_PERMISSIONS.toElement()));
-//  
-//   f.grant("test", "USE:*");
-//   Assert.assertFalse(f.create().isPermitted("test",
-//   EntityPermission.DELETE));
-//  
-//   System.out.println(Utils.element2String(f.create().toElement()));
-//  
-//   f = new EntityACLFactory();
-//   f.grant(EntityACL.OTHER_ROLE, "RETRIEVE:*");
-//   f.deny(EntityACL.OTHER_ROLE, "DELETE");
-//   final EntityACL a = f.create();
-//  
-//   System.out.println(Utils.element2String(a.toElement()));
-//  
-//   System.out.println(Utils.element2String(EntityACL.deserialize(a.serialize()).toElement()));
-//   }
+  //   @Test
+  //   public void niceFactoryStuff() {
+  //   final EntityACLFactory f = new EntityACLFactory();
+  //   f.grant("user1", "*");
+  //   final EntityACL acl1 = f.create();
+  //   Assert.assertTrue(acl1.isPermitted("user1", EntityPermission.EDIT_ACL));
+  //   Assert.assertTrue(acl1.isPermitted("user1", EntityPermission.DELETE));
+  //   Assert.assertTrue(acl1.isPermitted("user1",
+  //   EntityPermission.RETRIEVE_ENTITY));
+  //   Assert.assertTrue(acl1.isPermitted("user1",
+  //   EntityPermission.UPDATE_DATA_TYPE));
+  //   Assert.assertTrue(acl1.isPermitted("user1",
+  //   EntityPermission.USE_AS_PROPERTY));
+  //
+  //   f.grant("?OWNER?", "DELETE", "EDIT:ACL", "RETRIEVE:*", "UPDATE:*",
+  //   "USE:*");
+  //   f.grant("user2", "EDIT:ACL");
+  //   final EntityACL acl2 = f.create();
+  //   Assert.assertTrue(acl2.isPermitted("user2", EntityPermission.EDIT_ACL));
+  //   Assert.assertTrue(acl2.isPermitted("user2", EntityPermission.DELETE));
+  //   Assert.assertTrue(acl2.isPermitted("user2",
+  //   EntityPermission.RETRIEVE_ENTITY));
+  //   Assert.assertTrue(acl2.isPermitted("user2",
+  //   EntityPermission.UPDATE_DATA_TYPE));
+  //   Assert.assertTrue(acl2.isPermitted("user2",
+  //   EntityPermission.USE_AS_PROPERTY));
+  //
+  //   }
+  //
+  //   @Test
+  //   public void testDeny() {
+  //   EntityACLFactory f = new EntityACLFactory();
+  //   f.deny("test", "DELETE");
+  //   Assert.assertFalse(f.create().isPermitted("test",
+  //   EntityPermission.DELETE));
+  //
+  //   System.out.println(Utils.element2String(f.create().toElement()));
+  //
+  //   System.out.println(Utils.element2String(EntityACL.GLOBAL_PERMISSIONS.toElement()));
+  //
+  //   f.grant("test", "USE:*");
+  //   Assert.assertFalse(f.create().isPermitted("test",
+  //   EntityPermission.DELETE));
+  //
+  //   System.out.println(Utils.element2String(f.create().toElement()));
+  //
+  //   f = new EntityACLFactory();
+  //   f.grant(EntityACL.OTHER_ROLE, "RETRIEVE:*");
+  //   f.deny(EntityACL.OTHER_ROLE, "DELETE");
+  //   final EntityACL a = f.create();
+  //
+  //   System.out.println(Utils.element2String(a.toElement()));
+  //
+  //   System.out.println(Utils.element2String(EntityACL.deserialize(a.serialize()).toElement()));
+  //   }
 
 }
diff --git a/src/test/java/caosdb/server/resource/TestScriptingResource.java b/src/test/java/caosdb/server/resource/TestScriptingResource.java
index 1a65947b06b5e3e8142ed79a23b336b5604a610d..649c764712ad381f8e4a7c181ee9935dcb79f7fa 100644
--- a/src/test/java/caosdb/server/resource/TestScriptingResource.java
+++ b/src/test/java/caosdb/server/resource/TestScriptingResource.java
@@ -23,6 +23,25 @@
 package caosdb.server.resource;
 
 import static org.junit.Assert.assertEquals;
+
+import caosdb.server.CaosDBServer;
+import caosdb.server.accessControl.AnonymousAuthenticationToken;
+import caosdb.server.accessControl.CredentialsValidator;
+import caosdb.server.accessControl.Principal;
+import caosdb.server.accessControl.Role;
+import caosdb.server.database.BackendTransaction;
+import caosdb.server.database.access.Access;
+import caosdb.server.database.backend.interfaces.RetrievePasswordValidatorImpl;
+import caosdb.server.database.backend.interfaces.RetrievePermissionRulesImpl;
+import caosdb.server.database.backend.interfaces.RetrieveRoleImpl;
+import caosdb.server.database.backend.interfaces.RetrieveUserImpl;
+import caosdb.server.database.exceptions.TransactionException;
+import caosdb.server.database.misc.TransactionBenchmark;
+import caosdb.server.database.proto.ProtoUser;
+import caosdb.server.entity.Message;
+import caosdb.server.permissions.PermissionRule;
+import caosdb.server.scripting.ScriptingPermissions;
+import caosdb.server.scripting.ServerSideScriptingCaller;
 import java.io.IOException;
 import java.util.Date;
 import java.util.HashSet;
@@ -42,24 +61,6 @@ import org.restlet.data.Reference;
 import org.restlet.data.Status;
 import org.restlet.representation.Representation;
 import org.restlet.representation.StringRepresentation;
-import caosdb.server.CaosDBServer;
-import caosdb.server.accessControl.AnonymousAuthenticationToken;
-import caosdb.server.accessControl.CredentialsValidator;
-import caosdb.server.accessControl.Principal;
-import caosdb.server.accessControl.Role;
-import caosdb.server.database.BackendTransaction;
-import caosdb.server.database.access.Access;
-import caosdb.server.database.backend.interfaces.RetrievePasswordValidatorImpl;
-import caosdb.server.database.backend.interfaces.RetrievePermissionRulesImpl;
-import caosdb.server.database.backend.interfaces.RetrieveRoleImpl;
-import caosdb.server.database.backend.interfaces.RetrieveUserImpl;
-import caosdb.server.database.exceptions.TransactionException;
-import caosdb.server.database.misc.TransactionBenchmark;
-import caosdb.server.database.proto.ProtoUser;
-import caosdb.server.entity.Message;
-import caosdb.server.permissions.PermissionRule;
-import caosdb.server.scripting.ScriptingPermissions;
-import caosdb.server.scripting.ServerSideScriptingCaller;
 
 public class TestScriptingResource {