diff --git a/src/main/java/org/caosdb/server/database/DatabaseMonitor.java b/src/main/java/org/caosdb/server/database/DatabaseMonitor.java
index 7dc950195cd7f6b5ca181a65a4ce7e089a5ad5e0..fb9d7685643deecf9bfaa2ab10777e32b3bff51b 100644
--- a/src/main/java/org/caosdb/server/database/DatabaseMonitor.java
+++ b/src/main/java/org/caosdb/server/database/DatabaseMonitor.java
@@ -31,10 +31,9 @@ import org.caosdb.server.database.access.AccessControlAccess;
 import org.caosdb.server.database.access.InfoAccess;
 import org.caosdb.server.database.access.InitAccess;
 import org.caosdb.server.database.access.TransactionAccess;
-import org.caosdb.server.entity.container.TransactionContainer;
 import org.caosdb.server.transaction.AccessControlTransaction;
 import org.caosdb.server.transaction.TransactionInterface;
-import org.caosdb.server.transaction.WriteTransaction;
+import org.caosdb.server.transaction.WriteTransactionInterface;
 import org.caosdb.server.utils.Info;
 import org.caosdb.server.utils.Initialization;
 import org.caosdb.server.utils.Observable;
diff --git a/src/main/java/org/caosdb/server/database/backend/transaction/DeleteEntity.java b/src/main/java/org/caosdb/server/database/backend/transaction/DeleteEntity.java
deleted file mode 100644
index f8ebcd2af6ff73dd11f1b845d7e5aef58ff925f3..0000000000000000000000000000000000000000
--- a/src/main/java/org/caosdb/server/database/backend/transaction/DeleteEntity.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * ** header v3.0
- * This file is a part of the CaosDB Project.
- *
- * Copyright (C) 2018 Research Group Biomedical Physics,
- * Max-Planck-Institute for Dynamics and Self-Organization Göttingen
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see <https://www.gnu.org/licenses/>.
- *
- * ** end header
- */
-package org.caosdb.server.database.backend.transaction;
-
-import org.caosdb.server.database.BackendTransaction;
-import org.caosdb.server.database.exceptions.TransactionException;
-import org.caosdb.server.entity.EntityInterface;
-import org.caosdb.server.entity.container.TransactionContainer;
-
-public class DeleteEntityTransaction extends BackendTransaction {
-
-  private final TransactionContainer container;
-
-  public DeleteEntityTransaction(final TransactionContainer container) {
-    this.container = container;
-  }
-
-  @Override
-  public void execute() throws TransactionException {
-    for (final EntityInterface e : this.container) {
-      execute(new DeleteEntityProperties(e));
-    }
-    for (final EntityInterface e : this.container) {
-      execute(new DeleteSparseEntity(e));
-      if (e.hasFileProperties()) {
-        execute(new DeleteFile(e));
-      }
-    }
-  }
-}
diff --git a/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/backend/transaction/DeleteEntityTransaction.java b/src/main/java/org/caosdb/server/database/backend/transaction/DeleteEntityTransaction.java
similarity index 100%
rename from src/main/java/org/caosdb/server/database/backend/implementation/MySQL/backend/transaction/DeleteEntityTransaction.java
rename to src/main/java/org/caosdb/server/database/backend/transaction/DeleteEntityTransaction.java
diff --git a/src/main/java/org/caosdb/server/database/backend/transaction/InsertEntity.java b/src/main/java/org/caosdb/server/database/backend/transaction/InsertEntity.java
deleted file mode 100644
index 9c86ba33bf47b8051bc365bb32a6f36d0342ff92..0000000000000000000000000000000000000000
--- a/src/main/java/org/caosdb/server/database/backend/transaction/InsertEntity.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * ** header v3.0
- * This file is a part of the CaosDB Project.
- *
- * Copyright (C) 2018 Research Group Biomedical Physics,
- * Max-Planck-Institute for Dynamics and Self-Organization Göttingen
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see <https://www.gnu.org/licenses/>.
- *
- * ** end header
- */
-package org.caosdb.server.database.backend.transaction;
-
-import org.caosdb.server.database.BackendTransaction;
-import org.caosdb.server.entity.EntityInterface;
-import org.caosdb.server.entity.container.TransactionContainer;
-import org.caosdb.server.utils.EntityStatus;
-
-public class InsertEntityTransaction extends BackendTransaction {
-
-  private final TransactionContainer container;
-
-  public InsertEntityTransaction(final TransactionContainer container) {
-    this.container = container;
-  }
-
-  @Override
-  public void execute() {
-    for (final EntityInterface newEntity : this.container) {
-      if (newEntity.getEntityStatus() == EntityStatus.QUALIFIED) {
-        execute(new InsertSparseEntity(newEntity));
-      }
-    }
-    for (final EntityInterface newEntity : this.container) {
-      if (newEntity.getEntityStatus() == EntityStatus.QUALIFIED && newEntity.hasDatatype()) {
-        execute(new InsertEntityDatatype(newEntity));
-      }
-    }
-    for (final EntityInterface newEntity : this.container) {
-      if (newEntity.getEntityStatus() == EntityStatus.QUALIFIED) {
-        if (newEntity.getQueryTemplateDefinition() != null) {
-          execute(new SetQueryTemplateDefinition(newEntity));
-        }
-        if (newEntity.hasFileProperties()) {
-          execute(new InsertFile(newEntity));
-        }
-        execute(new InsertEntityProperties(newEntity));
-        execute(new InsertParents(newEntity));
-
-        if (newEntity.getEntityStatus() == EntityStatus.QUALIFIED) {
-          newEntity.setEntityStatus(EntityStatus.VALID);
-        }
-      }
-    }
-  }
-}
diff --git a/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/backend/transaction/InsertEntityTransaction.java b/src/main/java/org/caosdb/server/database/backend/transaction/InsertEntityTransaction.java
similarity index 100%
rename from src/main/java/org/caosdb/server/database/backend/implementation/MySQL/backend/transaction/InsertEntityTransaction.java
rename to src/main/java/org/caosdb/server/database/backend/transaction/InsertEntityTransaction.java
diff --git a/src/main/java/org/caosdb/server/database/backend/transaction/RetrieveFullEntity.java b/src/main/java/org/caosdb/server/database/backend/transaction/RetrieveFullEntity.java
deleted file mode 100644
index 756176fdb65f9df537a4f0e10c89b6a94e0432f3..0000000000000000000000000000000000000000
--- a/src/main/java/org/caosdb/server/database/backend/transaction/RetrieveFullEntity.java
+++ /dev/null
@@ -1,178 +0,0 @@
-/*
- * ** header v3.0
- * This file is a part of the CaosDB Project.
- *
- * Copyright (C) 2018 Research Group Biomedical Physics,
- * Max-Planck-Institute for Dynamics and Self-Organization Göttingen
- * Copyright (C) 2020 Timm Fitschen <t.fitschen@indiscale.com>
- * Copyright (C) 2020 IndiScale GmbH <info@indiscale.com>
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see <https://www.gnu.org/licenses/>.
- *
- * ** end header
- */
-package org.caosdb.server.database.backend.transaction;
-
-import java.util.LinkedList;
-import java.util.List;
-import org.caosdb.server.database.BackendTransaction;
-import org.caosdb.server.datatype.ReferenceDatatype;
-import org.caosdb.server.datatype.ReferenceValue;
-import org.caosdb.server.entity.EntityInterface;
-import org.caosdb.server.entity.Message;
-import org.caosdb.server.entity.RetrieveEntity;
-import org.caosdb.server.entity.Role;
-import org.caosdb.server.entity.container.Container;
-import org.caosdb.server.entity.wrapper.Property;
-import org.caosdb.server.query.Query;
-import org.caosdb.server.query.Query.Selection;
-import org.caosdb.server.utils.EntityStatus;
-
-/**
- * Retrieve the full entity from the backend - with all parents, properties, file properties and so
- * on.
- *
- * <p>TODO: This class should rather be called FullEntityRetrieval or FullEntityRetrieveTransaction.
- *
- * <p>When the entity which is to be retrieved has a defined list of {@link Query.Selection} which
- * select properties from referenced entities, the referenced entities are retrieved as well.
- * Otherwise, only the referenced id is retrieved and the entity stays rather flat.
- *
- * @author Timm Fitschen <t.fitschen@indiscale.com>
- */
-public class RetrieveFullEntityTransaction extends BackendTransaction {
-
-  private final Container<? extends EntityInterface> container;
-
-  public RetrieveFullEntityTransaction(final EntityInterface entity) {
-    final Container<EntityInterface> c = new Container<>();
-    c.add(entity);
-    this.container = c;
-  }
-
-  public RetrieveFullEntityTransaction(final Container<? extends EntityInterface> container) {
-    this.container = container;
-  }
-
-  public RetrieveFullEntityTransaction(Integer id) {
-    this(new RetrieveEntity(id));
-  }
-
-  @Override
-  public void execute() {
-    retrieveFullEntitiesInContainer(this.container);
-  }
-
-  /**
-   * Retrieve the entities in the container.
-   *
-   * @param container
-   */
-  public void retrieveFullEntitiesInContainer(Container<? extends EntityInterface> container) {
-    for (final EntityInterface e : container) {
-      if (e.hasId() && e.getId() > 0 && e.getEntityStatus() == EntityStatus.QUALIFIED) {
-        retrieveFullEntity(e, e.getSelections());
-      }
-    }
-  }
-
-  /**
-   * Retrieve a single full entity.
-   *
-   * <p>If the selections are not empty, retrieve the referenced entities matching the 'selections'
-   * as well.
-   *
-   * <p>This method is called recursively during the retrieval of the referenced entities.
-   *
-   * @param e The entity.
-   * @param selections
-   */
-  public void retrieveFullEntity(EntityInterface e, List<Selection> selections) {
-    execute(new RetrieveSparseEntity(e));
-
-    if (e.getEntityStatus() == EntityStatus.VALID) {
-      if (e.getRole() == Role.QueryTemplate) {
-        execute(new RetrieveQueryTemplateDefinition(e));
-      }
-      execute(new RetrieveParents(e));
-      execute(new RetrieveProperties(e));
-      execute(new RetrieveVersionInfo(e));
-
-      // recursion! retrieveSubEntities calls retrieveFull sometimes, but with reduced selectors.
-      if (selections != null && !selections.isEmpty()) {
-        retrieveSubEntities(e, selections);
-      }
-    }
-  }
-
-  /**
-   * Retrieve the Entities which match the selections and are referenced by the Entity 'e'.
-   *
-   * @param e
-   * @param selections
-   */
-  public void retrieveSubEntities(EntityInterface e, List<Selection> selections) {
-    for (final Selection s : selections) {
-      if (s.getSubselection() != null) {
-
-        String propertyName = s.getSelector();
-
-        // Find matching (i.e. referencing) Properties
-        for (Property p : e.getProperties()) {
-          // get reference properties by name.
-          if (propertyName.equalsIgnoreCase(p.getName())
-              && p.getDatatype() instanceof ReferenceDatatype) {
-            if (p.getValue() != null) {
-              try {
-                p.parseValue();
-              } catch (Message m) {
-                p.addError(m);
-              }
-
-              ReferenceValue value = (ReferenceValue) p.getValue();
-              RetrieveEntity ref = new RetrieveEntity(value.getId());
-              // recursion!  (Only for the matching selections)
-              retrieveFullEntity(ref, getSubSelects(selections, propertyName));
-              value.setEntity(ref, true);
-            }
-          }
-        }
-      }
-    }
-  }
-
-  /**
-   * Return all non-null subselects of those selections which match the given select String.
-   *
-   * <p>Effectively, this reduces the depth of the selections by one (and drops non-matching
-   * selections).
-   *
-   * @param selections
-   * @param select
-   * @return A new list of Selections.
-   */
-  public List<Selection> getSubSelects(List<Selection> selections, String select) {
-    List<Selection> result = new LinkedList<>();
-    for (Selection s : selections) {
-      if (s.getSelector().equalsIgnoreCase(select) && s.getSubselection() != null) {
-        result.add(s.getSubselection());
-      }
-    }
-    return result;
-  }
-
-  public Container<? extends EntityInterface> getContainer() {
-    return container;
-  }
-}
diff --git a/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/backend/transaction/RetrieveFullEntityTransaction.java b/src/main/java/org/caosdb/server/database/backend/transaction/RetrieveFullEntityTransaction.java
similarity index 100%
rename from src/main/java/org/caosdb/server/database/backend/implementation/MySQL/backend/transaction/RetrieveFullEntityTransaction.java
rename to src/main/java/org/caosdb/server/database/backend/transaction/RetrieveFullEntityTransaction.java
diff --git a/src/main/java/org/caosdb/server/database/backend/transaction/RuleLoader.java b/src/main/java/org/caosdb/server/database/backend/transaction/RuleLoader.java
index 09b40ffdaa81dd8f3dd3fc1e41457c4c8581b4e3..d9e7794d4e91e2d6fafd0fb96b7dbdf711af0450 100644
--- a/src/main/java/org/caosdb/server/database/backend/transaction/RuleLoader.java
+++ b/src/main/java/org/caosdb/server/database/backend/transaction/RuleLoader.java
@@ -33,6 +33,7 @@ import org.caosdb.server.database.exceptions.TransactionException;
 import org.caosdb.server.database.proto.Rule;
 import org.caosdb.server.entity.EntityInterface;
 import org.caosdb.server.entity.container.TransactionContainer;
