diff --git a/src/Model/Geometry/Reach.py b/src/Model/Geometry/Reach.py
index 9c113582cfadd3887413ee4b9ff78cbd13d0c8ea..ad82d3c88cebdb82c74a7029976428e84303f2fd 100644
--- a/src/Model/Geometry/Reach.py
+++ b/src/Model/Geometry/Reach.py
@@ -284,6 +284,7 @@ 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/ReachUndoCommand.py b/src/View/Geometry/ReachUndoCommand.py
index 1c1171c03ec5ad71f4510ea30038255cf160fe4e..a96b71eb54fcebb8a566e0ddbdd2b57bc9661e9c 100644
--- a/src/View/Geometry/ReachUndoCommand.py
+++ b/src/View/Geometry/ReachUndoCommand.py
@@ -61,26 +61,25 @@ class DelCommand(QUndoCommand):
         self._reach.delete([self._index])
 
 class SortCommand(QUndoCommand):
-    @timer
-    def __init__(self, reach, old, new):
+    def __init__(self, reach, _reverse):
         QUndoCommand.__init__(self)
 
         self._reach = reach
+        self._reverse = _reverse
+
+        old = self._reach.profiles
+        self._reach.sort(self._reverse)
+        new = self._reach.profiles
+
         self._indexes = list(
             map(
                 lambda p: old.index(p),
                 new
             )
         )
-        self._rindexes = list(
-            map(
-                lambda p: new.index(p),
-                old
-            )
-        )
 
     def undo(self):
         self._reach.sort_with_indexes(self._indexes)
 
     def redo(self):
-        self._reach.sort_with_indexes(self._rindexes)
+        self._reach.sort(self._reverse)
diff --git a/src/View/Geometry/qtableview_reach.py b/src/View/Geometry/qtableview_reach.py
index ea931d7444e1fb487c69c68472b2fbfd93f1f19a..1c5a6c4d79b1998c4c17ff41a009e6467bf09585 100644
--- a/src/View/Geometry/qtableview_reach.py
+++ b/src/View/Geometry/qtableview_reach.py
@@ -103,7 +103,6 @@ class PandasModelEditable(QAbstractTableModel):
                         value
                     )
                 )
-                self._reach.profile(index.row()).name = value
 
             if index.column() == 1:
                 self._undo_stack.push(
@@ -113,7 +112,6 @@ class PandasModelEditable(QAbstractTableModel):
                         value
                     )
                 )
-                self._reach.profile(index.row()).kp = value
 
             self.dataChanged.emit(index, index)
             self.layoutChanged.emit()
@@ -160,10 +158,15 @@ class PandasModelEditable(QAbstractTableModel):
         self.endRemoveRows()
         self.layoutChanged.emit()
 
+    @trace
     def sort_profiles(self, _reverse):
         self.layoutAboutToBeChanged.emit()
 
-        self._reach.sort(_reverse)
+        self._undo_stack.push(
+            SortCommand(
+                self._reach, _reverse
+            )
+        )
 
         self.layoutAboutToBeChanged.emit()
         self.layoutChanged.emit()