diff --git a/src/View/Geometry/Profile/Table.py b/src/View/Geometry/Profile/Table.py
index 1dd251576960e86fa1cf4b796cedfcca6b476546..c23eeb6f803b115b9c95ef8017e3b2316a19a1e4 100644
--- a/src/View/Geometry/Profile/Table.py
+++ b/src/View/Geometry/Profile/Table.py
@@ -233,7 +233,7 @@ class GeometryProfileTableModel(PamhyrTableModel):
         self.endMoveRows()
         self.layoutChanged.emit()
 
-    def move_down(self, row_to_move, parent=QModelIndex()):
+    def move_down(self, row, parent=QModelIndex()):
         if row > self._data.number_points:
             return
 
diff --git a/src/View/Geometry/Profile/Window.py b/src/View/Geometry/Profile/Window.py
index ee4f53839d1338e2908ef185279fb6e941a5ac30..96468c7741589b943231fb5ef1c5af8e76bcf620 100644
--- a/src/View/Geometry/Profile/Window.py
+++ b/src/View/Geometry/Profile/Window.py
@@ -129,7 +129,11 @@ class ProfileWindow(PamhyrWindow):
             self.find(QAction, action)\
                 .triggered.connect(actions[action])
 
-        self._tablemodel.dataChanged.connect(self.update_plot)
+        self._tablemodel.dataChanged.connect(self.update)
+
+    def update(self):
+        self.update_plot()
+        self._propagate_update(key="geometry")
 
     def update_plot(self):
         self._tablemodel.blockSignals(True)
@@ -155,7 +159,7 @@ class ProfileWindow(PamhyrWindow):
         else:
             row = self.index_selected_row()
             self._tablemodel.insert_row(row + 1)
-        self.update_plot()
+        self.update()
 
     def delete(self):
         table = self.find(QTableView, "tableView")
@@ -169,23 +173,23 @@ class ProfileWindow(PamhyrWindow):
 
         if len(rows) > 0:
             self._tablemodel.remove_rows(rows)
-            self.update_plot()
+            self.update()
 
     def sort_X_ascending(self):
         self._tablemodel.sort('x', order=Qt.AscendingOrder)
-        self.update_plot()
+        self.update()
 
     def sort_X_descending(self):
         self._tablemodel.sort('x', order=Qt.DescendingOrder)
-        self.update_plot()
+        self.update()
 
     def sort_Y_ascending(self):
         self._tablemodel.sort('y', order=Qt.AscendingOrder)
-        self.update_plot()
+        self.update()
 
     def sort_Y_descending(self):
         self._tablemodel.sort('y', order=Qt.DescendingOrder)
