diff --git a/src/main/java/caosdb/server/jobs/Job.java b/src/main/java/caosdb/server/jobs/Job.java
index 6a90d081e4700eea3c743ca37a918ef4624d6bca..ff214b977dfd870a9aa56b3e8efa4f12967b2083 100644
--- a/src/main/java/caosdb/server/jobs/Job.java
+++ b/src/main/java/caosdb/server/jobs/Job.java
@@ -188,17 +188,19 @@ public abstract class Job extends AbstractObservable implements Observer {
       if (ret != null) {
         return ret;
       }
-    } else if (version.startsWith("HEAD~") && getEntityById(id) != null) {
-      // if version is HEAD~{OFFSET} with {OFFSET} > 0 and the targeted entity is
-      // part of this request (i.e. is to be updated), the actual offset has to be
-      // reduced by 1. HEAD always denotes the entity@HEAD *after* the successful
-      // transaction.
-      int offset = Integer.parseInt(version.substring(5)) - 1;
-      if (offset == 0) {
-        // special case HEAD~1
-        resulting_version = "HEAD";
-      } else {
-        resulting_version = new StringBuilder().append("HEAD~").append(offset).toString();
+    } else if (version.startsWith("HEAD~")) {
+      EntityInterface entById = getEntityById(id);
+      if (entById != null && entById.getEntityStatus() != EntityStatus.VALID) {
+        // if version is HEAD~{OFFSET} with {OFFSET} > 0 and the targeted entity is is to be
+        // updated, the actual offset has to be reduced by 1. HEAD always denotes the entity@HEAD
+        // *after* the successful transaction, so that it is consistent with subsequent retrieves.
+        int offset = Integer.parseInt(version.substring(5)) - 1;
+        if (offset == 0) {
+          // special case HEAD~1
+          resulting_version = "HEAD";
+        } else {
+          resulting_version = new StringBuilder().append("HEAD~").append(offset).toString();
+        }
       }
     }