diff --git a/src/Model/Geometry/Point.py b/src/Model/Geometry/Point.py
index a844e7d4080e4a222196d5e87fad860190ada990..f83731f60dc6fb4eb536eae5602266f8844daa5c 100644
--- a/src/Model/Geometry/Point.py
+++ b/src/Model/Geometry/Point.py
@@ -19,4 +19,4 @@ class Point(object):
         Returns:
             True if the point is named.
         """
-        return self._name.strip() == ""
+        return self._name.strip() != ""
diff --git a/src/Model/Geometry/ProfileXYZ.py b/src/Model/Geometry/ProfileXYZ.py
index de194fbe193aaa32817f70d9edd893589fc52c11..5485d63e8f75e1504cb87c196e31cf753ca50553 100644
--- a/src/Model/Geometry/ProfileXYZ.py
+++ b/src/Model/Geometry/ProfileXYZ.py
@@ -188,7 +188,9 @@ class ProfileXYZ(Profile):
         Returns:
             Projection of the points of the profile on a plane.
         """
-        if self.nb_points >= 3:
+        if self.nb_points < 3:
+            return np.array(np.nan)
+        else:
             first_named_point = None
             index_first_named_point = None
             last_named_point = None
@@ -227,8 +229,9 @@ class ProfileXYZ(Profile):
                     station_i = (normalized_direction_vec[0] * xi +
                                  normalized_direction_vec[1] * yi)
                     station.append(station_i)
-                    ret = np.array(station)
-                    constant = ret[index_first_named_point]
+
+                ret = np.array(station)
+                constant = ret[index_first_named_point]
             elif first_named_point is None:
                 vector = Vector1d(first_point_not_nan,
                                   last_point_not_nan)
@@ -246,8 +249,6 @@ class ProfileXYZ(Profile):
                 constant = ret[index_profile_z_min]
 
             return (ret - constant)
-        else:
-            return np.array(np.nan)
 
     def _first_point_not_nan(self):
         first_point = self._points[0]
diff --git a/src/Model/Geometry/Reach.py b/src/Model/Geometry/Reach.py
index 526716a4e11af09e3ad840b1437bcd56ea01d912..ea2c59a09f461a6092a10bb4d8fa58801c890ae9 100644
--- a/src/Model/Geometry/Reach.py
+++ b/src/Model/Geometry/Reach.py
@@ -230,6 +230,9 @@ class Reach:
         return (complete, incomplete)
 
     def _map_guidelines_points(self, func, _filter=None):
