diff --git a/CHANGELOG.md b/CHANGELOG.md
index a12fdf048e9eb9e555a7cd18b692abe69f5bf421..f3f91ee218efceca40e597823706b39a2ac714ec 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -31,6 +31,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
 * [caosdb-server#174](https://gitlab.indiscale.com/caosdb/src/caosdb-server/-/issues/174)
   GRPC-API: Server should gracefully handle non-file entities with file-like
   attributes.
+* [caosdb-server#217](https://gitlab.indiscale.com/caosdb/src/caosdb-server/-/issues/217)
+  Server gets list property datatype wrong if description is updated.
+* [caosdb-server#221](https://gitlab.indiscale.com/caosdb/src/caosdb-server/-/issues/221)
+  Unknown error during update of property leaving out datatype.
 
 ### Security
 
diff --git a/src/main/java/org/caosdb/server/transaction/WriteTransaction.java b/src/main/java/org/caosdb/server/transaction/WriteTransaction.java
index 7b9bc7495a67aa458ad40f25435cb0af7da290d7..ed3ac86163a2a6d1bc594ca80ee57a793cc845a7 100644
--- a/src/main/java/org/caosdb/server/transaction/WriteTransaction.java
+++ b/src/main/java/org/caosdb/server/transaction/WriteTransaction.java
@@ -399,16 +399,17 @@ public class WriteTransaction extends Transaction<WritableContainer>
         || newEntity.hasDatatype() ^ oldEntity.hasDatatype()) {
       needPermissions.add(EntityPermission.UPDATE_DATA_TYPE);
       updatetable = true;
+    } else {
+      newEntity.setDatatypeOverride(oldEntity.isDatatypeOverride());
     }
 
     // entity role
-    if (newEntity.hasRole()
+    if (!(newEntity instanceof Property && oldEntity instanceof Property)
+            && newEntity.hasRole()
             && oldEntity.hasRole()
             && !newEntity.getRole().equals(oldEntity.getRole())
         || newEntity.hasRole() ^ oldEntity.hasRole()) {
-      if (!(newEntity instanceof Property && oldEntity instanceof Property)) {
-        needPermissions.add(EntityPermission.UPDATE_ROLE);
-      }
+      needPermissions.add(EntityPermission.UPDATE_ROLE);
       updatetable = true;
     }
 
@@ -417,7 +418,7 @@ public class WriteTransaction extends Transaction<WritableContainer>
       try {
         newEntity.parseValue();
         oldEntity.parseValue();
-      } catch (Message m) {
+      } catch (NullPointerException|Message m) {
         // ignore, parsing is handled elsewhere
       }
       if (!newEntity.getValue().equals(oldEntity.getValue())) {
@@ -436,6 +437,8 @@ public class WriteTransaction extends Transaction<WritableContainer>
         || newEntity.hasName() ^ oldEntity.hasName()) {
       needPermissions.add(EntityPermission.UPDATE_NAME);
       updatetable = true;
+    } else {
+      newEntity.setNameOverride(oldEntity.isNameOverride());
     }
 
     // entity description
@@ -445,6 +448,8 @@ public class WriteTransaction extends Transaction<WritableContainer>
         || newEntity.hasDescription() ^ oldEntity.hasDescription()) {
       needPermissions.add(EntityPermission.UPDATE_DESCRIPTION);
       updatetable = true;
+    } else {
+      newEntity.setDescOverride(oldEntity.isDescOverride());
     }
 
     // file properties
diff --git a/src/test/java/org/caosdb/server/transaction/UpdateTest.java b/src/test/java/org/caosdb/server/transaction/UpdateTest.java
index 2e8465eac53e98b54df3108a4824caaf88fa1129..6837eaa16b12b055882febe7f98383727813b307 100644
--- a/src/test/java/org/caosdb/server/transaction/UpdateTest.java
+++ b/src/test/java/org/caosdb/server/transaction/UpdateTest.java
@@ -276,7 +276,7 @@ public class UpdateTest {
     newEntity.setDescription("New description.");
 
     new WriteTransaction(null).deriveUpdate(newEntity, oldEntity);
-    // check if newEntity's Property is QUALIFIED.
-    assertEquals(QUALIFIED, newEntity.getProperties().get(0).getEntityStatus());
+    // check if newEntity's Property VALID.
+    assertEquals(VALID, newEntity.getProperties().get(0).getEntityStatus());
   }
 }