diff --git a/src/Model/River.py b/src/Model/River.py
index 99cf8d2116be0757151a08a9e6b142e0b7a9fde7..9a8da7814fc6f17116bf20eab4944280aa7777fc 100644
--- a/src/Model/River.py
+++ b/src/Model/River.py
@@ -16,7 +16,7 @@
 
 # -*- coding: utf-8 -*-
 
-from tools import flatten
+from tools import flatten, logger_exception
 
 from Model.Tools.PamhyrDB import SQLSubModel
 
@@ -326,6 +326,8 @@ class River(Graph, SQLSubModel):
         return new
 
     def _db_save(self, execute, data=None):
+        self._db_save_delete_artefact(execute, data)
+
         objs = (self._nodes + self._edges)
         objs.append(self._boundary_condition)
         objs.append(self._initial_conditions)
@@ -341,6 +343,32 @@ class River(Graph, SQLSubModel):
         self._save_submodel(execute, objs, data)
         return True
 
+    def _db_save_delete_artefact(self, execute, data=None):
+        self._db_save_delete_artefact_where_not_id(
+            execute, data,
+            "river_node", self._nodes
+        )
+        self._db_save_delete_artefact_where_not_id(
+            execute, data,
+            "river_reach", self._edges
+
+        )
+
+    def _db_save_delete_artefact_where_not_id(self, execute, data,
+                                              table:str, els:list):
+        try:
+            execute(
+                f"DELETE FROM {table} " +
+                "WHERE " +
+                " OR ".join(
+                    map(
+                        lambda n: f"( id <> {n.id} )", els
+                    )
+                )
+            )
+        except Exception as e:
+            logger_exception(e)
+
     @property
     def boundary_condition(self):
         return self._boundary_condition