diff --git a/src/main/java/org/caosdb/server/entity/UpdateEntity.java b/src/main/java/org/caosdb/server/entity/UpdateEntity.java
index aa6d591602df66cc9317351cf6a1ea980bc53ea3..884632b5ed3f92d740f2eea69ed49ef77511fd1b 100644
--- a/src/main/java/org/caosdb/server/entity/UpdateEntity.java
+++ b/src/main/java/org/caosdb/server/entity/UpdateEntity.java
@@ -22,11 +22,21 @@
  */
 package org.caosdb.server.entity;
 
+import org.caosdb.server.transaction.WriteTransaction;
 import org.caosdb.server.utils.EntityStatus;
 import org.jdom2.Element;
 
+/**
+ * UpdateEntity class represents entities which are to be updated. The previous version is appeded
+ * during the {@link WriteTransaction} transactions initialization.
+ *
+ * @author Timm Fitschen (t.fitschen@indiscale.com)
+ */
 public class UpdateEntity extends WritableEntity {
 
+  /** The previous version of this entity. */
+  private EntityInterface original = null;
+
   public UpdateEntity(final Element element) {
     super(element);
   }
@@ -35,4 +45,12 @@ public class UpdateEntity extends WritableEntity {
   public boolean skipJob() {
     return getEntityStatus() != EntityStatus.QUALIFIED;
   }
+
+  public void setOriginal(EntityInterface original) {
+    this.original = original;
+  }
+
+  public EntityInterface getOriginal() {
+    return this.original;
+  }
 }
diff --git a/src/main/java/org/caosdb/server/permissions/AbstractEntityACLFactory.java b/src/main/java/org/caosdb/server/permissions/AbstractEntityACLFactory.java
index 675d65dcfee5b8f98e0410bd33992094308fa461..7d7120ebd65dc5a21c9e76271aede9e58aa05f95 100644
--- a/src/main/java/org/caosdb/server/permissions/AbstractEntityACLFactory.java
+++ b/src/main/java/org/caosdb/server/permissions/AbstractEntityACLFactory.java
@@ -242,13 +242,19 @@ public abstract class AbstractEntityACLFactory<T extends EntityACL> {
       for (EntityACI aci : permissions.getRules()) {
         if (EntityACL.isAllowance(aci.getBitSet())) {
           if (EntityACL.isPriorityBitSet(aci.getBitSet())) {
-            long bitset = this.priorityGrants.get(aci.getResponsibleAgent());
+            Long bitset = this.priorityGrants.get(aci.getResponsibleAgent());
+            if (bitset == null) {
+              continue;
+            }
             long bitset2 = bitset;
             bitset2 &= aci.getBitSet();
             bitset ^= bitset2;
             this.priorityGrants.put(aci.getResponsibleAgent(), bitset);
           } else {
-            long bitset = this.normalGrants.get(aci.getResponsibleAgent());
+            Long bitset = this.normalGrants.get(aci.getResponsibleAgent());
+            if (bitset == null) {
+              continue;
+            }
             long bitset2 = bitset;
             bitset2 &= aci.getBitSet();
             bitset ^= bitset2;
@@ -256,13 +262,19 @@ public abstract class AbstractEntityACLFactory<T extends EntityACL> {
           }
         } else {
           if (EntityACL.isPriorityBitSet(aci.getBitSet())) {
-            long bitset = this.priorityDenials.get(aci.getResponsibleAgent());
+            Long bitset = this.priorityDenials.get(aci.getResponsibleAgent());
+            if (bitset == null) {
+              continue;
+            }
             long bitset2 = bitset;
             bitset2 &= aci.getBitSet();
             bitset ^= bitset2;
             this.priorityDenials.put(aci.getResponsibleAgent(), bitset);
           } else {
-            long bitset = this.normalDenials.get(aci.getResponsibleAgent());
+            Long bitset = this.normalDenials.get(aci.getResponsibleAgent());
+            if (bitset == null) {
+              continue;
+            }
             long bitset2 = bitset;
             bitset2 &= aci.getBitSet();
             bitset ^= bitset2;
diff --git a/src/main/java/org/caosdb/server/transaction/WriteTransaction.java b/src/main/java/org/caosdb/server/transaction/WriteTransaction.java
index 87e15e9226c4b40c70630a25ee98c88b65bfcd44..570fce2c2b001699fdb48c1379e807ae05d62996 100644
--- a/src/main/java/org/caosdb/server/transaction/WriteTransaction.java
+++ b/src/main/java/org/caosdb/server/transaction/WriteTransaction.java
@@ -285,7 +285,9 @@ public class WriteTransaction extends Transaction<WritableContainer>
   protected void preCheck() throws InterruptedException, Exception {
     for (final EntityInterface entity : getContainer()) {
       try {
-        checkPermissions(entity, deriveUpdate(entity, ((UpdateEntity) entity).getOriginal()));
+        if (entity.getEntityStatus() == EntityStatus.QUALIFIED) {
+          checkPermissions(entity, deriveUpdate(entity, ((UpdateEntity) entity).getOriginal()));
+        }
       } catch (final AuthorizationException exc) {
         entity.setEntityStatus(EntityStatus.UNQUALIFIED);
         entity.addError(ServerMessages.AUTHORIZATION_ERROR);
@@ -377,21 +379,6 @@ public class WriteTransaction extends Transaction<WritableContainer>
       newEntity.setEntityACL(oldEntity.getEntityACL());
     }
 
-    // new acl?
-    if (newEntity.hasEntityACL() && !newEntity.getEntityACL().equals(oldEntity.getEntityACL())) {
-      oldEntity.checkPermission(EntityPermission.EDIT_ACL);
-      if (!newEntity
-          .getEntityACL()
-          .getPriorityEntityACL()
-          .equals(oldEntity.getEntityACL().getPriorityEntityACL())) {
-        // priority acl is to be changed?
-        oldEntity.checkPermission(Permission.EDIT_PRIORITY_ACL);
-      }
-      updatetable = true;
-    } else if (!newEntity.hasEntityACL()) {
-      newEntity.setEntityACL(oldEntity.getEntityACL());
-    }
-
     // new query template definition?
     if (!Objects.equals(
         newEntity.getQueryTemplateDefinition(), oldEntity.getQueryTemplateDefinition())) {