+        if len(self._guidelines) == 0:
+            _ = compute_guidelines()
+
         return list(
             # Map for each guideline
             map(
diff --git a/src/View/Geometry/GeometryWindow.py b/src/View/Geometry/GeometryWindow.py
index 0d858b2e8f73c0f93010bc40f0380f277ceb821c..7a045b5ad56741f759bf61d3bccefae2077a35c0 100644
--- a/src/View/Geometry/GeometryWindow.py
+++ b/src/View/Geometry/GeometryWindow.py
@@ -42,6 +42,7 @@ class GeometryWindow(QMainWindow, WindowToolKit):
         self.setup_model()
         self.setup_connections()
         self.setup_plot()
+        self.changed_slider_value()
 
     def setup_window(self):
         self.setWindowTitle(f"{self.ui.mainwindow_title} - {self._reach.name}")
@@ -55,9 +56,10 @@ class GeometryWindow(QMainWindow, WindowToolKit):
         self.tableView.setItemDelegate(qtableview_reach.Delegate())
 
     def setup_plot(self):
-        self.graphic_1()
-        self.graphic_2()
-        self.graphic_3()
+        if self._reach.number_profiles != 0:
+            self.graphic_1()
+            self.graphic_2()
+            self.graphic_3()
 
     def setup_connections(self):
         self.ui.btn_open.clicked.connect(self.open_file_dialog)
@@ -75,6 +77,22 @@ class GeometryWindow(QMainWindow, WindowToolKit):
         self.ui.btn_slider_down.clicked.connect(self.increment_value_slider)
         self.ui.btn_move_up.clicked.connect(self.changed_profile_slot)
 
+
+        # Profile selection when line change in table
+        self.tableView.selectionModel()\
+                      .selectionChanged\
+                      .connect(self.select_current_profile)
+
+        # Update plot when profile data change
+        self._tablemodel.dataChanged.connect(self.update_graphic_1)
+        self._tablemodel.dataChanged.connect(self.update_graphic_2)
+        self.tableView.selectionModel()\
+                      .selectionChanged\
+                      .connect(self.update_graphic_1)
+        self.tableView.selectionModel()\
+                      .selectionChanged\
+                      .connect(self.update_graphic_2)
+
     def open_file_dialog(self):
         options = QFileDialog.Options()
         DEFAULT_DIRECTORY = os.getenv("HOME")
@@ -105,20 +123,6 @@ class GeometryWindow(QMainWindow, WindowToolKit):
             self.graphic_2()
             self.graphic_3()
 
-            # Profile selection when line change in table
-            self.tableView.selectionModel()\
-                          .selectionChanged\
-                          .connect(self.select_current_profile)
-
-            # Update plot when profile data change
-            self._tablemodel.dataChanged.connect(self.update_graphic_1)
-            self._tablemodel.dataChanged.connect(self.update_graphic_2)
-            self.tableView.selectionModel()\
-                          .selectionChanged\
-                          .connect(self.update_graphic_1)
-            self.tableView.selectionModel()\
-                          .selectionChanged\
-                          .connect(self.update_graphic_2)
 
 
     def messagebox_profile_editing(self):
@@ -232,9 +236,13 @@ class GeometryWindow(QMainWindow, WindowToolKit):
             for x, y in zip(self._reach.get_x(), self._reach.get_y())
         ]
 
+
+        self.x_complete = self._reach.get_guidelines_x()
+        self.y_complete = self._reach.get_guidelines_y()
+
         self.line_gl_1 = self.ui.canvas_1.axes.plot(
-            self._reach.get_guidelines_x(),
-            self._reach.get_guidelines_y()
+            self.x_complete,
+            self.y_complete
         )
 
         self.plot_selected_1, = self.ui.canvas_1.axes.plot(
@@ -310,14 +318,18 @@ class GeometryWindow(QMainWindow, WindowToolKit):
         )
         self.after_plot_selected_2.set_visible(False)
 
-        try:
-            self.line_kp_zgl = [
+        kp = self._reach.get_kp()
+        self.line_kp_zgl = []
+        for z in self._reach.get_guidelines_z():
+            # Is incomplete guideline?
+            if len(z) != len(kp):
+                continue
+
+            self.line_kp_zgl.append(
                 self.ui.canvas_2.axes.plot(
-                    self._reach.get_kp(), i, lw=1.
-                ) for i in self._reach.get_guidelines_z()
-            ]
-        except:
-            print("Graphic 2: Z guidelines failed")
+                    kp, z, lw=1.
+                )
+            )
 
         self.line_kp_zmin, = self.ui.canvas_2.axes.plot(
             kp, z_min,
@@ -370,8 +382,8 @@ class GeometryWindow(QMainWindow, WindowToolKit):
                 self.line_kp_zgl[i][0].set_data(
                     kp, self._tablemodel.z_complete_guideline()[i]
                 )
-        except:
-            print("Failed to update graphic 2")
+        except Exception as e:
+            print(f"Failed to update graphic 2: {e}")
 
         self.tableView.model().blockSignals(False)
         self.ui.canvas_2.axes.autoscale_view(True, True, True)
@@ -491,11 +503,12 @@ class GeometryWindow(QMainWindow, WindowToolKit):
         gl = self._reach.profile(ind).name
         complete, incomplete = self._reach.compute_guidelines()
 
+        self.x_complete = []
+        color_scat_complete = []
+        self.x_incomplete = []
+        color_scat_incomplete = []
+
         try:
-            x_complete = []
-            color_scat_complete = []
-            x_incomplete = []
-            color_scat_incomplete = []
             for i, txt in enumerate(list(gl)):
                 if txt in complete:
                     annotate = self.ui.canvas_3.axes.annotate(
@@ -508,7 +521,7 @@ class GeometryWindow(QMainWindow, WindowToolKit):
                         size=10
                     )
                     self.annotation_3.append(annotate)
-                    x_complete.append([x[i], y[i]])
+                    self.x_complete.append([x[i], y[i]])
                     color_scat_complete.append(
                         self.color_complete[self.complete.index(txt)]
                     )
@@ -523,7 +536,7 @@ class GeometryWindow(QMainWindow, WindowToolKit):
                         size=10
                     )
                     self.annotation_3.append(annotate)
