diff --git a/src/View/Results/PlotKPC.py b/src/View/Results/PlotKPC.py
index 71fa3aab795ba674ae6c5bdf87c3941bd1b28786..d6f5feae45aeea9dce7ae681d1aafa841f03324a 100644
--- a/src/View/Results/PlotKPC.py
+++ b/src/View/Results/PlotKPC.py
@@ -92,130 +92,69 @@ class PlotKPC(PamhyrPlot):
             self.draw_bottom_geometry(reach)
 
     def draw_bottom_with_bedload(self, reach):
-        kp = reach.geometry.get_kp()
-        z_min = reach.geometry.get_z_min()
-        z_max = reach.geometry.get_z_max()
+        self._bedrock = self.sl_compute_bedrock(reach)
 
-        initial_sl = self.sl_compute_initial(reach)
-        current_sl = self.sl_compute_current(reach)
+        kp = reach.geometry.get_kp()
+        z = self.sl_compute_current_z(reach)
 
-        max_sl_num = reduce(
-            lambda acc, sl: max(acc, len(sl)),
-            current_sl, 0
+        self.line_bottom, = self.canvas.axes.plot(
+            kp, z,
+            linestyle="solid", lw=1.,
+            color=self.color_plot_river_bottom,
         )
 
-        sl_init, sl = self.sl_completed_layers(
-            initial_sl, current_sl, max_sl_num
+        self._river_bottom = z
+
+    def sl_compute_bedrock(self, reach):
+        z_min = reach.geometry.get_z_min()
+        sl = self.sl_compute_initial(reach)
+
+        z = list(
+            map(
+                lambda z, sl: reduce(
+                    lambda z, h: z - h[0],
+                    sl, z
+                ),
+                z_min,          #  Original geometry
+                sl              #  Original sediment layers
+            )
         )
 
-        z_sl = self.sl_apply_z_min_to_initial(sl_init, z_min)
-        d_sl = self.sl_compute_diff(sl_init, sl)
+        return z
 
-        final_z_sl = self.sl_apply_diff(reach, z_sl, d_sl)
-        final_z_sl = list(reversed(final_z_sl))
+    def sl_compute_current_z(self, reach):
+        z_br = self._bedrock
+        sl = self.sl_compute_current(reach)
 
-        self.line_kp_sl = []
-        for i, z in enumerate(final_z_sl):
-            self.line_kp_sl.append(None)
-            self.line_kp_sl[i], = self.canvas.axes.plot(
-                kp, z,
-                linestyle=(
-                    "solid" if i == len(final_z_sl) - 1
-                    else self.linestyle[1:][i // len(self.colors)]
+        z = list(
+            map(
+                lambda z, sl: reduce(
+                    lambda z, h: z + h[0],
+                    sl, z
                 ),
-                lw=1.,
-                color=(
-                    self.color_plot_river_bottom if i == len(final_z_sl) - 1
-                    else self.colors[i % len(self.colors)]
-                )
+                z_br,           #  Bedrock elevation
+                sl              #  Current sediment layers
             )
+        )
 
-        self._initial_sl = initial_sl
-        self._river_bottom = final_z_sl[-1]
+        return z
 
     def sl_compute_initial(self, reach):
         """
         Get SL list for profile p at initial time (initial data)
         """
-        return list(
-            map(
-                lambda p: p.get_ts_key(min(self._timestamps), "sl")[0],
-                reach.profiles
-            )
+        return map(
+            lambda p: p.get_ts_key(min(self._timestamps), "sl")[0],
+            reach.profiles
         )
 
     def sl_compute_current(self, reach):
         """
         Get SL list for profile p at current time
         """
-        return list(
-            map(
-                lambda p: p.get_ts_key(self._current_timestamp, "sl")[0],
-                reach.profiles
-            )
-        )
-
-    def sl_completed_layers(self, initial_sl, current_sl, max_sl_num):
-        sl = []
-        sl_init = []
-        for i in range(max_sl_num):
-            cur = []
-            cur_init = []
-            for current, initial in zip(current_sl, initial_sl):
-                if i < len(initial_sl):
-                    cur.append(current[i][0])
-                    cur_init.append(initial[i][0])
-                else:
-                    cur.append(0)
-                    cur_init.append(0)
-            sl.append(cur)
-            sl_init.append(cur_init)
-
-        return sl_init, sl
-
-    def sl_apply_z_min_to_initial(self, sl_init, z_min):
-        """
-        Compute sediment layer from initial data in function to profile
-        z_min
-        """
-        return reduce(
-            lambda acc, v: acc + [
-                list(
-                    map(
-                        lambda x, y: y - x,
-                        v, acc[-1]
-                    )
-                )
-            ],
-            sl_init, [z_min]
-        )
-
-    def sl_compute_diff(self, sl_init, sl):
-        return list(
-            map(
-                lambda ln0, lni: list(
-                    map(
-                        lambda z0, zi: z0 - zi,
-                        ln0, lni
-                    )
-                ),
-                sl_init, sl
-            )
-        )
-
-    def sl_apply_diff(self, reach, z_sl, d_sl):
-        f = list(map(lambda p: 0, reach.profiles))
-
-        return list(
-            map(
-                lambda z, d: list(
-                    map(
-                        lambda zn, dn: zn - dn,
-                        z, d
-                    )
-                ),
-                z_sl, d_sl + [f]  # HACK: Add dummy data for last layer
-            )
+        return map(
+            lambda p: p.get_ts_key(self._current_timestamp, "sl")[0],
+            reach.profiles
         )
 
     def draw_bottom_geometry(self, reach):
@@ -398,27 +337,14 @@ class PlotKPC(PamhyrPlot):
     def update_bottom_with_bedload(self):
         reach = self.results.river.reach(self._current_reach_id)
         kp = reach.geometry.get_kp()
-        z_min = reach.geometry.get_z_min()
+        z = self.sl_compute_current_z(reach)
 
-        initial_sl = self._initial_sl
-        current_sl = self.sl_compute_current(reach)
+        self.line_bottom.remove()
 
-        max_sl_num = reduce(
-            lambda acc, sl: max(acc, len(sl)),
-            current_sl, 0
-        )
-
-        sl_init, sl = self.sl_completed_layers(
-            initial_sl, current_sl, max_sl_num
+        self.line_bottom, = self.canvas.axes.plot(
+            kp, z,
+            linestyle="solid", lw=1.,
+            color=self.color_plot_river_bottom,
         )
 
-        z_sl = self.sl_apply_z_min_to_initial(sl_init, z_min)
-        d_sl = self.sl_compute_diff(sl_init, sl)
-
-        final_z_sl = self.sl_apply_diff(reach, z_sl, d_sl)
-        final_z_sl = list(reversed(final_z_sl))
-
-        for i, z in enumerate(final_z_sl):
-            self.line_kp_sl[i].set_data(kp, z)
-
-        self._river_bottom = final_z_sl[-1]
+        self._river_bottom = z