diff --git a/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/DatabaseUtils.java b/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/DatabaseUtils.java
index 20d433895c0fafdc20bb8ffe4cba750d85c5c8af..c123b467e2d7bbf39a23b72296d05be1b3fc4f28 100644
--- a/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/DatabaseUtils.java
+++ b/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/DatabaseUtils.java
@@ -297,7 +297,7 @@ public class DatabaseUtils {
     LinkedList<ProtoProperty> result = new LinkedList<>();
     Map<String, ProtoProperty> replacements = new HashMap<>();
     for (ProtoProperty pp : properties) {
-      if (pp.status.equals(StatementStatus.REPLACEMENT.toString())) {
+      if (pp.status.equals(ReplacementStatus.REPLACEMENT.name())) {
         replacements.put(pp.value, null);
       }
     }
@@ -322,7 +322,7 @@ public class DatabaseUtils {
       }
     }
     for (ProtoProperty pp : properties) {
-      if (pp.status.equals(StatementStatus.REPLACEMENT.toString())) {
+      if (pp.status.equals(ReplacementStatus.REPLACEMENT.name())) {
         replace(pp, replacements.get(pp.value), isHead);
       }
       if (pp.collValues != null) {
@@ -342,6 +342,11 @@ public class DatabaseUtils {
     return result;
   }
 
+  /*
+   * This replace function is used during the retrieval of properties. It is
+   * basically the opposite of the Replacement class. It copies the information
+   * from the replacement object back into the Property.
+   */
   private static void replace(ProtoProperty pp, ProtoProperty replacement, boolean isHead) {
     if (replacement == null) {
       if (isHead) {
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 f3977068dedc937261f1da4d2b859168d20eb18e..b57719f51adc61dcb0d4a43f33b90600c148e1b8 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
@@ -46,7 +46,6 @@ import org.caosdb.server.datatype.ReferenceValue;
 import org.caosdb.server.datatype.SingleValue;
 import org.caosdb.server.entity.EntityID;
 import org.caosdb.server.entity.EntityInterface;
-import org.caosdb.server.entity.StatementStatus;
 import org.caosdb.server.entity.wrapper.Property;
 
 public class MySQLInsertEntityProperties extends MySQLTransaction
@@ -116,10 +115,10 @@ public class MySQLInsertEntityProperties extends MySQLTransaction
   }
 
   private void insertStages(
-      final List<Property> stage1Inserts, final EntityID domain, final EntityID entity)
+      final List<Property> inserts, final EntityID domain, final EntityID entity)
       throws TransactionException {
 
-    for (final Property property : stage1Inserts) {
+    for (final Property property : inserts) {
 
       // prepare flat property
       final FlatProperty fp = new FlatProperty();
@@ -129,10 +128,15 @@ public class MySQLInsertEntityProperties extends MySQLTransaction
       fp.idx = property.getPIdx();
       fp.status = property.getStatementStatus().name();
 
-      if (property.getStatementStatus() == StatementStatus.REPLACEMENT) {
-        table = Table.reference_data;
+      if (property.getStatementStatus() == ReplacementStatus.REPLACEMENT) {
+        // special treatment: swap value and id. This is part of the back-end specification for the
+        // representation of replacement.
+
+        // value should be the
         fp.value = fp.id.toString();
+
         fp.id = ((ReferenceValue) property.getValue()).getId().toInteger();
+        table = Table.reference_data;
       } else {
 
         if (property.hasUnit()) {
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
index fa2fb7cb2d9ebab466c9ee1594ba7b19eff2dd52..61e431bab60b9973f6aa1f0b824ffc3e3b60744e 100644
--- 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
@@ -22,9 +22,21 @@ 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.StatementStatusInterface;
 import org.caosdb.server.entity.wrapper.Property;
 
+enum ReplacementStatus implements StatementStatusInterface {
+  REPLACEMENT
+}
+/**
+ * A wrapper of {@link Property} objects used by the back-end implementation for the MySQL/MariaDB
+ * back-end.
+ *
+ * <p>This class helps to transform deeply nested properties, properties with overridden data types,
+ * and much more to the flat (row-like) representation used internally by the back-end (which is an
+ * implementation detail of the back-end or part of the non-public API of the back-end from that
+ * point of view).
+ */
 public class Replacement extends Property {
 
   public Property replacement;
@@ -44,7 +56,7 @@ public class Replacement extends Property {
 
     replacement.setDomain(p.getDomainEntity());
     replacement.setId(new EntityID());
-    replacement.setStatementStatus(StatementStatus.REPLACEMENT);
+    replacement.setStatementStatus(ReplacementStatus.REPLACEMENT);
     replacement.setValue(new ReferenceValue(p.getId()));
     replacement.setPIdx(0);
   }
diff --git a/src/main/java/org/caosdb/server/entity/Entity.java b/src/main/java/org/caosdb/server/entity/Entity.java
index 843449ce833cdf4634435204ed33e9af59c0529f..614397c50526606176fc50b06e2f07e76cbfb9ff 100644
--- a/src/main/java/org/caosdb/server/entity/Entity.java
+++ b/src/main/java/org/caosdb/server/entity/Entity.java
@@ -421,7 +421,7 @@ public abstract class Entity extends AbstractObservable implements EntityInterfa
     }
   }
 
-  private StatementStatus statementStatus = null;
+  private StatementStatusInterface statementStatus = null;
 
   /**
    * statementStatus getter.
@@ -429,7 +429,7 @@ public abstract class Entity extends AbstractObservable implements EntityInterfa
    * @return
    */
   @Override
-  public StatementStatus getStatementStatus() {
+  public StatementStatusInterface getStatementStatus() {
     return this.statementStatus;
   }
 
@@ -439,7 +439,7 @@ public abstract class Entity extends AbstractObservable implements EntityInterfa
    * @return
    */
   @Override
-  public void setStatementStatus(final StatementStatus statementStatus) {
+  public void setStatementStatus(final StatementStatusInterface statementStatus) {
     this.statementStatus = statementStatus;
   }
 
diff --git a/src/main/java/org/caosdb/server/entity/EntityInterface.java b/src/main/java/org/caosdb/server/entity/EntityInterface.java
index d97970ded1cea441c833922ee131e4bdd2cbc97a..ba77b5c4ac8b5c833d2046dec506655531ff62cb 100644
--- a/src/main/java/org/caosdb/server/entity/EntityInterface.java
+++ b/src/main/java/org/caosdb/server/entity/EntityInterface.java
@@ -57,9 +57,9 @@ public interface EntityInterface
 
   public abstract boolean hasId();
 
-  public abstract StatementStatus getStatementStatus();
+  public abstract StatementStatusInterface getStatementStatus();
 
-  public abstract void setStatementStatus(StatementStatus statementStatus);
+  public abstract void setStatementStatus(StatementStatusInterface statementStatus);
 
   public abstract void setStatementStatus(String statementStatus);
 
diff --git a/src/main/java/org/caosdb/server/entity/StatementStatus.java b/src/main/java/org/caosdb/server/entity/StatementStatus.java
index 0a7971751bffcdfc0323835433fc006bf5269ec9..83d0c57e4ece787e53efa2e149ff0910e1850ed5 100644
--- a/src/main/java/org/caosdb/server/entity/StatementStatus.java
+++ b/src/main/java/org/caosdb/server/entity/StatementStatus.java
@@ -33,17 +33,11 @@ package org.caosdb.server.entity;
  * href="../../../../../specification/RecordType.html">the documentation of RecordTypes</a> for more
  * information.
  *
- * <p>2. Marking an entity as a ``REPLACEMENT`` which is needed for flat representation of deeply
- * nested properties. This constant is only used for internal processes and has no meaning in the
- * API. That is also the reason why this enum is not called "Importance". Apart from that, in most
- * cases its meaning is identical to the importance of an entity.
- *
  * @author Timm Fitschen (t.fitschen@indiscale.com)
  */
-public enum StatementStatus {
+public enum StatementStatus implements StatementStatusInterface {
   OBLIGATORY,
   RECOMMENDED,
   SUGGESTED,
   FIX,
-  REPLACEMENT
 }
diff --git a/src/main/java/org/caosdb/server/entity/StatementStatusInterface.java b/src/main/java/org/caosdb/server/entity/StatementStatusInterface.java
new file mode 100644
index 0000000000000000000000000000000000000000..d1596afda95a4836dcd84fc79b67cf2e0b4f12a4
--- /dev/null
+++ b/src/main/java/org/caosdb/server/entity/StatementStatusInterface.java
@@ -0,0 +1,29 @@
+/*
+ * 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.entity;
+
+/**
+ * Interface for the StatementStatus. This may be used by back-end implementations to use back-end
+ * specific implementations (e.g.
+ * org.caosdb.server.database.backend.implementation.MySQL.ReplacementStatus).
+ */
+public interface StatementStatusInterface {
+  public String name();
+}
diff --git a/src/main/java/org/caosdb/server/entity/wrapper/EntityWrapper.java b/src/main/java/org/caosdb/server/entity/wrapper/EntityWrapper.java
index f23408df30fb9f56c72a0f319f7b4b7a52e8214e..b294a17e5ea68ee02e529735ec39a748bc4f2c83 100644
--- a/src/main/java/org/caosdb/server/entity/wrapper/EntityWrapper.java
+++ b/src/main/java/org/caosdb/server/entity/wrapper/EntityWrapper.java
@@ -38,7 +38,7 @@ import org.caosdb.server.entity.EntityInterface;
 import org.caosdb.server.entity.FileProperties;
 import org.caosdb.server.entity.Message;
 import org.caosdb.server.entity.Role;
-import org.caosdb.server.entity.StatementStatus;
+import org.caosdb.server.entity.StatementStatusInterface;
 import org.caosdb.server.entity.Version;
 import org.caosdb.server.entity.container.ParentContainer;
 import org.caosdb.server.entity.container.PropertyContainer;
@@ -112,13 +112,13 @@ public abstract class EntityWrapper implements EntityInterface {
   }
 
   @Override
-  public StatementStatus getStatementStatus() {
+  public StatementStatusInterface getStatementStatus() {
     return this.entity.getStatementStatus();
   }
 
   @Override
-  public void setStatementStatus(final StatementStatus statementStatus) {
-    this.entity.setStatementStatus(statementStatus);
+  public void setStatementStatus(final StatementStatusInterface replacement) {
+    this.entity.setStatementStatus(replacement);
   }
 
   @Override
diff --git a/src/main/java/org/caosdb/server/grpc/CaosDBToGrpcConverters.java b/src/main/java/org/caosdb/server/grpc/CaosDBToGrpcConverters.java
index 1b70a729e4950f8aaf838100397b0338e7d798c0..8ab8b0579bd6d0a32976ac6e2e28e776f00d4850 100644
--- a/src/main/java/org/caosdb/server/grpc/CaosDBToGrpcConverters.java
+++ b/src/main/java/org/caosdb/server/grpc/CaosDBToGrpcConverters.java
@@ -75,6 +75,7 @@ import org.caosdb.server.entity.MagicTypes;
 import org.caosdb.server.entity.Message;
 import org.caosdb.server.entity.Role;
 import org.caosdb.server.entity.StatementStatus;
+import org.caosdb.server.entity.StatementStatusInterface;
 import org.caosdb.server.entity.container.ParentContainer;
 import org.caosdb.server.entity.container.RetrieveContainer;
 import org.caosdb.server.entity.wrapper.Property;
@@ -359,8 +360,8 @@ public class CaosDBToGrpcConverters {
     return convertScalarValue(v.getWrapped()).build();
   }
 
-  private Importance convert(final StatementStatus statementStatus) {
-    switch (statementStatus) {
+  private Importance convert(final StatementStatusInterface statementStatus) {
+    switch ((StatementStatus) statementStatus) {
       case FIX:
         return Importance.IMPORTANCE_FIX;
       case OBLIGATORY: