diff --git a/CHANGELOG.md b/CHANGELOG.md
index 87753bce3c0c3b9d9f85f1fcdb5634d1b2de656b..d79bb98bdfbd06539886f7e2583c83e4a417af43 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -21,5 +21,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
 * POV with the 'name' property, e.g. `FIND ENTITY WITH name = something`
   [caosdb-server#51](https://gitlab.com/caosdb/caosdb-server/-/issues/51)
 - Fixed several bugs when an Entity inherits from itself (#18, caosdb-server #85).
+- Bug in `updateEntity.sql` (when updating the primary name without a prior call
+  to `deleteEntityProperties`). Same thing for `deleteEntity`.
 
 ### Security ###
diff --git a/procedures/deleteEntity.sql b/procedures/deleteEntity.sql
index f8d676c5750e84b43ffeec70bf95387660761116..d66a7d7c22e290935a59e944e9200d3ad5909b4e 100644
--- a/procedures/deleteEntity.sql
+++ b/procedures/deleteEntity.sql
@@ -41,21 +41,29 @@ delimiter //
 CREATE PROCEDURE db_2_0.deleteEntity(in EntityID INT UNSIGNED)
 BEGIN
 
+    -- detele file properties
     DELETE FROM files where file_id=EntityID;
 
+    -- delete datatype stuff
     DELETE FROM data_type
         WHERE ( domain_id = 0
             AND entity_id = 0
             AND property_id = EntityID )
         OR datatype = EntityID;
-
     DELETE FROM collection_type
         WHERE domain_id = 0
         AND entity_id = 0
         AND property_id = EntityID;
 
-    DELETE FROM entities WHERE id=EntityID;
+    -- delete primary name (in case this is called without a prior call to deleteEntityProperties)
+    DELETE FROM name_data
+        WHERE domain_id = 0
+        AND entity_id = EntityID
+        AND property_id = 20;
+
+    DELETE FROM entities where id=EntityID;
 
+    -- clean up unused acl
     DELETE FROM entity_acl
         WHERE NOT EXISTS (
             SELECT 1 FROM entities
diff --git a/procedures/updateEntity.sql b/procedures/updateEntity.sql
index b067c251678017b3bba17fa5e4bf028e08d3f465..9bad90ab262cd1ff4b68b1384a238e424ce60825 100644
--- a/procedures/updateEntity.sql
+++ b/procedures/updateEntity.sql
@@ -99,8 +99,14 @@ BEGIN
             e.acl = ACLID 
         WHERE e.id = EntityID;
 
+    -- clean up primary name, because updateEntity might be called without a
+    -- prior call to deleteEntityProperties.
+    DELETE FROM name_data
+        WHERE domain_id = 0 AND entity_id = EntityID AND property_id = 20;
     IF EntityName IS NOT NULL THEN
-        INSERT INTO name_data (domain_id, entity_id, property_id, value, status, pidx) VALUES (0, EntityID, 20, EntityName, "FIX", 0);
+        INSERT INTO name_data
+                (domain_id, entity_id, property_id, value, status, pidx)
+            VALUES (0, EntityID, 20, EntityName, "FIX", 0);
     END IF;
 
     DELETE FROM data_type
diff --git a/tests/test_insert_update_delete.sql b/tests/test_insert_update_delete.sql
index 8da6bfc187d5bcb562d68d2f079715ddb1ba288e..a43e0283e0852b5c0eb51b9223fc53e8da4a3fe5 100644
--- a/tests/test_insert_update_delete.sql
+++ b/tests/test_insert_update_delete.sql
@@ -9,30 +9,29 @@ DELETE FROM feature_config WHERE _key = "ENTITY_VERSIONING";
 
 CALL entityACL(@ACLID1, "{acl1}");
 CALL entityACL(@ACLID2, "{acl2}");
-SELECT id into @TextDatatypeID FROM entities WHERE name ="TEXT" and role="DATATYPE";
+SELECT entity_id into @TextDatatypeID FROM name_data WHERE value ="TEXT";
 
 -- TESTS
 
 -- TEST insertEntity
-SELECT COUNT(id) INTO @x FROM entities WHERE id>100;
-SELECT tap.eq(@x, 0, "No entities");
+SELECT tap.eq(COUNT(id), 0, "No entities")
+    FROM entities WHERE id>=100;
 CALL insertEntity("EntityName", "EntityDesc", "RECORDTYPE", "{acl1}");
 
+SELECT tap.eq(COUNT(entity_id), 1, "Entity has been inserted")
+    FROM name_data WHERE value="EntityName";
 
-SELECT COUNT(id) INTO @x  FROM entities WHERE name="EntityName";
-SELECT tap.eq(@x, 1, "Entity has been inserted");
-
-SELECT acl INTO @x FROM entities WHERE name="EntityName";
-SELECT tap.eq(@x, @ACLID1, "correct acl id had been assigned");
+SELECT entity_id INTO @EntityID FROM name_data WHERE value="EntityName";
+SELECT tap.ok(@EntityID >= 100, "EntityID greater 99");
 
-SELECT id INTO @EntityID FROM entities WHERE name="EntityName";
-SELECT tap.ok(@EntityID > 100, "EntityID greater 100");
+SELECT tap.eq(acl, @ACLID1, "correct acl id had been assigned")
+    FROM entities WHERE id=@EntityID;
 
 
 -- TEST insertEntityProperty
 
 CALL insertEntity("AProperty", "APropDesc", "PROPERTY", "{acl1}");
-SELECT id INTO @PropID FROM entities WHERE name="AProperty";
+SELECT entity_id INTO @PropID FROM name_data WHERE value="AProperty";
 INSERT INTO data_type (domain_id, entity_id, property_id, datatype) VALUES (0, 0, @PropID, @TextDatatypeID);
 
 SELECT COUNT(*) INTO @x FROM null_data;
@@ -45,13 +44,17 @@ SELECT tap.eq(@x, 1, "One row in null_data table");
 
 CALL updateEntity(@EntityID, "NewEntityName", "NewEntityDesc", "RECORD", NULL, NULL, "{acl2}");
 
-SELECT COUNT(id) INTO @x FROM entities WHERE name="EntityName";
-SELECT tap.eq(@x, 0, "Old Entity name not present");
-SELECT COUNT(id) INTO @x FROM entities WHERE name="NewEntityName";
-SELECT tap.eq(@x, 1, "Entity name has been updated");
+SELECT tap.eq(COUNT(entity_id), 0, "Old Entity name not present")
+    FROM name_data WHERE value="EntityName";
+SELECT tap.eq(COUNT(entity_id), 1, "Entity name has been updated")
+    FROM name_data WHERE value="NewEntityName";
 
-SELECT acl INTO @x FROM entities WHERE name="NewEntityName";
-SELECT tap.eq(@x, @ACLID2, "acl has been updated");
+SELECT tap.eq(acl, @ACLID2, "acl has been updated")
+    FROM entities WHERE id=@EntityID;
+
+-- CALL updateEntity again an update the Name
+CALL updateEntity(@EntityID, "NewerEntityName", "NewerEntityDesc", "RECORD", NULL, NULL, "{acl2}");
+CALL updateEntity(@EntityID, "NewEntityName", "NewEntityDesc", "RECORD", NULL, NULL, "{acl2}");
 
 
 -- TEST deleteEntityProperties