diff --git a/src/Model/Geometry/Reach.py b/src/Model/Geometry/Reach.py
index ad82d3c88cebdb82c74a7029976428e84303f2fd..04272f23a3c3773449378325be3e90b7c988d76c 100644
--- a/src/Model/Geometry/Reach.py
+++ b/src/Model/Geometry/Reach.py
@@ -63,19 +63,6 @@ class Reach:
         """
         return self._profiles
 
-    def add_profile(self, index):
-        """Add a new profile at the end of profiles list
-
-        Returns:
-            Nothing.
-        """
-        nb_profile = self.number_profiles
-        profile = ProfileXYZ()
-        profile.num = nb_profile + 1
-
-        self._profiles.insert(profile, index + 1)
-        self._update_profile_numbers()
-
     def _update_profile_numbers(self):
         """Update profiles index
 
@@ -284,7 +271,6 @@ class Reach:
             reverse=is_reversed
         )
 
-    @trace
     @timer
     def sort_with_indexes(self, indexes: list):
         if len(self._profiles) != len(indexes):
diff --git a/src/View/Geometry/GeometryWindow.py b/src/View/Geometry/GeometryWindow.py
index b97840201bf349917c826ece448bb0e0c7c88a1f..7948e380bdb80e1f01dd434cccdae8ae4c94e1bb 100644
--- a/src/View/Geometry/GeometryWindow.py
+++ b/src/View/Geometry/GeometryWindow.py
@@ -366,15 +366,10 @@ class GeometryWindow(QMainWindow, WindowToolKit):
 
     def insert_row(self):
         if len(self.tableView.selectedIndexes()) == 0:
-            self._tablemodel.insertRows(self._tablemodel.rowCount(), 1)
+            self._tablemodel.insert_row(self._tablemodel.rowCount())
         else:
             row = self.index_selected_row()
-            self._tablemodel.insertRows(row + 1, 1)
-
-        if self.filename is not None:
-            self.plot_xy()
-            self.plot_kpc()
-            self.select_current_profile()
+            self._tablemodel.insert_row(row + 1)
 
     def delete_row(self):
         rows = list(set(
diff --git a/src/View/Geometry/qtableview_reach.py b/src/View/Geometry/qtableview_reach.py
index 1c5a6c4d79b1998c4c17ff41a009e6467bf09585..6ad89bbfa08c000c71ffdfccd3a16ab705401a47 100644
--- a/src/View/Geometry/qtableview_reach.py
+++ b/src/View/Geometry/qtableview_reach.py
@@ -138,10 +138,14 @@ class PandasModelEditable(QAbstractTableModel):
             return Qt.ItemIsEditable | flg
 
     # @QtCore.pyqtSlot()
-    def insertRows(self, row, count, parent=QModelIndex()):
-        self.beginInsertRows(parent, row, row + count - 1)
+    def insert_row(self, row, parent=QModelIndex()):
+        self.beginInsertRows(parent, row, row - 1)
 
-        self._reach.add_profile(row)
+        self._undo_stack.push(
+            AddCommand(
+                self._reach, row
+            )
+        )
 
         self.endInsertRows()
         self.layoutChanged.emit()
@@ -158,7 +162,6 @@ class PandasModelEditable(QAbstractTableModel):
         self.endRemoveRows()
         self.layoutChanged.emit()
 
-    @trace
     def sort_profiles(self, _reverse):
         self.layoutAboutToBeChanged.emit()