-        self.update_plot()
+        self.update()
 
     def move_down(self):
         rows = list(
@@ -199,7 +203,7 @@ class ProfileWindow(PamhyrWindow):
             if row < self._tablemodel.rowCount() - 1:
                 self._tablemodel.move_down(row)
 
-        self.update_plot()
+        self.update()
 
     def move_up(self):
         rows = list(
@@ -213,7 +217,7 @@ class ProfileWindow(PamhyrWindow):
             if 0 < row:
                 self._tablemodel.move_up(row)
 
-        self.update_plot()
+        self.update()
 
     def _copy(self):
         table = self.find(QTableView, "tableView")
@@ -245,12 +249,12 @@ class ProfileWindow(PamhyrWindow):
 
         row = self.index_selected_row()
         self._tablemodel.paste(row, header, data)
-        self.update_plot()
+        self.update()
 
     def _undo(self):
         self._tablemodel.undo()
-        self.update_plot()
+        self.update()
 
     def _redo(self):
         self._tablemodel.redo()
-        self.update_plot()
+        self.update()
diff --git a/src/View/InitialConditions/PlotDKP.py b/src/View/InitialConditions/PlotDKP.py
index d7a442864e507a4baca1e28f7c0b3811349a242b..d29356fa01fc1d0b2d9480db5a113189287c078b 100644
--- a/src/View/InitialConditions/PlotDKP.py
+++ b/src/View/InitialConditions/PlotDKP.py
@@ -16,6 +16,8 @@
 
 # -*- coding: utf-8 -*-
 
+import logging
+
 from tools import timer
 from View.Tools.PamhyrPlot import PamhyrPlot
 
@@ -23,6 +25,8 @@ from PyQt5.QtCore import (
     QCoreApplication
 )
 
+logger = logging.getLogger()
+
 _translate = QCoreApplication.translate
 
 
@@ -80,9 +84,20 @@ class PlotDKP(PamhyrPlot):
             )
 
             z_min = self.data.reach.reach.get_z_min()
+            geometry_kp = self.data.reach.reach.get_kp()
+
+            filtred_elevation = list(
+                map(
+                    lambda x: elevation[x[0]],
+                    filter(
+                        lambda x: x[1] in geometry_kp,
+                        enumerate(kp)
+                    )
+                )
+            )
 
             self.collection = self.canvas.axes.fill_between(
-                kp, z_min, elevation,
+                geometry_kp, z_min, filtred_elevation,
                 color=self.color_plot_river_water_zone,
                 alpha=0.7, interpolate=True
             )
diff --git a/src/View/InitialConditions/Window.py b/src/View/InitialConditions/Window.py
index 1696e361fe94bafd7c4abe2e8ed8cc7b97613e3d..fb3361bc47d0923d05644ea0e4584c26488605bf 100644
--- a/src/View/InitialConditions/Window.py
+++ b/src/View/InitialConditions/Window.py
@@ -181,10 +181,20 @@ class InitialConditionsWindow(PamhyrWindow):
                     .selectedRows()[0]\
                     .row()
 
+    def update(self):
+        self._update_plot()
+        self._propagate_update(key="initial_condition")
+
     def _update_plot(self):
         self.plot_1.draw()
         self.plot_2.draw()
 
+    def _propagated_update(self, key=None):
+        if key != "geometry":
+            return
+
+        self.update()
+
     def index_selected_rows(self):
         table = self.find(QTableView, f"tableView")
         return list(
@@ -204,7 +214,7 @@ class InitialConditionsWindow(PamhyrWindow):
         else:
             self._table.add(rows[0])
 
-        self._update_plot()
+        self._update()
 
     def delete(self):
         rows = self.index_selected_rows()
@@ -212,48 +222,48 @@ class InitialConditionsWindow(PamhyrWindow):
             return
 
         self._table.delete(rows)
-        self._update_plot()
+        self._update()
 
     def sort(self):
         self._table.sort(False)
-        self._update_plot()
+        self._update()
 
     def move_up(self):
         row = self.index_selected_row()
         self._table.move_up(row)
-        self._update_plot()
+        self._update()
 
     def move_down(self):
         row = self.index_selected_row()
         self._table.move_down(row)
-        self._update_plot()
+        self._update()
 
     def _copy(self):
         logger.info("TODO: copy")
-        self._update_plot()
+        self._update()
 
     def _paste(self):
         logger.info("TODO: paste")
-        self._update_plot()
+        self._update()
 
     def _undo(self):
         self._table.undo()
-        self._update_plot()
+        self._update()
 
     def _redo(self):
         self._table.redo()
-        self._update_plot()
+        self._update()
 
     def generate_growing_constante_height(self):
         dlg = HeightDialog(trad=self._trad, parent=self)
         if dlg.exec():
             value = dlg.value
             self._table.generate("growing", value)
-            self._update_plot()
+            self._update()
 
     def generate_discharge(self):
         dlg = DischargeDialog(trad=self._trad, parent=self)
         if dlg.exec():
             value = dlg.value
             self._table.generate("discharge", value)
-            self._update_plot()
+            self._update()
diff --git a/src/View/MainWindow.py b/src/View/MainWindow.py
index 4f32e70a989bda7cb1f56cea2b764dcfe5545131..231cf1b376a0a4059a232f0fd99b0524b27b1021 100644
--- a/src/View/MainWindow.py
+++ b/src/View/MainWindow.py
@@ -351,7 +351,10 @@ class ApplicationWindow(QMainWindow, ListedSubWindow, WindowToolKit):
         logger.debug(f"Propagation keys: {self._propagation_keys}")
 
     def _do_propagate_update(self):
-        for key in self._propagation_keys:
+        keys = self._propagation_keys.copy()
+        self._init_propagation_keys()
+
+        for key in keys:
             if key == "window_list":
                 logger.debug(f"Update window list")
                 self._do_update_window_list()
@@ -361,8 +364,6 @@ class ApplicationWindow(QMainWindow, ListedSubWindow, WindowToolKit):
             for _, window in self.sub_win_list:
                 window._propagated_update(key=key)
 
-        self._init_propagation_keys()
-
     #########
     # MODEL #
     #########