+import org.caosdb.server.entity.wrapper.Property;
 import org.caosdb.server.jobs.Job;
 import org.caosdb.server.transaction.Transaction;
 
diff --git a/src/main/java/org/caosdb/server/database/backend/transaction/UpdateEntity.java b/src/main/java/org/caosdb/server/database/backend/transaction/UpdateEntity.java
deleted file mode 100644
index b1c55286510bd5ef159ddc0e002dc981705633ee..0000000000000000000000000000000000000000
--- a/src/main/java/org/caosdb/server/database/backend/transaction/UpdateEntity.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * ** header v3.0
- * This file is a part of the CaosDB Project.
- *
- * Copyright (C) 2018 Research Group Biomedical Physics,
- * Max-Planck-Institute for Dynamics and Self-Organization Göttingen
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see <https://www.gnu.org/licenses/>.
- *
- * ** end header
- */
-package org.caosdb.server.database.backend.transaction;
-
-import org.caosdb.server.database.BackendTransaction;
-import org.caosdb.server.database.exceptions.TransactionException;
-import org.caosdb.server.entity.EntityInterface;
-import org.caosdb.server.entity.container.TransactionContainer;
-import org.caosdb.server.utils.EntityStatus;
-
-public class UpdateEntityTransaction extends BackendTransaction {
-
-  private final TransactionContainer container;
-
-  public UpdateEntityTransaction(final TransactionContainer container) {
-    this.container = container;
-  }
-
-  @Override
-  public void execute() throws TransactionException {
-    for (final EntityInterface e : this.container) {
-      if (e.getEntityStatus() == EntityStatus.QUALIFIED) {
-        if (e.hasFileProperties()) {
-          execute(new InsertFile(e));
-        }
-
-        execute(new DeleteEntityProperties(e));
-
-        execute(new UpdateSparseEntity(e));
-
-        execute(new InsertParents(e));
-
-        execute(new InsertEntityValue(e));
-
-        execute(new InsertEntityProperties(e));
-
-        execute(new RetrieveVersionInfo(e));
-      }
-    }
-  }
-}
diff --git a/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/backend/transaction/UpdateEntityTransaction.java b/src/main/java/org/caosdb/server/database/backend/transaction/UpdateEntityTransaction.java
similarity index 100%
rename from src/main/java/org/caosdb/server/database/backend/implementation/MySQL/backend/transaction/UpdateEntityTransaction.java
rename to src/main/java/org/caosdb/server/database/backend/transaction/UpdateEntityTransaction.java
diff --git a/src/main/java/org/caosdb/server/entity/container/WritableContainer.java b/src/main/java/org/caosdb/server/entity/container/WritableContainer.java
index dcf663e8b5b1107adf3782cc688786edf18fdf73..3b44056968b7c1cc27903406b992fcee15ec12af 100644
--- a/src/main/java/org/caosdb/server/entity/container/WritableContainer.java
+++ b/src/main/java/org/caosdb/server/entity/container/WritableContainer.java
@@ -26,7 +26,6 @@ import java.util.HashMap;
 import org.apache.shiro.SecurityUtils;
 import org.apache.shiro.subject.Subject;
 import org.caosdb.server.entity.FileProperties;