-                    x_incomplete.append([x[i], y[i]])
+                    self.x_incomplete.append([x[i], y[i]])
                     color_scat_incomplete.append(
                         self.color_incomplete[incomplete.index(txt)]
                     )
@@ -668,7 +681,7 @@ class GeometryWindow(QMainWindow, WindowToolKit):
         self.tableView.model().blockSignals(True)
 
         if len(self.tableView.selectedIndexes()) > 0:
-            row = self.index_selected_row
+            row = self.index_selected_row()
 
             self.ui.verticalSlider.setValue(row)
             self.select_plot_graphic_1(row)
@@ -715,7 +728,8 @@ class GeometryWindow(QMainWindow, WindowToolKit):
             self.select_plot_graphic_1(slider_value)
             self.select_plot_graphic_2(slider_value)
             self.select_row_profile_slider(slider_value)
-            self.tableView.model().blockSignals(False)
+
+        self.tableView.model().blockSignals(False)
 
     def increment_value_slider(self):
         if 0 <= self.ui.verticalSlider.value() < self._tablemodel.rowCount() - 1:
@@ -729,7 +743,7 @@ class GeometryWindow(QMainWindow, WindowToolKit):
         if len(self.tableView.selectedIndexes()) == 0:
             self._tablemodel.insertRows(self._tablemodel.rowCount(), 1)
         else:
-            row = self.index_selected_row
+            row = self.index_selected_row()
             self._tablemodel.insertRows(row + 1, 1)
 
         if self.filename is not None:
@@ -751,9 +765,12 @@ class GeometryWindow(QMainWindow, WindowToolKit):
         self.graphic_2()
         self.changed_slider_value()
 
-    @property
+
     def index_selected_row(self):
-        return self.tableView.selectedIndexes()[0].row()
+        return self.tableView\
+                   .selectionModel()\
+                   .selectedRows()[0]\
+                   .row()
 
     def sort_ascending(self):
         self._tablemodel.sort_profiles(True)
@@ -761,7 +778,7 @@ class GeometryWindow(QMainWindow, WindowToolKit):
         self.changed_slider_value()
 
         self.update_graphic_2()
-        self.update_graphic_3(self.index_selected_row)
+        self.update_graphic_3(self.index_selected_row())
 
     def sort_descending(self):
         self._tablemodel.sort_profiles(False)
@@ -770,10 +787,10 @@ class GeometryWindow(QMainWindow, WindowToolKit):
         self.changed_slider_value()
 
         self.update_graphic_2()
-        self.update_graphic_3(self.index_selected_row)
+        self.update_graphic_3(self.index_selected_row())
 
     def move_row_down(self):
-        row = self.index_selected_row
+        row = self.index_selected_row()
 
         if row < self._tablemodel.rowCount() - 1:
             self._tablemodel.moveRowDown(row)
@@ -796,7 +813,7 @@ class GeometryWindow(QMainWindow, WindowToolKit):
             self.update_graphic_2()
 
     def move_row_up(self):
-        row = self.index_selected_row
+        row = self.index_selected_row()
 
         if 0 < row <= self._tablemodel.rowCount() - 1:
             self._tablemodel.moveRowUp(row)
diff --git a/src/View/Main/ConfigureWindow.py b/src/View/Main/ConfigureWindow.py
index 1632fff305db60e78a6ccd323f92e6c44e8362c3..4988863b68b18690af531d02ec7f39ad9dbc5bea 100644
--- a/src/View/Main/ConfigureWindow.py
+++ b/src/View/Main/ConfigureWindow.py
@@ -159,8 +159,8 @@ class ConfigureWindow(ASubWindow, ListedSubWindow):
         self.close()
 
     def edit_solver(self):
-        indices = self.find(QTableView, "tableView_solver").selectionModel().selectedRows()
-        for index in indices:
+        indexes = self.find(QTableView, "tableView_solver").selectionModel().selectedRows()
+        for index in indexes:
             self.edit_solver = ConfigureAddSolverWindow(
                 data=self.solver_table_model.rows[index.row()],
                 parent=self