diff --git a/src/main/java/org/caosdb/server/CaosDBServer.java b/src/main/java/org/caosdb/server/CaosDBServer.java
index 05fb9485fdbd7b2a86b62e9b8ad18af5069f88c2..deca9aaec1a3b02f76b42e2d962374e55d609efc 100644
--- a/src/main/java/org/caosdb/server/CaosDBServer.java
+++ b/src/main/java/org/caosdb/server/CaosDBServer.java
@@ -223,7 +223,6 @@ public class CaosDBServer extends Application {
             public boolean notifyObserver(String e, Observable sender) {
               if (e.equals(ServerProperties.KEY_TIMEZONE)) {
 
-                String[] availableIDs = TimeZone.getAvailableIDs();
                 TimeZone newZoneId =
                     TimeZone.getTimeZone(getServerProperty(ServerProperties.KEY_TIMEZONE));
                 TimeZone.setDefault(newZoneId);
diff --git a/src/main/java/org/caosdb/server/accessControl/ACMPermissions.java b/src/main/java/org/caosdb/server/accessControl/ACMPermissions.java
index 854fc07f9ed93eda28e8aca99c1ea1983c73f4fe..075036921aba51acc05ff1b76df01763485c53c2 100644
--- a/src/main/java/org/caosdb/server/accessControl/ACMPermissions.java
+++ b/src/main/java/org/caosdb/server/accessControl/ACMPermissions.java
@@ -26,12 +26,9 @@ import java.util.HashSet;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Set;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 public class ACMPermissions implements Comparable<ACMPermissions> {
 
-  private static Logger LOGGER = LoggerFactory.getLogger(ACMPermissions.class);
   public static final String USER_PARAMETER = "?USER?";
   public static final String REALM_PARAMETER = "?REALM?";
   public static final String ROLE_PARAMETER = "?ROLE?";
diff --git a/src/main/java/org/caosdb/server/database/Replacement.java b/src/main/java/org/caosdb/server/database/Replacement.java
deleted file mode 100644
index 8606d51bcf903eccea77132aaed9e6a7541da71e..0000000000000000000000000000000000000000
--- a/src/main/java/org/caosdb/server/database/Replacement.java
+++ /dev/null
@@ -1,41 +0,0 @@
-package org.caosdb.server.database;
-
-import org.caosdb.server.datatype.ReferenceValue;
-import org.caosdb.server.entity.EntityID;
-import org.caosdb.server.entity.RetrieveEntity;
-import org.caosdb.server.entity.StatementStatus;
-import org.caosdb.server.entity.wrapper.Property;
-
-public class Replacement extends Property {
-
-  public Property replacement;
-  public EntityID replacementId;
-
-  @Override
-  public EntityID getId() {
-    return replacementId;
-  }
-
-  public void setReplacementId(EntityID id) {
-    replacementId.link(id);
-  }
-
-  public Replacement(Property p) {
-    super(p);
-    replacementId = new EntityID();
-    replacement = new Property(new RetrieveEntity());
-
-    replacement.setDomain(p.getDomainEntity());
-    //    replacement.setDatatypeOverride(p.isDatatypeOverride());
-    //    replacement.setDatatype(p.getDatatype());
-    //    replacement.setNameOverride(p.isNameOverride());
-    //    replacement.setName(p.getName());
-    //    replacement.setDescOverride(p.isDescOverride());
-    //    replacement.setDescription(p.getDescription());
-
-    replacement.setId(replacementId);
-    replacement.setStatementStatus(StatementStatus.REPLACEMENT);
-    replacement.setValue(new ReferenceValue(p.getId()));
-    replacement.setPIdx(0);
-  }
-}
diff --git a/src/main/java/org/caosdb/server/database/DatabaseUtils.java b/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/DatabaseUtils.java
similarity index 87%
rename from src/main/java/org/caosdb/server/database/DatabaseUtils.java
rename to src/main/java/org/caosdb/server/database/backend/implementation/MySQL/DatabaseUtils.java
index 6d72d96546b0df7f98d46ab9cce2c32fe0d0c15d..0347028b7a58146e4766d7060f5f406de699ec82 100644
--- a/src/main/java/org/caosdb/server/database/DatabaseUtils.java
+++ b/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/DatabaseUtils.java
@@ -1,9 +1,10 @@
 /*
- * ** 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) 2023 IndiScale GmbH <info@indiscale.com>
+ * Copyright (C) 2023 Timm Fitschen <t.fitschen@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
@@ -17,10 +18,8 @@
  *
  * 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;
+package org.caosdb.server.database.backend.implementation.MySQL;
 
 import com.google.common.base.Objects;
 import java.sql.ResultSet;
@@ -46,7 +45,6 @@ import org.caosdb.server.entity.EntityInterface;
 import org.caosdb.server.entity.Message;
 import org.caosdb.server.entity.RetrieveEntity;
 import org.caosdb.server.entity.StatementStatus;
-import org.caosdb.server.entity.wrapper.Parent;
 import org.caosdb.server.entity.wrapper.Property;
 
 public class DatabaseUtils {
@@ -154,13 +152,7 @@ public class DatabaseUtils {
     }
   }
 
-  public static void parseFromSparseEntities(final EntityInterface e, final SparseEntity spe) {
-    if (spe != null) {
-      e.parseSparseEntity(spe);
-    }
-  }
-
-  public static void parseOverrides(final List<FlatProperty> properties, final ResultSet rs)
+  public static void parseOverrides(final List<ProtoProperty> properties, final ResultSet rs)
       throws SQLException {
     while (rs.next()) {
       final int property_id = rs.getInt("property_id");
@@ -187,15 +179,15 @@ public class DatabaseUtils {
     }
   }
 
-  public static List<FlatProperty> parsePropertyResultset(final ResultSet rs) throws SQLException {
-    final List<FlatProperty> ret = new LinkedList<>();
+  public static List<ProtoProperty> parsePropertyResultset(final ResultSet rs) throws SQLException {
+    final List<ProtoProperty> ret = new LinkedList<>();
     while (rs.next()) {
-      FlatProperty fp = new FlatProperty();
-      fp.id = rs.getInt("PropertyID");
-      fp.value = bytes2UTF8(rs.getBytes("PropertyValue"));
-      fp.status = bytes2UTF8(rs.getBytes("PropertyStatus"));
-      fp.idx = rs.getInt("PropertyIndex");
-      ret.add(fp);
+      ProtoProperty pp = new ProtoProperty();
+      pp.id = rs.getInt("PropertyID");
+      pp.value = bytes2UTF8(rs.getBytes("PropertyValue"));
+      pp.status = bytes2UTF8(rs.getBytes("PropertyStatus"));
+      pp.idx = rs.getInt("PropertyIndex");
+      ret.add(pp);
     }
     return ret;
   }
@@ -239,9 +231,9 @@ public class DatabaseUtils {
     return ret;
   }
 
-  public static ArrayList<VerySparseEntity> parseParentResultSet(final ResultSet rs)
+  public static LinkedList<VerySparseEntity> parseParentResultSet(final ResultSet rs)
       throws SQLException {
-    final ArrayList<VerySparseEntity> ret = new ArrayList<VerySparseEntity>();
+    final LinkedList<VerySparseEntity> ret = new LinkedList<>();
     while (rs.next()) {
       final VerySparseEntity vsp = new VerySparseEntity();
       vsp.id = rs.getInt("ParentID");
@@ -254,25 +246,6 @@ public class DatabaseUtils {
     return ret;
   }
 
-  public static <K extends EntityInterface> K parseEntityFromVerySparseEntity(
-      final K entity, final VerySparseEntity vse) {
-    entity.setId(new EntityID(vse.id));
-    entity.setName(vse.name);
-    entity.setRole(vse.role);
-    entity.setDescription(vse.description);
-    return entity;
-  }
-
-  public static void parseParentsFromVerySparseEntity(
-      final EntityInterface entity, final List<VerySparseEntity> pars) {
-    for (final VerySparseEntity vsp : pars) {
-      final Parent p = new Parent(new RetrieveEntity(new EntityID(vsp.id)));
-      p.setName(vsp.name);
-      p.setDescription(vsp.description);
-      entity.addParent(p);
-    }
-  }
-
   public static ArrayList<Property> parseFromProtoProperties(
       EntityInterface entity, List<ProtoProperty> protos) {
     final ArrayList<Property> ret = new ArrayList<Property>();
diff --git a/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLGetAllNames.java b/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLGetAllNames.java
index 09cae6886c2daa94d93ab76539a3e1343f5aecbe..474048f1a72331c3a2e35b38c5cb4c9b3e4d6543 100644
--- a/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLGetAllNames.java
+++ b/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLGetAllNames.java
@@ -5,7 +5,6 @@ import java.sql.ResultSet;
 import java.sql.SQLException;
 import java.util.ArrayList;
 import java.util.List;
-import org.caosdb.server.database.DatabaseUtils;
 import org.caosdb.server.database.access.Access;
 import org.caosdb.server.database.backend.interfaces.GetAllNamesImpl;
 import org.caosdb.server.database.exceptions.TransactionException;
diff --git a/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLInsertEntityProperties.java b/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLInsertEntityProperties.java
index 5c9ca6f9bbda94f63e93054c9b5a508de0b5d4e7..f3977068dedc937261f1da4d2b859168d20eb18e 100644
--- a/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLInsertEntityProperties.java
+++ b/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLInsertEntityProperties.java
@@ -33,7 +33,6 @@ import java.util.Deque;
 import java.util.Iterator;
 import java.util.LinkedList;
 import java.util.List;
-import org.caosdb.server.database.DatabaseUtils;
 import org.caosdb.server.database.access.Access;
 import org.caosdb.server.database.backend.interfaces.InsertEntityPropertiesImpl;
 import org.caosdb.server.database.exceptions.IntegrityException;
diff --git a/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLInsertSparseEntity.java b/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLInsertSparseEntity.java
index 1b945acf566db938f12847f758636dbfddeac3d1..27227926156fc9b35ab75473e1efa2cce55f152e 100644
--- a/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLInsertSparseEntity.java
+++ b/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLInsertSparseEntity.java
@@ -26,7 +26,6 @@ import java.sql.PreparedStatement;
 import java.sql.ResultSet;
 import java.sql.SQLIntegrityConstraintViolationException;
 import java.sql.Types;
-import org.caosdb.server.database.DatabaseUtils;
 import org.caosdb.server.database.access.Access;
 import org.caosdb.server.database.backend.interfaces.InsertSparseEntityImpl;
 import org.caosdb.server.database.exceptions.IntegrityException;
diff --git a/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLRetrieveAll.java b/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLRetrieveAll.java
index f847bf63e9f72b4632cecf55ee4a132f141a2cd1..9a2ea81629853e3baf9de7757e1abe6c8f01fe28 100644
--- a/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLRetrieveAll.java
+++ b/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLRetrieveAll.java
@@ -27,7 +27,6 @@ import java.sql.SQLException;
 import java.util.LinkedList;
 import java.util.List;
 import org.apache.shiro.SecurityUtils;
-import org.caosdb.server.database.DatabaseUtils;
 import org.caosdb.server.database.access.Access;
 import org.caosdb.server.database.backend.interfaces.RetrieveAllImpl;
 import org.caosdb.server.database.exceptions.TransactionException;
diff --git a/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLRetrieveDatatypes.java b/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLRetrieveDatatypes.java
index e085f0510a5c0a95f1e0a3bc2f702b4e345d706e..685249417ca9c1664cc1a30af3fc3a597788c29f 100644
--- a/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLRetrieveDatatypes.java
+++ b/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLRetrieveDatatypes.java
@@ -25,8 +25,7 @@ package org.caosdb.server.database.backend.implementation.MySQL;
 import java.sql.PreparedStatement;
 import java.sql.ResultSet;
 import java.sql.SQLException;
-import java.util.ArrayList;
-import org.caosdb.server.database.DatabaseUtils;
+import java.util.List;
 import org.caosdb.server.database.access.Access;
 import org.caosdb.server.database.backend.interfaces.RetrieveDatatypesImpl;
 import org.caosdb.server.database.exceptions.TransactionException;
@@ -53,7 +52,7 @@ public class MySQLRetrieveDatatypes extends MySQLTransaction implements Retrieve
           + "FROM entities AS e WHERE e.role='DATATYPE'";
 
   @Override
-  public ArrayList<VerySparseEntity> execute() throws TransactionException {
+  public List<VerySparseEntity> execute() throws TransactionException {
     try {
       final PreparedStatement stmt = prepareStatement(STMT_GET_DATATYPE);
 
diff --git a/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLRetrieveParents.java b/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLRetrieveParents.java
index 64ce7e9023bd18506a4b13610033923fa7320ca8..1e2a6621d2fb85a5a5260b1a607670e970f54701 100644
--- a/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLRetrieveParents.java
+++ b/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLRetrieveParents.java
@@ -26,8 +26,7 @@ import java.sql.PreparedStatement;
 import java.sql.ResultSet;
 import java.sql.SQLException;
 import java.sql.Types;
-import java.util.ArrayList;
-import org.caosdb.server.database.DatabaseUtils;
+import java.util.LinkedList;
 import org.caosdb.server.database.access.Access;
 import org.caosdb.server.database.backend.interfaces.RetrieveParentsImpl;
 import org.caosdb.server.database.exceptions.TransactionException;
@@ -43,7 +42,7 @@ public class MySQLRetrieveParents extends MySQLTransaction implements RetrievePa
   private static final String stmtStr = "call retrieveEntityParents(?, ?)";
 
   @Override
-  public ArrayList<VerySparseEntity> execute(final EntityID id, final String version)
+  public LinkedList<VerySparseEntity> execute(final EntityID id, final String version)
       throws TransactionException {
     try {
       ResultSet rs = null;
diff --git a/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLRetrievePasswordValidator.java b/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLRetrievePasswordValidator.java
index 1ff7dd7afd0b468a90d9e3b82faca1adc5cae84f..9fd7e0a8e441b3ede2a3447ec364c24e16898fb5 100644
--- a/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLRetrievePasswordValidator.java
+++ b/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLRetrievePasswordValidator.java
@@ -22,7 +22,7 @@
  */
 package org.caosdb.server.database.backend.implementation.MySQL;
 
-import static org.caosdb.server.database.DatabaseUtils.bytes2UTF8;
+import static org.caosdb.server.database.backend.implementation.MySQL.DatabaseUtils.bytes2UTF8;
 
 import java.security.NoSuchAlgorithmException;
 import java.sql.PreparedStatement;
diff --git a/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLRetrieveProperties.java b/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLRetrieveProperties.java
index c8843f9c919f64ed3af1df4f231549fb5282eeea..100df4ce72ebae75d3022866b345bacc9752ad91 100644
--- a/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLRetrieveProperties.java
+++ b/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLRetrieveProperties.java
@@ -28,11 +28,9 @@ import java.sql.SQLException;
 import java.sql.Types;
 import java.util.LinkedList;
 import java.util.List;
-import org.caosdb.server.database.DatabaseUtils;
 import org.caosdb.server.database.access.Access;
 import org.caosdb.server.database.backend.interfaces.RetrievePropertiesImpl;
 import org.caosdb.server.database.exceptions.TransactionException;
-import org.caosdb.server.database.proto.FlatProperty;
 import org.caosdb.server.database.proto.ProtoProperty;
 import org.caosdb.server.entity.EntityID;
 
@@ -92,32 +90,22 @@ public class MySQLRetrieveProperties extends MySQLTransaction implements Retriev
       final long t2 = System.currentTimeMillis();
       addMeasurement(this.getClass().getSimpleName() + ".retrieveFlatPropertiesStage1", t2 - t1);
 
-      final List<FlatProperty> props = DatabaseUtils.parsePropertyResultset(rs);
+      final List<ProtoProperty> properties = DatabaseUtils.parsePropertyResultset(rs);
 
       final PreparedStatement retrieveOverrides = prepareStatement(stmtStr2);
 
-      retrieveOverrides(domain, entity, version, retrieveOverrides, props);
+      retrieveOverrides(domain, entity, version, retrieveOverrides, properties);
 
-      return handleCollectionValues(props);
+      return properties;
     }
   }
 
-  @Deprecated
-  public List<ProtoProperty> handleCollectionValues(List<FlatProperty> props) throws SQLException {
-
-    List<ProtoProperty> result = new LinkedList<>();
-    for (FlatProperty fp : props) {
-      result.add(new ProtoProperty(fp));
-    }
-    return result;
-  }
-
   private void retrieveOverrides(
       final Integer domain,
       final Integer entity,
       final String version,
       final PreparedStatement retrieveOverrides,
-      final List<FlatProperty> props)
+      final List<ProtoProperty> props)
       throws SQLException {
 
     ResultSet rs = null;
diff --git a/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLRetrieveSparseEntity.java b/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLRetrieveSparseEntity.java
index ca3bd078daba4c72e7f516ce64b1da1515a1a6eb..48cd84b3869262ba7f1d8129fdde2335bed6cd8e 100644
--- a/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLRetrieveSparseEntity.java
+++ b/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLRetrieveSparseEntity.java
@@ -26,7 +26,6 @@ import java.sql.PreparedStatement;
 import java.sql.ResultSet;
 import java.sql.SQLException;
 import java.sql.Types;
-import org.caosdb.server.database.DatabaseUtils;
 import org.caosdb.server.database.access.Access;
 import org.caosdb.server.database.backend.interfaces.RetrieveSparseEntityImpl;
 import org.caosdb.server.database.exceptions.TransactionException;
diff --git a/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLRetrieveUser.java b/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLRetrieveUser.java
index bde1878db5d49b2da201b7d589c1ee8b8d73f656..40f036f1d63753c0be9e6153f741db7d4f9d04ad 100644
--- a/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLRetrieveUser.java
+++ b/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLRetrieveUser.java
@@ -22,7 +22,7 @@
  */
 package org.caosdb.server.database.backend.implementation.MySQL;
 
-import static org.caosdb.server.database.DatabaseUtils.bytes2UTF8;
+import static org.caosdb.server.database.backend.implementation.MySQL.DatabaseUtils.bytes2UTF8;
 
 import java.sql.PreparedStatement;
 import java.sql.ResultSet;
diff --git a/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLRetrieveVersionHistory.java b/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLRetrieveVersionHistory.java
index 585be49afe93dc94c6ba2bc4f058c5d46fcf40f6..6c4c2629a5effee25128f478bef20f5558a027ba 100644
--- a/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLRetrieveVersionHistory.java
+++ b/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLRetrieveVersionHistory.java
@@ -27,7 +27,6 @@ import java.sql.ResultSet;
 import java.sql.SQLException;
 import java.util.HashMap;
 import java.util.LinkedList;
-import org.caosdb.server.database.DatabaseUtils;
 import org.caosdb.server.database.access.Access;
 import org.caosdb.server.database.backend.interfaces.RetrieveVersionHistoryImpl;
 import org.caosdb.server.database.exceptions.TransactionException;
diff --git a/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLUpdateSparseEntity.java b/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLUpdateSparseEntity.java
index 1c8039253b4c5e74a8054dfa937fec23c55440e8..b2d0fb9e3b7615e7e95243a2a7bde2fa99e98ca2 100644
--- a/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLUpdateSparseEntity.java
+++ b/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLUpdateSparseEntity.java
@@ -27,7 +27,6 @@ import java.sql.ResultSet;
 import java.sql.SQLException;
 import java.sql.SQLIntegrityConstraintViolationException;
 import java.sql.Types;
-import org.caosdb.server.database.DatabaseUtils;
 import org.caosdb.server.database.access.Access;
 import org.caosdb.server.database.backend.interfaces.UpdateSparseEntityImpl;
 import org.caosdb.server.database.exceptions.IntegrityException;
diff --git a/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/Replacement.java b/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/Replacement.java
new file mode 100644
index 0000000000000000000000000000000000000000..66bf99c458a7c5dede2c02c506b1e7b82a8b99ef
--- /dev/null
+++ b/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/Replacement.java
@@ -0,0 +1,53 @@
+/*
+ * This file is a part of the CaosDB Project.
+ *
+ * Copyright (C) 2023 IndiScale GmbH <info@indiscale.com>
+ * Copyright (C) 2023 Timm Fitschen <t.fitschen@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/>.
+ */
+package org.caosdb.server.database.backend.implementation.MySQL;
+
+import org.caosdb.server.datatype.ReferenceValue;
+import org.caosdb.server.entity.EntityID;
+import org.caosdb.server.entity.RetrieveEntity;
+import org.caosdb.server.entity.StatementStatus;
+import org.caosdb.server.entity.wrapper.Property;
+
+public class Replacement extends Property {
+
+  public Property replacement;
+  public EntityID replacementId;
+
+  @Override
+  public EntityID getId() {
+    return replacementId;
+  }
+
+  public void setReplacementId(EntityID id) {
+    replacementId.link(id);
+  }
+
+  public Replacement(Property p) {
+    super(p);
+    replacementId = new EntityID();
+    replacement = new Property(new RetrieveEntity());
+
+    replacement.setDomain(p.getDomainEntity());
+    replacement.setId(replacementId);
+    replacement.setStatementStatus(StatementStatus.REPLACEMENT);
+    replacement.setValue(new ReferenceValue(p.getId()));
+    replacement.setPIdx(0);
+  }
+}
diff --git a/src/main/java/org/caosdb/server/database/backend/interfaces/RetrieveDatatypesImpl.java b/src/main/java/org/caosdb/server/database/backend/interfaces/RetrieveDatatypesImpl.java
index 91c68dc56a31fe520d6b29c4b6780afe433f9039..0886ff4374e846acfd14e37b8d2414be912d6e3d 100644
--- a/src/main/java/org/caosdb/server/database/backend/interfaces/RetrieveDatatypesImpl.java
+++ b/src/main/java/org/caosdb/server/database/backend/interfaces/RetrieveDatatypesImpl.java
@@ -22,11 +22,11 @@
  */
 package org.caosdb.server.database.backend.interfaces;
 
-import java.util.ArrayList;
+import java.util.List;
 import org.caosdb.server.database.exceptions.TransactionException;
 import org.caosdb.server.database.proto.VerySparseEntity;
 
 public interface RetrieveDatatypesImpl extends BackendTransactionImpl {
 
-  public abstract ArrayList<VerySparseEntity> execute() throws TransactionException;
+  public abstract List<VerySparseEntity> execute() throws TransactionException;
 }
diff --git a/src/main/java/org/caosdb/server/database/backend/interfaces/RetrieveParentsImpl.java b/src/main/java/org/caosdb/server/database/backend/interfaces/RetrieveParentsImpl.java
index 9bfddba10a8b548d1259adb22aac392a127a8b5e..9f7eba821e8038befa47f35b31e017aa042bb28f 100644
--- a/src/main/java/org/caosdb/server/database/backend/interfaces/RetrieveParentsImpl.java
+++ b/src/main/java/org/caosdb/server/database/backend/interfaces/RetrieveParentsImpl.java
@@ -22,13 +22,13 @@
  */
 package org.caosdb.server.database.backend.interfaces;
 
-import java.util.ArrayList;
+import java.util.LinkedList;
 import org.caosdb.server.database.exceptions.TransactionException;
 import org.caosdb.server.database.proto.VerySparseEntity;
 import org.caosdb.server.entity.EntityID;
 
 public interface RetrieveParentsImpl extends BackendTransactionImpl {
 
-  public ArrayList<VerySparseEntity> execute(EntityID id, String version)
+  public LinkedList<VerySparseEntity> execute(EntityID id, String version)
       throws TransactionException;
 }
diff --git a/src/main/java/org/caosdb/server/database/backend/transaction/RetrieveDatatypes.java b/src/main/java/org/caosdb/server/database/backend/transaction/RetrieveDatatypes.java
index b4a726da8d7b352f69df23a54371feef2d2201c5..1ca9f60e964f1e18ca49b749dde21f8e8785aaa6 100644
--- a/src/main/java/org/caosdb/server/database/backend/transaction/RetrieveDatatypes.java
+++ b/src/main/java/org/caosdb/server/database/backend/transaction/RetrieveDatatypes.java
@@ -22,7 +22,7 @@
  */
 package org.caosdb.server.database.backend.transaction;
 
-import java.util.ArrayList;
+import java.util.List;
 import org.caosdb.server.database.BackendTransaction;
 import org.caosdb.server.database.backend.interfaces.RetrieveDatatypesImpl;
 import org.caosdb.server.database.exceptions.TransactionException;
@@ -35,7 +35,7 @@ import org.caosdb.server.entity.container.Container;
 
 public class RetrieveDatatypes extends BackendTransaction {
 
-  private ArrayList<VerySparseEntity> list;
+  private List<VerySparseEntity> list;
 
   @Override
   public void execute() throws TransactionException {
diff --git a/src/main/java/org/caosdb/server/database/backend/transaction/RetrieveParents.java b/src/main/java/org/caosdb/server/database/backend/transaction/RetrieveParents.java
index b551430a26ed6a254789258aca688521f5a57ae4..262ee271acf5b6d3652a0177b0818cbf1e9f74ee 100644
--- a/src/main/java/org/caosdb/server/database/backend/transaction/RetrieveParents.java
+++ b/src/main/java/org/caosdb/server/database/backend/transaction/RetrieveParents.java
@@ -24,15 +24,18 @@
  */
 package org.caosdb.server.database.backend.transaction;
 
-import java.util.ArrayList;
+import java.util.LinkedList;
+import java.util.List;
 import org.apache.commons.jcs.access.behavior.ICacheAccess;
 import org.caosdb.server.caching.Cache;
 import org.caosdb.server.database.CacheableBackendTransaction;
-import org.caosdb.server.database.DatabaseUtils;
 import org.caosdb.server.database.backend.interfaces.RetrieveParentsImpl;
 import org.caosdb.server.database.exceptions.TransactionException;
 import org.caosdb.server.database.proto.VerySparseEntity;
+import org.caosdb.server.entity.EntityID;
 import org.caosdb.server.entity.EntityInterface;
+import org.caosdb.server.entity.RetrieveEntity;
+import org.caosdb.server.entity.wrapper.Parent;
 
 // TODO Problem with the caching.
 // When an old entity version has a parent which is deleted, the name is
@@ -47,9 +50,9 @@ import org.caosdb.server.entity.EntityInterface;
 // See also a failing test in caosdb-pyinttest:
 // tests/test_version.py::test_bug_cached_parent_name_in_old_version
 public class RetrieveParents
-    extends CacheableBackendTransaction<String, ArrayList<VerySparseEntity>> {
+    extends CacheableBackendTransaction<String, LinkedList<VerySparseEntity>> {
 
-  private static final ICacheAccess<String, ArrayList<VerySparseEntity>> cache =
+  private static final ICacheAccess<String, LinkedList<VerySparseEntity>> cache =
       Cache.getCache("BACKEND_EntityParents");
 
   /**
@@ -71,16 +74,26 @@ public class RetrieveParents
   }
 
   @Override
-  public ArrayList<VerySparseEntity> executeNoCache() throws TransactionException {
+  public LinkedList<VerySparseEntity> executeNoCache() throws TransactionException {
     final RetrieveParentsImpl t = getImplementation(RetrieveParentsImpl.class);
     return t.execute(this.entity.getId(), this.entity.getVersion().getId());
   }
 
   @Override
-  protected void process(final ArrayList<VerySparseEntity> t) throws TransactionException {
+  protected void process(final LinkedList<VerySparseEntity> t) throws TransactionException {
     this.entity.getParents().clear();
 
-    DatabaseUtils.parseParentsFromVerySparseEntity(this.entity, t);
+    parseParentsFromVerySparseEntity(this.entity, t);
+  }
+
+  private void parseParentsFromVerySparseEntity(
+      final EntityInterface entity, final List<VerySparseEntity> pars) {
+    for (final VerySparseEntity vsp : pars) {
+      final Parent p = new Parent(new RetrieveEntity(new EntityID(vsp.id)));
+      p.setName(vsp.name);
+      p.setDescription(vsp.description);
+      entity.addParent(p);
+    }
   }
 
   @Override
diff --git a/src/main/java/org/caosdb/server/database/backend/transaction/RetrieveProperties.java b/src/main/java/org/caosdb/server/database/backend/transaction/RetrieveProperties.java
index caa4b6cf15161516abbff650c9677642271aafe9..f9c11303b31ac81696873876b532f9db95f3dbac 100644
--- a/src/main/java/org/caosdb/server/database/backend/transaction/RetrieveProperties.java
+++ b/src/main/java/org/caosdb/server/database/backend/transaction/RetrieveProperties.java
@@ -29,7 +29,7 @@ import java.util.List;
 import org.apache.commons.jcs.access.behavior.ICacheAccess;
 import org.caosdb.server.caching.Cache;
 import org.caosdb.server.database.CacheableBackendTransaction;
-import org.caosdb.server.database.DatabaseUtils;
+import org.caosdb.server.database.backend.implementation.MySQL.DatabaseUtils;
 import org.caosdb.server.database.backend.interfaces.RetrievePropertiesImpl;
 import org.caosdb.server.database.exceptions.TransactionException;
 import org.caosdb.server.database.proto.ProtoProperty;
diff --git a/src/main/java/org/caosdb/server/database/backend/transaction/RetrieveSparseEntity.java b/src/main/java/org/caosdb/server/database/backend/transaction/RetrieveSparseEntity.java
index aabd490b0fb8a6b5e801f6132113726a9361d258..f1ba8354f98fb0f6716fcfe0a742a597b69dd0a3 100644
--- a/src/main/java/org/caosdb/server/database/backend/transaction/RetrieveSparseEntity.java
+++ b/src/main/java/org/caosdb/server/database/backend/transaction/RetrieveSparseEntity.java
@@ -27,7 +27,6 @@ package org.caosdb.server.database.backend.transaction;
 import org.apache.commons.jcs.access.behavior.ICacheAccess;
 import org.caosdb.server.caching.Cache;
 import org.caosdb.server.database.CacheableBackendTransaction;
-import org.caosdb.server.database.DatabaseUtils;
 import org.caosdb.server.database.backend.interfaces.RetrieveSparseEntityImpl;
 import org.caosdb.server.database.exceptions.TransactionException;
 import org.caosdb.server.database.proto.SparseEntity;
@@ -81,8 +80,10 @@ public class RetrieveSparseEntity extends CacheableBackendTransaction<String, Sp
 
   @Override
   protected void process(final SparseEntity t) throws TransactionException {
-    DatabaseUtils.parseFromSparseEntities(this.entity, t);
-    this.entity.setEntityStatus(EntityStatus.VALID);
+    if (t != null) {
+      this.entity.parseSparseEntity(t);
+      this.entity.setEntityStatus(EntityStatus.VALID);
+    }
   }
 
   @Override
diff --git a/src/main/java/org/caosdb/server/database/proto/FlatProperty.java b/src/main/java/org/caosdb/server/database/proto/FlatProperty.java
index b4f0f62a2e5f596219180140a4905f5b20abe2d3..b92d3def38d26f0f5f6cd6a0455d472b8f4f3ccb 100644
--- a/src/main/java/org/caosdb/server/database/proto/FlatProperty.java
+++ b/src/main/java/org/caosdb/server/database/proto/FlatProperty.java
@@ -26,19 +26,6 @@ import java.io.Serializable;
 
 public class FlatProperty implements Serializable {
 
-  public FlatProperty() {}
-
-  public FlatProperty(FlatProperty fp) {
-    id = fp.id;
-    value = fp.value;
-    status = fp.status;
-    idx = fp.idx;
-    name = fp.name;
-    desc = fp.desc;
-    type = fp.type;
-    collection = fp.collection;
-  }
-
   private static final long serialVersionUID = 6039288034435124195L;
   public Integer id = null;
   public String value = null;
diff --git a/src/main/java/org/caosdb/server/database/proto/ProtoProperty.java b/src/main/java/org/caosdb/server/database/proto/ProtoProperty.java
index c6cdbd5495dfbd596fe5ef564b557257706835cb..7a11cd4daf6369649a0205a5637d3e86fbafbffe 100644
--- a/src/main/java/org/caosdb/server/database/proto/ProtoProperty.java
+++ b/src/main/java/org/caosdb/server/database/proto/ProtoProperty.java
@@ -28,12 +28,6 @@ import java.util.List;
 public class ProtoProperty extends FlatProperty implements Serializable {
   private static final long serialVersionUID = 7731301985162924975L;
 
-  public ProtoProperty(FlatProperty fp) {
-    super(fp);
-  }
-
-  public ProtoProperty() {}
-
   public List<ProtoProperty> subProperties = null;
   public List<Object> collValues = null;
 }
diff --git a/src/main/java/org/caosdb/server/query/Backreference.java b/src/main/java/org/caosdb/server/query/Backreference.java
index 7d551fd45e761a54d2c2508dcbb1b98ffc72891c..b801ffaf396a3ba9f98531ca06fc274b05c70b96 100644
--- a/src/main/java/org/caosdb/server/query/Backreference.java
+++ b/src/main/java/org/caosdb/server/query/Backreference.java
@@ -23,7 +23,7 @@
 package org.caosdb.server.query;
 
 import static java.sql.Types.VARCHAR;
-import static org.caosdb.server.database.DatabaseUtils.bytes2UTF8;
+import static org.caosdb.server.database.backend.implementation.MySQL.DatabaseUtils.bytes2UTF8;
 
 import java.sql.CallableStatement;
 import java.sql.Connection;
diff --git a/src/main/java/org/caosdb/server/query/Conjunction.java b/src/main/java/org/caosdb/server/query/Conjunction.java
index 03b331242e239a26f108973ca7a37624ab80ea64..59dfd57b20ed8bce443e670e767dc42bb91ac6ac 100644
--- a/src/main/java/org/caosdb/server/query/Conjunction.java
+++ b/src/main/java/org/caosdb/server/query/Conjunction.java
@@ -22,7 +22,7 @@
  */
 package org.caosdb.server.query;
 
-import static org.caosdb.server.database.DatabaseUtils.bytes2UTF8;
+import static org.caosdb.server.database.backend.implementation.MySQL.DatabaseUtils.bytes2UTF8;
 
 import java.sql.CallableStatement;
 import java.sql.Connection;
diff --git a/src/main/java/org/caosdb/server/query/Disjunction.java b/src/main/java/org/caosdb/server/query/Disjunction.java
index edd2e6daf243cd25ea112fdbfb946f2b80ee80b1..925ef85952e2d31783a6f7447074d0384e508a98 100644
--- a/src/main/java/org/caosdb/server/query/Disjunction.java
+++ b/src/main/java/org/caosdb/server/query/Disjunction.java
@@ -22,7 +22,7 @@
  */
 package org.caosdb.server.query;
 
-import static org.caosdb.server.database.DatabaseUtils.bytes2UTF8;
+import static org.caosdb.server.database.backend.implementation.MySQL.DatabaseUtils.bytes2UTF8;
 
 import java.sql.CallableStatement;
 import java.sql.Connection;
diff --git a/src/main/java/org/caosdb/server/query/Negation.java b/src/main/java/org/caosdb/server/query/Negation.java
index cfdfd05e286030f525b8d4f3c291e2bdfb27b100..431124df7b995faf6aa493363a51095e7028b9b8 100644
--- a/src/main/java/org/caosdb/server/query/Negation.java
+++ b/src/main/java/org/caosdb/server/query/Negation.java
@@ -22,7 +22,7 @@
  */
 package org.caosdb.server.query;
 
-import static org.caosdb.server.database.DatabaseUtils.bytes2UTF8;
+import static org.caosdb.server.database.backend.implementation.MySQL.DatabaseUtils.bytes2UTF8;
 
 import java.sql.CallableStatement;
 import java.sql.Connection;
diff --git a/src/main/java/org/caosdb/server/query/POV.java b/src/main/java/org/caosdb/server/query/POV.java
index 0de160cdb6249ffaea10f4eeeafdf4884323a186..ebc35a16b1495accf8cd4a114dd688c2b2529c1b 100644
--- a/src/main/java/org/caosdb/server/query/POV.java
+++ b/src/main/java/org/caosdb/server/query/POV.java
@@ -25,7 +25,7 @@ package org.caosdb.server.query;
 import static java.sql.Types.DOUBLE;
 import static java.sql.Types.INTEGER;
 import static java.sql.Types.VARCHAR;
-import static org.caosdb.server.database.DatabaseUtils.bytes2UTF8;
+import static org.caosdb.server.database.backend.implementation.MySQL.DatabaseUtils.bytes2UTF8;
 
 import de.timmfitschen.easyunits.parser.ParserException;
 import java.sql.CallableStatement;
diff --git a/src/main/java/org/caosdb/server/query/Query.java b/src/main/java/org/caosdb/server/query/Query.java
index c4a458630456d057ccddf26c48def0e72ccf3789..abaca4365e54c21ee2ba8cf8bf7727fe746c7277 100644
--- a/src/main/java/org/caosdb/server/query/Query.java
+++ b/src/main/java/org/caosdb/server/query/Query.java
@@ -21,7 +21,7 @@
  */
 package org.caosdb.server.query;
 
-import static org.caosdb.server.database.DatabaseUtils.bytes2UTF8;
+import static org.caosdb.server.database.backend.implementation.MySQL.DatabaseUtils.bytes2UTF8;
 
 import java.io.Serializable;
 import java.sql.CallableStatement;
diff --git a/src/main/java/org/caosdb/server/query/SubProperty.java b/src/main/java/org/caosdb/server/query/SubProperty.java
index 8ff167eac1e045875576a75f3d922f5c6461c68e..d5ce923449b45cb45dab77e4c30b5d8b343e01e3 100644
--- a/src/main/java/org/caosdb/server/query/SubProperty.java
+++ b/src/main/java/org/caosdb/server/query/SubProperty.java
@@ -23,7 +23,7 @@
 package org.caosdb.server.query;
 
 import static java.sql.Types.VARCHAR;
-import static org.caosdb.server.database.DatabaseUtils.bytes2UTF8;
+import static org.caosdb.server.database.backend.implementation.MySQL.DatabaseUtils.bytes2UTF8;
 
 import java.sql.CallableStatement;
 import java.sql.Connection;
diff --git a/src/main/java/org/caosdb/server/utils/ResultSetIterator.java b/src/main/java/org/caosdb/server/utils/ResultSetIterator.java
index 0912d278c7158c9b7b75a585c2827d851951f29b..71429f1a704299555ab1d86be0695e3104be828d 100644
--- a/src/main/java/org/caosdb/server/utils/ResultSetIterator.java
+++ b/src/main/java/org/caosdb/server/utils/ResultSetIterator.java
@@ -1,6 +1,6 @@
 package org.caosdb.server.utils;
 
-import static org.caosdb.server.database.DatabaseUtils.bytes2UTF8;
+import static org.caosdb.server.database.backend.implementation.MySQL.DatabaseUtils.bytes2UTF8;
 
 import java.sql.ResultSet;
 import java.sql.SQLException;
diff --git a/src/test/java/org/caosdb/server/database/InsertTest.java b/src/test/java/org/caosdb/server/database/backend/implementation/MySQL/InsertTest.java
similarity index 98%
rename from src/test/java/org/caosdb/server/database/InsertTest.java
rename to src/test/java/org/caosdb/server/database/backend/implementation/MySQL/InsertTest.java
index 0484e623d914cd29b8a4527bbec9ec200e12af7f..03bd185c8884822f89f8ff323a1c32125b66f88b 100644
--- a/src/test/java/org/caosdb/server/database/InsertTest.java
+++ b/src/test/java/org/caosdb/server/database/backend/implementation/MySQL/InsertTest.java
@@ -20,10 +20,10 @@
  *
  * ** end header
  */
-package org.caosdb.server.database;
+package org.caosdb.server.database.backend.implementation.MySQL;
 
-import static org.caosdb.server.database.DatabaseUtils.deriveStage1Inserts;
-import static org.caosdb.server.database.DatabaseUtils.deriveStage2Inserts;
+import static org.caosdb.server.database.backend.implementation.MySQL.DatabaseUtils.deriveStage1Inserts;
+import static org.caosdb.server.database.backend.implementation.MySQL.DatabaseUtils.deriveStage2Inserts;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertFalse;
 import static org.junit.jupiter.api.Assertions.assertTrue;