-import org.jdom2.Element;
 
 public class WritableContainer extends TransactionContainer {
   private static final long serialVersionUID = -4097777313518959519L;
diff --git a/src/main/java/org/caosdb/server/jobs/Job.java b/src/main/java/org/caosdb/server/jobs/Job.java
index 46771b61fb33da77a6697e42efa12a157a9d8f9f..e7985cd777c6c67aeb912ffae1901996a719310d 100644
--- a/src/main/java/org/caosdb/server/jobs/Job.java
+++ b/src/main/java/org/caosdb/server/jobs/Job.java
@@ -37,7 +37,7 @@ import org.caosdb.server.CaosDBException;
 import org.caosdb.server.database.BackendTransaction;
 import org.caosdb.server.database.backend.transaction.GetIDByName;
 import org.caosdb.server.database.backend.transaction.IsSubType;
-import org.caosdb.server.database.backend.transaction.RetrieveFullEntity;
+import org.caosdb.server.database.backend.transaction.RetrieveFullEntityTransaction;
 import org.caosdb.server.database.backend.transaction.RetrieveParents;
 import org.caosdb.server.database.backend.transaction.RetrieveSparseEntity;
 import org.caosdb.server.database.backend.transaction.RuleLoader;
diff --git a/src/main/java/org/caosdb/server/jobs/core/CheckEntityACLRoles.java b/src/main/java/org/caosdb/server/jobs/core/CheckEntityACLRoles.java
index 917c0f3da0c5f13ceeaf8bee15874cd1b1f16331..037b38b90c94827265d47876e722686d5d030cc0 100644
--- a/src/main/java/org/caosdb/server/jobs/core/CheckEntityACLRoles.java
+++ b/src/main/java/org/caosdb/server/jobs/core/CheckEntityACLRoles.java
@@ -26,10 +26,10 @@ import org.caosdb.server.CaosDBServer;
 import org.caosdb.server.ServerProperties;
 import org.caosdb.server.accessControl.AuthenticationUtils;
 import org.caosdb.server.entity.EntityInterface;
+import org.caosdb.server.entity.InsertEntity;
+import org.caosdb.server.entity.UpdateEntity;
 import org.caosdb.server.jobs.ContainerJob;
 import org.caosdb.server.permissions.EntityACI;
-import org.caosdb.server.transaction.Insert;
-import org.caosdb.server.transaction.Update;
 import org.caosdb.server.utils.EntityStatus;
 import org.caosdb.server.utils.ServerMessages;
 
diff --git a/src/main/java/org/caosdb/server/jobs/core/CheckParOblPropPresent.java b/src/main/java/org/caosdb/server/jobs/core/CheckParOblPropPresent.java
index 07859ed9bcf40887b868b969a976e9c3b8916b0c..7aca2bac3dd3709006497f9ce8f556f267c4ca81 100644
--- a/src/main/java/org/caosdb/server/jobs/core/CheckParOblPropPresent.java
+++ b/src/main/java/org/caosdb/server/jobs/core/CheckParOblPropPresent.java
@@ -22,7 +22,7 @@
  */
 package org.caosdb.server.jobs.core;
 
-import org.caosdb.server.database.backend.transaction.RetrieveFullEntity;
+import org.caosdb.server.database.backend.transaction.RetrieveFullEntityTransaction;
 import org.caosdb.server.entity.EntityInterface;
 import org.caosdb.server.entity.StatementStatus;
 import org.caosdb.server.jobs.EntityJob;
diff --git a/src/main/java/org/caosdb/server/jobs/core/Inheritance.java b/src/main/java/org/caosdb/server/jobs/core/Inheritance.java
index fa8ac7c6844d9984ffff0295b28654749b91b027..73704d0625b177a6e7929dcbdc8032011e3b6176 100644
--- a/src/main/java/org/caosdb/server/jobs/core/Inheritance.java
+++ b/src/main/java/org/caosdb/server/jobs/core/Inheritance.java
@@ -23,15 +23,15 @@
 package org.caosdb.server.jobs.core;
 
 import java.util.ArrayList;
-import org.caosdb.server.database.backend.transaction.RetrieveFullEntity;
+import org.caosdb.server.database.backend.transaction.RetrieveFullEntityTransaction;
 import org.caosdb.server.entity.Entity;
 import org.caosdb.server.entity.EntityInterface;
+import org.caosdb.server.entity.InsertEntity;
 import org.caosdb.server.entity.Message;
 import org.caosdb.server.entity.Message.MessageType;
+import org.caosdb.server.entity.UpdateEntity;
 import org.caosdb.server.entity.wrapper.Property;
 import org.caosdb.server.jobs.EntityJob;
-import org.caosdb.server.transaction.Insert;
-import org.caosdb.server.transaction.Update;
 import org.caosdb.server.utils.EntityStatus;
 
 public class Inheritance extends EntityJob {
diff --git a/src/main/java/org/caosdb/server/jobs/core/InsertFilesInDir.java b/src/main/java/org/caosdb/server/jobs/core/InsertFilesInDir.java
index 1ffa978d1009540cf04657e3febae8a5e18fa102..cde08268e53509b4af70e3a10981def7c97de6f3 100644
--- a/src/main/java/org/caosdb/server/jobs/core/InsertFilesInDir.java
+++ b/src/main/java/org/caosdb/server/jobs/core/InsertFilesInDir.java
@@ -34,16 +34,19 @@ import org.caosdb.server.FileSystem;
 import org.caosdb.server.ServerProperties;
 import org.caosdb.server.database.exceptions.TransactionException;
 import org.caosdb.server.database.misc.RollBackHandler;
-import org.caosdb.server.entity.Entity;
+import org.caosdb.server.entity.EntityInterface;
 import org.caosdb.server.entity.FileProperties;
+import org.caosdb.server.entity.InsertEntity;
 import org.caosdb.server.entity.Message;
 import org.caosdb.server.entity.Message.MessageType;
+import org.caosdb.server.entity.RetrieveEntity;
 import org.caosdb.server.entity.Role;
 import org.caosdb.server.jobs.FlagJob;
 import org.caosdb.server.jobs.Job;
 import org.caosdb.server.jobs.JobAnnotation;
 import org.caosdb.server.jobs.JobExecutionTime;
 import org.caosdb.server.transaction.Retrieve;
+import org.caosdb.server.transaction.WriteTransactionInterface;
 import org.caosdb.server.utils.EntityStatus;
 import org.caosdb.server.utils.FileUtils;
 import org.caosdb.server.utils.Undoable;
@@ -254,7 +257,7 @@ public class InsertFilesInDir extends FlagJob {
   }
 
   private EntityInterface createEntity(String name) {
-    if (getTransaction() instanceof WriteTransaction) {
+    if (getTransaction() instanceof WriteTransactionInterface) {
       return new InsertEntity(name, Role.File);
     }
     EntityInterface result = new RetrieveEntity(name);
diff --git a/src/main/java/org/caosdb/server/resource/EntityOwnerResource.java b/src/main/java/org/caosdb/server/resource/EntityOwnerResource.java
index d2a9bea701db4960aac7aa5b59a72ef807c200b2..853780fcdf118c4e26ee62e857f863d29d5f13fc 100644
--- a/src/main/java/org/caosdb/server/resource/EntityOwnerResource.java
+++ b/src/main/java/org/caosdb/server/resource/EntityOwnerResource.java
@@ -22,10 +22,9 @@
  */
 package org.caosdb.server.resource;
 
+import org.caosdb.server.entity.EntityInterface;
 import org.caosdb.server.entity.container.RetrieveContainer;
-import org.caosdb.server.resource.transaction.EntityResource;
-import org.caosdb.server.resource.transaction.handlers.RequestHandler;
-import org.caosdb.server.resource.transaction.handlers.RetriveOwnerRequestHandler;
+import org.caosdb.server.resource.transaction.RetrieveEntityResource;
 
 public class EntityOwnerResource extends RetrieveEntityResource {
 
diff --git a/src/main/java/org/caosdb/server/resource/EntityPermissionsResource.java b/src/main/java/org/caosdb/server/resource/EntityPermissionsResource.java
index 5350d90a0666ef758505abd6262f472a7447ed76..cd06f73dec6e267ec273abc1256d644794a9637e 100644
--- a/src/main/java/org/caosdb/server/resource/EntityPermissionsResource.java
+++ b/src/main/java/org/caosdb/server/resource/EntityPermissionsResource.java
@@ -23,9 +23,8 @@
 package org.caosdb.server.resource;
 
 import org.caosdb.server.entity.container.RetrieveContainer;
-import org.caosdb.server.resource.transaction.EntityResource;
-import org.caosdb.server.resource.transaction.handlers.RequestHandler;
-import org.caosdb.server.resource.transaction.handlers.RetrieveGlobalEntityPermissionsHandler;
+import org.caosdb.server.permissions.EntityPermission;
+import org.caosdb.server.resource.transaction.RetrieveEntityResource;
 
 public class EntityPermissionsResource extends RetrieveEntityResource {
 
diff --git a/src/main/java/org/caosdb/server/resource/transaction/EntityNamesResource.java b/src/main/java/org/caosdb/server/resource/transaction/EntityNamesResource.java
index 69403e2ead388c31939d4bbc6b714b2db81680c5..18dac7b929a4d1d2afc9081e7f1800b899a890f2 100644
--- a/src/main/java/org/caosdb/server/resource/transaction/EntityNamesResource.java
+++ b/src/main/java/org/caosdb/server/resource/transaction/EntityNamesResource.java
@@ -1,8 +1,6 @@
 package org.caosdb.server.resource.transaction;
 
 import org.caosdb.server.entity.container.RetrieveContainer;
-import org.caosdb.server.resource.transaction.handlers.GetNamesRequestHandler;
-import org.caosdb.server.resource.transaction.handlers.RequestHandler;
 
 public class EntityNamesResource extends RetrieveEntityResource {
 
diff --git a/src/main/java/org/caosdb/server/resource/transaction/EntityResource.java b/src/main/java/org/caosdb/server/resource/transaction/EntityResource.java
index 2adb3ac1e0371342cb5d792323c863fc554ffc28..da01d6f7890604ac8612fb0b8dc931ba53e4771d 100644
--- a/src/main/java/org/caosdb/server/resource/transaction/EntityResource.java
+++ b/src/main/java/org/caosdb/server/resource/transaction/EntityResource.java
@@ -29,29 +29,18 @@ import org.apache.commons.fileupload.FileItemIterator;
 import org.apache.commons.fileupload.FileItemStream;
 import org.apache.commons.fileupload.FileUploadException;
 import org.apache.commons.fileupload.disk.DiskFileItemFactory;
-=======
-package org.caosdb.server.resource.transaction;
-
-import java.io.IOException;
-import java.security.NoSuchAlgorithmException;
-import java.sql.SQLException;
 import org.caosdb.server.CaosDBException;
+import org.caosdb.server.FileSystem;
 import org.caosdb.server.database.backend.implementation.MySQL.ConnectionException;
-import org.caosdb.server.entity.container.DeleteContainer;
-import org.caosdb.server.entity.container.InsertContainer;
-import org.caosdb.server.entity.container.RetrieveContainer;
-import org.caosdb.server.entity.container.UpdateContainer;
-import org.caosdb.server.resource.AbstractCaosDBServerResource;
-import org.caosdb.server.resource.transaction.handlers.FileUploadHandler;
-import org.caosdb.server.resource.transaction.handlers.RequestHandler;
-import org.caosdb.server.resource.transaction.handlers.SimpleDeleteRequestHandler;
-import org.caosdb.server.resource.transaction.handlers.SimpleGetRequestHandler;
-import org.caosdb.server.resource.transaction.handlers.SimpleWriteHandler;
-import org.caosdb.server.transaction.Delete;
-import org.caosdb.server.transaction.Insert;
-import org.caosdb.server.transaction.Retrieve;
-import org.caosdb.server.transaction.Update;
->>>>>>> f-cleanup-awi:src/main/java/org/caosdb/server/resource/transaction/EntityResource.java
+import org.caosdb.server.entity.DeleteEntity;
+import org.caosdb.server.entity.FileProperties;
+import org.caosdb.server.entity.InsertEntity;
+import org.caosdb.server.entity.Message;
+import org.caosdb.server.entity.UpdateEntity;
+import org.caosdb.server.entity.container.WritableContainer;
+import org.caosdb.server.transaction.WriteTransaction;
+import org.caosdb.server.transaction.WriteTransactionInterface;
+import org.caosdb.server.utils.ServerMessages;
 import org.jdom2.Document;
 import org.jdom2.Element;
 import org.jdom2.JDOMException;
diff --git a/src/main/java/caosdb/server/resource/transaction/RetrieveEntityResource.java b/src/main/java/org/caosdb/server/resource/transaction/RetrieveEntityResource.java
similarity index 85%
rename from src/main/java/caosdb/server/resource/transaction/RetrieveEntityResource.java
rename to src/main/java/org/caosdb/server/resource/transaction/RetrieveEntityResource.java
index f629aba411a32351b79c30191ac27f3c4d2224ed..c9312f8f7f0ed39de3dfc5087f453092681be2f3 100644
--- a/src/main/java/caosdb/server/resource/transaction/RetrieveEntityResource.java
+++ b/src/main/java/org/caosdb/server/resource/transaction/RetrieveEntityResource.java
@@ -1,13 +1,13 @@
-package caosdb.server.resource.transaction;
+package org.caosdb.server.resource.transaction;
 
-import caosdb.server.CaosDBException;
-import caosdb.server.database.backend.implementation.MySQL.ConnectionException;
-import caosdb.server.entity.container.RetrieveContainer;
-import caosdb.server.resource.AbstractCaosDBServerResource;
-import caosdb.server.transaction.Retrieve;
 import java.io.IOException;
 import java.security.NoSuchAlgorithmException;
 import java.sql.SQLException;
+import org.caosdb.server.CaosDBException;
+import org.caosdb.server.database.backend.implementation.MySQL.ConnectionException;
+import org.caosdb.server.entity.container.RetrieveContainer;
+import org.caosdb.server.resource.AbstractCaosDBServerResource;
+import org.caosdb.server.transaction.Retrieve;
 import org.jdom2.Document;
 import org.jdom2.Element;
 import org.restlet.representation.Representation;
diff --git a/src/main/java/caosdb/server/resource/transaction/handlers/IDHandler.java b/src/main/java/org/caosdb/server/resource/transaction/handlers/IDHandler.java
similarity index 100%
rename from src/main/java/caosdb/server/resource/transaction/handlers/IDHandler.java
rename to src/main/java/org/caosdb/server/resource/transaction/handlers/IDHandler.java
diff --git a/src/main/java/org/caosdb/server/transaction/ChecksumUpdater.java b/src/main/java/org/caosdb/server/transaction/ChecksumUpdater.java
index 1debe5ec93613b21cd74e40bb7952362ba9408d9..53f7b58af3e5ac8763085aede75cf64ed8a7cae5 100644
--- a/src/main/java/org/caosdb/server/transaction/ChecksumUpdater.java
+++ b/src/main/java/org/caosdb/server/transaction/ChecksumUpdater.java
@@ -34,7 +34,7 @@ import org.caosdb.server.database.exceptions.TransactionException;
 import org.caosdb.server.entity.EntityInterface;
 import org.caosdb.server.entity.FileProperties;
 import org.caosdb.server.entity.Message;
-import org.caosdb.server.entity.container.TransactionContainer;
+import org.caosdb.server.entity.container.WritableContainer;
 import org.caosdb.server.utils.FileUtils;
 
 /**
diff --git a/src/main/java/org/caosdb/server/transaction/Retrieve.java b/src/main/java/org/caosdb/server/transaction/Retrieve.java
index 6dbd37968b87be51cf0fa0c96a8b0c56c555bf0d..b54d7aedbdda1e1cf3fd1577de90a2182d9ede40 100644
--- a/src/main/java/org/caosdb/server/transaction/Retrieve.java
+++ b/src/main/java/org/caosdb/server/transaction/Retrieve.java
@@ -24,7 +24,7 @@ package org.caosdb.server.transaction;
 
 import org.apache.shiro.authz.AuthorizationException;
 import org.caosdb.server.database.access.Access;
-import org.caosdb.server.database.backend.transaction.RetrieveFullEntity;
+import org.caosdb.server.database.backend.transaction.RetrieveFullEntityTransaction;
 import org.caosdb.server.entity.EntityInterface;
 import org.caosdb.server.entity.container.RetrieveContainer;
 import org.caosdb.server.entity.xml.SetFieldStrategy;
diff --git a/src/main/java/org/caosdb/server/transaction/WriteTransaction.java b/src/main/java/org/caosdb/server/transaction/WriteTransaction.java
index ed394784be3232b3a7f3f6f9c6699b7d5931f5e3..f57d4cab002331ffea990b87f518f4f52b8875fa 100644
--- a/src/main/java/org/caosdb/server/transaction/WriteTransaction.java
+++ b/src/main/java/org/caosdb/server/transaction/WriteTransaction.java
@@ -19,9 +19,35 @@
  */
 package org.caosdb.server.transaction;
 
+import java.io.IOException;
+import java.security.NoSuchAlgorithmException;
+import java.util.HashSet;
+import java.util.Objects;
+import java.util.Set;
+import org.apache.shiro.SecurityUtils;
+import org.apache.shiro.authz.AuthorizationException;
+import org.caosdb.server.CaosDBException;
+import org.caosdb.server.database.access.Access;
+import org.caosdb.server.database.backend.transaction.DeleteEntityTransaction;
+import org.caosdb.server.database.backend.transaction.InsertEntityTransaction;
+import org.caosdb.server.database.backend.transaction.RetrieveFullEntityTransaction;
+import org.caosdb.server.database.backend.transaction.UpdateEntityTransaction;
 import org.caosdb.server.database.misc.RollBackHandler;
+import org.caosdb.server.entity.DeleteEntity;
+import org.caosdb.server.entity.EntityInterface;
 import org.caosdb.server.entity.FileProperties;
+import org.caosdb.server.entity.InsertEntity;
+import org.caosdb.server.entity.RetrieveEntity;
+import org.caosdb.server.entity.UpdateEntity;
 import org.caosdb.server.entity.container.TransactionContainer;
+import org.caosdb.server.entity.container.WritableContainer;
+import org.caosdb.server.entity.wrapper.Parent;
+import org.caosdb.server.entity.wrapper.Property;
+import org.caosdb.server.permissions.EntityACL;
+import org.caosdb.server.permissions.EntityPermission;
+import org.caosdb.server.permissions.Permission;
+import org.caosdb.server.utils.EntityStatus;
+import org.caosdb.server.utils.ServerMessages;
 
 public class WriteTransaction extends Transaction<WritableContainer>
     implements WriteTransactionInterface {
@@ -94,7 +120,7 @@ public class WriteTransaction extends Transaction<WritableContainer>
     final TransactionContainer oldContainer = new TransactionContainer();
     final TransactionContainer deleteContainer = new TransactionContainer();
     for (final EntityInterface entity : getContainer()) {
-      if (entity instanceof caosdb.server.entity.UpdateEntity) {
+      if (entity instanceof UpdateEntity) {
         // entity has no id -> it cannot be updated.
         if (!entity.hasId()) {
           entity.addError(ServerMessages.ENTITY_HAS_NO_ID);
@@ -107,7 +133,7 @@ public class WriteTransaction extends Transaction<WritableContainer>
           final EntityInterface oldEntity = new RetrieveEntity(entity.getId());
           oldContainer.add(oldEntity);
         }
-      } else if (entity instanceof caosdb.server.entity.DeleteEntity) {
+      } else if (entity instanceof DeleteEntity) {
         deleteContainer.add(entity);
       }
     }
@@ -127,8 +153,7 @@ public class WriteTransaction extends Transaction<WritableContainer>
 
     // Check if any updates are to be processed.
     for (final EntityInterface entity : getContainer()) {
-      if (entity instanceof caosdb.server.entity.UpdateEntity
-          && entity.getEntityStatus() == EntityStatus.QUALIFIED) {
+      if (entity instanceof UpdateEntity && entity.getEntityStatus() == EntityStatus.QUALIFIED) {
         innerLoop:
         for (final EntityInterface oldEntity : oldContainer) {
           if (oldEntity.getId().equals(entity.getId())) {
@@ -193,7 +218,7 @@ public class WriteTransaction extends Transaction<WritableContainer>
             break innerLoop;
           }
         }
-      } else if (entity instanceof caosdb.server.entity.DeleteEntity) {
+      } else if (entity instanceof DeleteEntity) {
         if (entity.getEntityStatus() == EntityStatus.NONEXISTENT) {
           entity.addError(ServerMessages.ENTITY_DOES_NOT_EXIST);
           continue;
@@ -214,7 +239,7 @@ public class WriteTransaction extends Transaction<WritableContainer>
           entity.addInfo("This entity cannot be deleted");
         }
 
-      } else if (entity instanceof caosdb.server.entity.InsertEntity
+      } else if (entity instanceof InsertEntity
           && entity.hasFileProperties()
           && entity.getFileProperties().hasTmpIdentifier()
           && !entity.getFileProperties().isPickupable()) {
@@ -273,11 +298,11 @@ public class WriteTransaction extends Transaction<WritableContainer>
       TransactionContainer updates = new TransactionContainer();
       TransactionContainer deletes = new TransactionContainer();
       for (EntityInterface entity : getContainer()) {
-        if (entity instanceof caosdb.server.entity.InsertEntity) {
+        if (entity instanceof InsertEntity) {
           inserts.add(entity);
-        } else if (entity instanceof caosdb.server.entity.UpdateEntity) {
+        } else if (entity instanceof UpdateEntity) {
           updates.add(entity);
-        } else if (entity instanceof caosdb.server.entity.DeleteEntity) {
+        } else if (entity instanceof DeleteEntity) {
           deletes.add(entity);
         }
       }
@@ -293,8 +318,7 @@ public class WriteTransaction extends Transaction<WritableContainer>
     // set entityStatus to DELETED and add deletion info message
     if (getContainer().getStatus().ordinal() >= EntityStatus.QUALIFIED.ordinal()) {
       for (final EntityInterface entity : getContainer()) {
-        if (entity instanceof caosdb.server.entity.DeleteEntity
-            && entity.getEntityStatus() == EntityStatus.VALID) {
+        if (entity instanceof DeleteEntity && entity.getEntityStatus() == EntityStatus.VALID) {
           entity.setEntityStatus(EntityStatus.DELETED);
           entity.addInfo(ServerMessages.ENTITY_HAS_BEEN_DELETED_SUCCESSFULLY);
         }
diff --git a/src/main/java/caosdb/server/transaction/WriteTransactionInterface.java b/src/main/java/org/caosdb/server/transaction/WriteTransactionInterface.java
similarity index 55%
rename from src/main/java/caosdb/server/transaction/WriteTransactionInterface.java
rename to src/main/java/org/caosdb/server/transaction/WriteTransactionInterface.java
index d8f9fe38bdcfeefed4e5dc1d2f50ba142cd38a57..165acb408776a720c6887d31b550cf57e3d6fa0c 100644
--- a/src/main/java/caosdb/server/transaction/WriteTransactionInterface.java
+++ b/src/main/java/org/caosdb/server/transaction/WriteTransactionInterface.java
@@ -1,6 +1,6 @@
-package caosdb.server.transaction;
+package org.caosdb.server.transaction;
 
-import caosdb.server.database.access.Access;
+import org.caosdb.server.database.access.Access;
 
 public interface WriteTransactionInterface extends TransactionInterface {