diff --git a/src/Model/Geometry/Reach.py b/src/Model/Geometry/Reach.py
index 087b0a876aa2485eadfe6e335c646937e37168d4..7f86b224204a7a2ba928e80af1c6bf6613ea8e78 100644
--- a/src/Model/Geometry/Reach.py
+++ b/src/Model/Geometry/Reach.py
@@ -49,6 +49,13 @@ class Reach:
     def profiles(self):
         return self._profiles.copy()
 
+    def get_profiles_from_kp(self, kp):
+        return list(
+            filter(
+                lambda p: p.kp == kp, self._profiles
+            )
+        )
+
     @property
     def number_profiles(self):
         """
diff --git a/src/Model/InitialConditions/InitialConditions.py b/src/Model/InitialConditions/InitialConditions.py
index 142f099687fc3bf2052e162bda946d88ea319e1a..8bb2f4ea86da508772faa9af4121192f93cd3c36 100644
--- a/src/Model/InitialConditions/InitialConditions.py
+++ b/src/Model/InitialConditions/InitialConditions.py
@@ -44,6 +44,31 @@ class Data(object):
 
         return val
 
+    def _update_get_min(self):
+        profile = self._reach.reach.get_profiles_from_kp(self._kp)
+        if len(profile) > 0:
+            min = profile[0].z_min()
+        else:
+            min = 0.0
+
+        return min
+
+    def _update_from_kp(self):
+        min = self._update_get_min()
+        self._elevation = min - self._draft
+
+    def _update_from_elevation(self):
+        min = self._update_get_min()
+        self._draft = self._elevation - min
+
+    def _update_from_draft(self):
+        min = self._update_get_min()
+        self._elevation = self._draft + min
+
+    def _update_from_flow(self):
+        min = self._update_get_min()
+        print("TODO")
+
     def __setitem__(self, key, value):
         if key == "name":
             self._name = str(value)
@@ -51,14 +76,19 @@ class Data(object):
             self._comment = str(value)
         elif key == "kp":
             self._kp = float(value)
+            self._update_from_kp()
         elif key == "speed":
             self._speed = float(value)
+            # Not supposed to be modified
         elif key == "flow":
             self._flow = float(value)
+            self._update_from_flow()
         elif key == "elevation":
             self._elevation = float(value)
+            self._update_from_elevation()
         elif key == "draft":
             self._draft = float(value)
+            self._update_from_draft()
 
         self._status.modified()