diff --git a/src/main/java/org/caosdb/server/jobs/core/CheckDatatypePresent.java b/src/main/java/org/caosdb/server/jobs/core/CheckDatatypePresent.java
index f9c7704c8bd0ff00214b41d5793c8fdb15bcc61a..53d99edacbab696f352abc2d0081bd2a5a8e9081 100644
--- a/src/main/java/org/caosdb/server/jobs/core/CheckDatatypePresent.java
+++ b/src/main/java/org/caosdb/server/jobs/core/CheckDatatypePresent.java
@@ -23,6 +23,7 @@
 package org.caosdb.server.jobs.core;
 
 import java.util.List;
+import java.util.Objects;
 import org.caosdb.server.database.exceptions.EntityDoesNotExistException;
 import org.caosdb.server.database.exceptions.EntityWasNotUniqueException;
 import org.caosdb.server.datatype.AbstractCollectionDatatype;
@@ -153,28 +154,41 @@ public final class CheckDatatypePresent extends EntityJob {
     checkPermission(datatype, EntityPermission.USE_AS_DATA_TYPE);
   }
 
+  private void checkIfOverride(final EntityInterface foreign) {
+    if (foreign.hasDatatype() && !foreign.getDatatype().equals(getEntity().getDatatype())) {
+      // is override!
+      getEntity().setDatatypeOverride(true);
+    } else if (!foreign.hasDatatype()) {
+      // non-matching reference datatype
+      if (getEntity().getDatatype() instanceof ReferenceDatatype2) {
+        final ReferenceDatatype2 datatype = (ReferenceDatatype2) getEntity().getDatatype();
+        if (!Objects.equals(foreign.getId(), datatype.getId())
+            && !(Objects.equals(foreign.getName(), datatype.getName())
+                && datatype.getId() == null)) {
+          getEntity().setDatatypeOverride(true);
+        }
+      } else {
+        getEntity().setDatatypeOverride(true);
+      }
+    }
+  }
+
   private void checkIfOverride() throws Message {
     if (getEntity().hasId() && getEntity().getId() > 0) {
       // get data type from database
       final EntityInterface foreign = retrieveValidSparseEntityById(getEntity().getId(), null);
+      checkIfOverride(foreign);
 
-      if (foreign.hasDatatype() && !foreign.getDatatype().equals(getEntity().getDatatype())) {
-        // is override!
-        getEntity().setDatatypeOverride(true);
-      }
     } else {
       // get data type from container
-      EntityInterface abstractProperty = null;
+      EntityInterface foreign = null;
       if (getEntity().hasId()) {
-        abstractProperty = getEntityById(getEntity().getId());
+        foreign = getEntityById(getEntity().getId());
       } else if (getEntity().hasName()) {
-        abstractProperty = getEntityByName(getEntity().getName());
+        foreign = getEntityByName(getEntity().getName());
       }
-      if (abstractProperty != null && abstractProperty.hasDatatype()) {
-        if (!getEntity().getDatatype().equals(abstractProperty.getDatatype())) {
-          // is override!
-          getEntity().setDatatypeOverride(true);
-        }
+      if (foreign != null) {
+        checkIfOverride(foreign);
       }
     }
   }
diff --git a/src/main/java/org/caosdb/server/jobs/core/CheckPropValid.java b/src/main/java/org/caosdb/server/jobs/core/CheckPropValid.java
index 390deedde211c0931eca1c3677ac5ff9c8ee9d8f..bc75a5b682c61448f324d96cc622cf012a174bbb 100644
--- a/src/main/java/org/caosdb/server/jobs/core/CheckPropValid.java
+++ b/src/main/java/org/caosdb/server/jobs/core/CheckPropValid.java
@@ -167,14 +167,5 @@ public class CheckPropValid extends EntityJob {
         child.setDescription(parent.getDescription());
       }
     }
-    if (!Objects.equal(child.getDatatype(), parent.getDatatype())) {
-      if (child.hasDatatype()
-          // FIXME why this?
-          && (!child.getDatatype().toString().equals("REFERENCE") || parent.hasDatatype())) {
-        child.setDatatypeOverride(true);
-      } else {
-        child.setDatatype(parent.getDatatype());
-      }
-    }
   }
 }