diff --git a/src/Model/Geometry/Profile.py b/src/Model/Geometry/Profile.py
index ee662308f33def332297ed0d450d552d74b30669..a04e1a8f15b5b540fa113892e8d08360552435e6 100644
--- a/src/Model/Geometry/Profile.py
+++ b/src/Model/Geometry/Profile.py
@@ -214,31 +214,17 @@ class Profile(object):
         self.points.insert(index, point)
         self._status.modified()
 
-    def delete(self, indexes: int):
-        """Delete points at index
-
-        Args:
-            indexes: List of index of points.
-
-        Returns:
-            Nothing.
-        """
-        points = set(
+    def delete_i(self, indexes: list):
+        self._points = list(
             map(
                 lambda e: e[1],
                 filter(
-                    lambda e: e[0] in indexes,
+                    lambda e: e[0] not in indexes,
                     enumerate(self.points)
                 )
             )
         )
 
-        self.points = list(
-            filter(
-                lambda p: p not in points,
-                self.points
-            )
-        )
         self._status.modified()
 
     def delete_points(self, points):
@@ -250,7 +236,7 @@ class Profile(object):
         Returns:
             Nothing.
         """
-        self.points = list(
+        self._points = list(
             filter(
                 lambda p: p not in points,
                 self.points
@@ -286,7 +272,7 @@ class Profile(object):
         elif column == 'z':
             def predicate(p): return p.z
 
-        self.points = sorted(
+        self._points = sorted(
             self.points,
             key=predicate,
             reverse=is_reversed
@@ -298,7 +284,7 @@ class Profile(object):
         if len(self.points) != len(indexes):
             logger.critical("Indexes list do not correspond to point list")
 
-        self.points = list(
+        self._points = list(
             map(
                 lambda x: x[1],
                 sorted(
diff --git a/src/Model/HydraulicStructures/Basic/HydraulicStructures.py b/src/Model/HydraulicStructures/Basic/HydraulicStructures.py
index 706aea6697bf032bd5c4ffca90bc6653e2e294d4..e7a5af5fa7c383624009fbd421a33675beea86a7 100644
--- a/src/Model/HydraulicStructures/Basic/HydraulicStructures.py
+++ b/src/Model/HydraulicStructures/Basic/HydraulicStructures.py
@@ -127,10 +127,6 @@ class BasicHS(SQLSubModel):
         return new
 
     def _db_save(self, execute, data=None):
-        execute(
-            "DELETE FROM hydraulic_structures_basic " +
-            f"WHERE id = {self.id}"
-        )
         hs_id = data['hs_id']
 
         sql = (
diff --git a/src/Model/HydraulicStructures/HydraulicStructures.py b/src/Model/HydraulicStructures/HydraulicStructures.py
index 5d9a747284d2541538a3d3f435112065f1af464c..c301439b891216e058011ceb21f402f9bc4ca415 100644
--- a/src/Model/HydraulicStructures/HydraulicStructures.py
+++ b/src/Model/HydraulicStructures/HydraulicStructures.py
@@ -172,6 +172,11 @@ class HydraulicStructure(SQLSubModel):
         execute(sql)
 
         data['hs_id'] = self.id
+        execute(
+            "DELETE FROM hydraulic_structures_basic " +
+            f"WHERE hs = {self.id}"
+        )
+
         for basic in self._data:
             basic._db_save(execute, data)
 
diff --git a/src/Model/InitialConditions/InitialConditions.py b/src/Model/InitialConditions/InitialConditions.py
index a71f3133d83d87b9a10c21589c5c031109f5ebe4..2d88ea688d1571dd06e0437e6249f982099af8d6 100644
--- a/src/Model/InitialConditions/InitialConditions.py
+++ b/src/Model/InitialConditions/InitialConditions.py
@@ -250,7 +250,7 @@ class InitialConditions(SQLSubModel):
         )
 
         if new._data is not None:
-            yield new
+            return new
 
     def _db_save(self, execute, data=None):
         ok = True
diff --git a/src/View/Geometry/Profile/UndoCommand.py b/src/View/Geometry/Profile/UndoCommand.py
index c1122a688b7889f563b504a69b0c3e005f9a9ca6..e1bf3ae8593aee207874bd7b8436fa402672af6f 100644
--- a/src/View/Geometry/Profile/UndoCommand.py
+++ b/src/View/Geometry/Profile/UndoCommand.py
@@ -93,7 +93,7 @@ class AddCommand(QUndoCommand):
         self._point = None
 
     def undo(self):
-        self._profile.delete([self._index])
+        self._profile.delete_i([self._index])
 
     def redo(self):
         if self._point is None:
@@ -119,7 +119,7 @@ class DelCommand(QUndoCommand):
             self._profile.insert_point(row, point)
 
     def redo(self):
-        self._profile.delete(self._rows)
+        self._profile.delete_i(self._rows)
 
 
 class SortCommand(QUndoCommand):
@@ -181,7 +181,7 @@ class PasteCommand(QUndoCommand):
 
     def undo(self):
         for ind in range(len(self._points)):
-            self._profile.delete([self._row])
+            self._profile.delete_i([self._row])
 
     def redo(self):
         for point in self._points:
diff --git a/src/View/Geometry/Profile/Window.py b/src/View/Geometry/Profile/Window.py
index 9fd3f1aa76a8b55562a20082fd456ec23c29a848..0b241d9497a71578ec3f9736b695500e1a280c98 100644
--- a/src/View/Geometry/Profile/Window.py
+++ b/src/View/Geometry/Profile/Window.py
@@ -135,16 +135,13 @@ class ProfileWindow(PamhyrWindow):
         self._tablemodel.blockSignals(False)
 
     def index_selected_row(self):
-        rows = self._tablemodel\
-            .selectionModel()\
-            .selectedRows()
+        table = self.find(QTableView, "tableView")
+        rows = table.selectionModel()\
+                    .selectedRows()
         if len(rows) == 0:
             return 0
 
-        return self._tablemodel\
-            .selectionModel()\
-            .selectedRows()[0]\
-            .row()
+        return rows[0].row()
 
     def add(self):
         table = self.find(QTableView, "tableView")
@@ -213,24 +210,24 @@ class ProfileWindow(PamhyrWindow):
 
         self.update_plot()
 
-    def copy(self):
-        rows = self._tablemodel\
-            .selectionModel()\
-            .selectedRows()
-        table = []
-        table.append(["x", "y", "z", "name"])
+    def _copy(self):
+        table = self.find(QTableView, "tableView")
+        rows = table.selectionModel().selectedRows()
+
+        data = []
+        data.append(["x", "y", "z", "name"])
 
         for row in rows:
             point = self._profile.point(row.row())
-            table.append(
+            data.append(
                 [
                     point.x, point.y, point.z, point.name
                 ]
             )
 
-        self.copyTableIntoClipboard(table)
+        self.copyTableIntoClipboard(data)
 
-    def paste(self):
+    def _paste(self):
         header, data = self.parseClipboardTable()
 
         if len(data) == 0:
@@ -245,10 +242,10 @@ class ProfileWindow(PamhyrWindow):
         self._tablemodel.paste(row, header, data)
         self.update_plot()
 
-    def undo(self):
+    def _undo(self):
         self._tablemodel.undo()
         self.update_plot()
 
-    def redo(self):
+    def _redo(self):
         self._tablemodel.redo()
         self.update_plot()
diff --git a/src/View/HydraulicStructures/PlotAC.py b/src/View/HydraulicStructures/PlotAC.py
index 9964686afe28b5fdb6120eb1123d7345366077a0..c3b68cefa63fde4e68aee2cbb415461be8e4f005 100644
--- a/src/View/HydraulicStructures/PlotAC.py
+++ b/src/View/HydraulicStructures/PlotAC.py
@@ -108,23 +108,27 @@ class PlotAC(PamhyrPlot):
     def update(self):
         if self.line_kp is None:
             self.draw()
-        else:
-            if self._current_reach is None or self._current_profile is None:
-                self.clear()
-                return
+            return
 
-            profile = self._current_profile
-            x = profile.get_station()
-            z = profile.z()
+        if self._current_reach is None or self._current_profile is None:
+            self.clear()
+            return
 
-            self.line_kp.set_data(x, z)
+        profile = self._current_profile
+        x = profile.get_station()
+        z = profile.z()
 
-            self.canvas.axes.set_xlim(
-                left=min(x), right=max(x)
-            )
-            self.canvas.figure.canvas.draw_idle()
+        self.line_kp.set_data(x, z)
+
+        self.canvas.axes.relim()
+        self.canvas.axes.autoscale_view()
+
+        self.canvas.figure.tight_layout()
+        self.canvas.figure.canvas.draw_idle()
 
     def clear(self):
         if self.line_kp is not None:
             self.line_kp.set_data([], [])
+
+        self.canvas.figure.tight_layout()
         self.canvas.figure.canvas.draw_idle()
diff --git a/src/View/HydraulicStructures/PlotKPC.py b/src/View/HydraulicStructures/PlotKPC.py
index d3070c88b2b1e96a7090a853fa36897dc3ff7141..47ef289c3a0ad483c9b6b17494445154149db97d 100644
--- a/src/View/HydraulicStructures/PlotKPC.py
+++ b/src/View/HydraulicStructures/PlotKPC.py
@@ -139,6 +139,10 @@ class PlotKPC(PamhyrPlot):
                 [self._current_profile.kp, self._current_profile.kp],
                 [self._current_profile.z_min(), self._current_profile.z_max()],
             )
+
+            self.canvas.axes.relim()
+            self.canvas.axes.autoscale_view()
+
             self.canvas.figure.canvas.draw_idle()
 
     def clear(self):