diff --git a/src/View/Geometry/UpdateKPDialog.py b/src/View/Geometry/UpdateKPDialog.py
new file mode 100644
index 0000000000000000000000000000000000000000..08abf1f45d8dcd5583110080958754b29195d5fe
--- /dev/null
+++ b/src/View/Geometry/UpdateKPDialog.py
@@ -0,0 +1,143 @@
+# MeshingDialog.py -- Pamhyr
+# Copyright (C) 2023-2024  INRAE
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <https://www.gnu.org/licenses/>.
+
+# -*- coding: utf-8 -*-
+
+from View.Tools.PamhyrWindow import PamhyrDialog
+
+from PyQt5.QtGui import (
+    QKeySequence,
+)
+
+from PyQt5.QtCore import (
+    Qt, QVariant, QAbstractTableModel,
+)
+
+from PyQt5.QtWidgets import (
+    QDialogButtonBox, QComboBox, QUndoStack, QShortcut,
+    QDoubleSpinBox,
+)
+
+
+class UpdateKPDialog(PamhyrDialog):
+    _pamhyr_ui = "UpdateKPOptions"
+    _pamhyr_name = "UpdateKP"
+
+    def __init__(self, reach, trad=None, parent=None):
+        super(UpdateKPDialog, self).__init__(
+            title=trad[self._pamhyr_name],
+            trad=trad,
+            options=[],
+            parent=parent
+        )
+
+        self._reach = reach
+        self._profiles = None
+
+        self._init_default_values()
+
+    def _init_default_values(self):
+        self._space_step = 50.0
+        self._lplan = False
+        self._lm = "3"
+        self._linear = False
+        self._begin_cs = -1
+        self._end_cs = -1
+        self._begin_dir = "un"
+        self._end_dir = "np"
+        self._origin = self._reach.profile(0)
+        self._origin_value = self._reach.profile(0).kp
+
+        self._init_default_values_profiles()
+        self._init_default_values_guidelines()
+
+    def _init_default_values_profiles(self):
+        profiles = self.profiles
+
+        self.combobox_add_items("comboBox_origin", profiles)
+
+        self.find(QComboBox, "comboBox_origin").currentIndexChanged.connect(
+            self.changed_profile)
+
+    def changed_profile(self):
+        origin = self.get_combobox_text("comboBox_origin")
+        self.set_double_spin_box("doubleSpinBox_origin",
+                                 self._reach.profile(self.profiles.index(origin)).kp)
+
+    @property
+    def profiles(self):
+        if self._profiles is None:
+            self._profiles = list(
+                map(
+                    lambda p: self._profile_name(p),
+                    self._reach.profiles
+                )
+            )
+
+        return self._profiles
+
+    def _profile_name(self, profile):
+        name = profile.name
+
+        if name == "":
+            name = f"{profile.kp}"
+        else:
+            name += f" ({profile.kp})"
+
+        return name
+
+    def _init_default_values_guidelines(self):
+        gl, _ = self._reach.compute_guidelines()
+        gl = list(gl)
+
+        bgl = ['un'] + gl + ['np']
+        egl = ['un'] + gl + ['np']
+
+        self.combobox_add_items("comboBox_begin_gl", bgl)
+        self.combobox_add_items("comboBox_end_gl", egl)
+
+        self.set_combobox_text("comboBox_begin_gl", self._begin_dir)
+        self.set_combobox_text("comboBox_end_gl", self._end_dir)
+
+    @property
+    def origin(self):
+        return self._origin
+
+    @property
+    def origin_value(self):
+        return self._origin_value
+
+    @property
+    def begin_dir(self):
+        return self._begin_dir
+
+    @property
+    def end_dir(self):
+        return self._end_dir
+
+    def accept(self):
+        origin = self.get_combobox_text("comboBox_origin")
+        self._origin = self.profiles.index(origin)
+
+        self._origin_value = self.get_double_spin_box("doubleSpinBox_origin")
+
+        self._begin_dir = self.get_combobox_text("comboBox_begin_gl")
+        self._end_dir = self.get_combobox_text("comboBox_end_gl")
+
+        super().accept()
+
+    def reject(self):
+        self.close()
diff --git a/src/View/ui/UpdateKPOptions.ui b/src/View/ui/UpdateKPOptions.ui
new file mode 100644
index 0000000000000000000000000000000000000000..881491bad9fac97dbf4c6a70017cf771630df7d1
--- /dev/null
+++ b/src/View/ui/UpdateKPOptions.ui
@@ -0,0 +1,137 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>Dialog</class>
+ <widget class="QDialog" name="Dialog">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>340</width>
+    <height>204</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>Dialog</string>
+  </property>
+  <layout class="QGridLayout" name="gridLayout_4">
+   <item row="1" column="0">
+    <widget class="QDialogButtonBox" name="buttonBox">
+     <property name="orientation">
+      <enum>Qt::Horizontal</enum>
+     </property>
+     <property name="standardButtons">
+      <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
+     </property>
+    </widget>
+   </item>
+   <item row="0" column="0">
+    <widget class="QGroupBox" name="groupBox_3">
+     <property name="title">
+      <string>Distance computation</string>
+     </property>
+     <layout class="QGridLayout" name="gridLayout_3">
+      <item row="3" column="1">
+       <widget class="QComboBox" name="comboBox_end_gl">
+        <property name="enabled">
+         <bool>true</bool>
+        </property>
+       </widget>
+      </item>
+      <item row="3" column="0">
+       <widget class="QLabel" name="label_6">
+        <property name="enabled">
+         <bool>true</bool>
+        </property>
+        <property name="text">
+         <string>Second guide-line</string>
+        </property>
+       </widget>
+      </item>
+      <item row="2" column="1">
+       <widget class="QComboBox" name="comboBox_begin_gl">
+        <property name="enabled">
+         <bool>true</bool>
+        </property>
+       </widget>
+      </item>
+      <item row="2" column="0">
+       <widget class="QLabel" name="label_5">
+        <property name="enabled">
+         <bool>true</bool>
+        </property>
+        <property name="text">
+         <string>First guide-line</string>
+        </property>
+       </widget>
+      </item>
+      <item row="0" column="1">
+       <widget class="QComboBox" name="comboBox_origin"/>
+      </item>
+      <item row="0" column="0">
+       <widget class="QLabel" name="label_3">
+        <property name="text">
+         <string>Origin</string>
+        </property>
+       </widget>
+      </item>
+      <item row="1" column="0">
+       <widget class="QLabel" name="label_4">
+        <property name="text">
+         <string>Origin value</string>
+        </property>
+       </widget>
+      </item>
+      <item row="1" column="1">
+       <widget class="QDoubleSpinBox" name="doubleSpinBox_origin">
+        <property name="decimals">
+         <number>4</number>
+        </property>
+        <property name="minimum">
+         <double>-99999999.000000000000000</double>
+        </property>
+        <property name="maximum">
+         <double>99999999.000000000000000</double>
+        </property>
+       </widget>
+      </item>
+     </layout>
+    </widget>
+   </item>
+  </layout>
+ </widget>
+ <resources/>
+ <connections>
+  <connection>
+   <sender>buttonBox</sender>
+   <signal>accepted()</signal>
+   <receiver>Dialog</receiver>
+   <slot>accept()</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>248</x>
+     <y>254</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>157</x>
+     <y>274</y>
+    </hint>
+   </hints>
+  </connection>
+  <connection>
+   <sender>buttonBox</sender>
+   <signal>rejected()</signal>
+   <receiver>Dialog</receiver>
+   <slot>reject()</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>316</x>
+     <y>260</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>286</x>
+     <y>274</y>
+    </hint>
+   </hints>
+  </connection>
+ </connections>
+</ui>