diff --git a/src/simudator/gui/signal_graphics_item.py b/src/simudator/gui/signal_graphics_item.py
index f8a48c42edd064a71b14d6ee8e00d3eb9288b25f..37398aa9efab93e6310640fbbea3eaa21408fe71 100644
--- a/src/simudator/gui/signal_graphics_item.py
+++ b/src/simudator/gui/signal_graphics_item.py
@@ -3,7 +3,7 @@ import math
 
 from qtpy import QtCore
 from qtpy.QtCore import QPoint, QPointF, QRectF, Qt
-from qtpy.QtGui import QCursor, QPainter
+from qtpy.QtGui import QCursor, QPainter, QPen
 from qtpy.QtWidgets import QGraphicsLineItem, QGraphicsSceneMouseEvent, QGraphicsWidget
 
 from simudator.gui.color_scheme import ColorScheme
@@ -44,7 +44,7 @@ class SignalGraphicsItem(QGraphicsWidget):
         self.points: list[QPointF] = []
         self.lines = []
 
-        self.line_segments: list[LineSegment] = []
+        self._line_segments: list[LineSegment] = []
 
         # Variables and flags for handling mouse events
         self.left_click = False
@@ -57,34 +57,40 @@ class SignalGraphicsItem(QGraphicsWidget):
         #           |---- port
         #           |
         # port -----|
+
         start_point = self.start_port.getPoint()
         end_point = self.end_port.getPoint()
-        self.points.append(start_point)
-        half_x = (start_point.x() + end_point.x()) / 2
-        self.points.append(QPointF(half_x, start_point.y()))
-        self.points.append(QPointF(half_x, end_point.y()))
-        self.points.append(end_point)
-        self.drawSignal()
+        self._init_line_points(start_point, end_point)
 
         # local_start = self.mapFromItem(start_port, start_point)
         # local_end = self.mapFromItem(end_port, end_point)
         local_start = self.mapFromScene(start_point)
         local_end = self.mapFromScene(end_point)
 
-        self.line_segments.append(LineSegment(local_start, local_end, self))
-        """
-        self.line_segments.append(
-            LineSegment(
-                QPointF(half_x, start_point.y()), QPointF(half_x, end_point.y()), self
-            )
-        )
-        self.line_segments.append(
-            LineSegment(QPointF(half_x, end_point.y()), end_point, self)
-        )"""
+        self._init_line_points(start_point, end_point)
+
+        self.drawSignal()
 
         # Used to lock layout
         self.is_locked = False
 
+    def _init_line_points(self, start_point: QPointF, end_point: QPointF) -> None:
+        """ """
+        # TODO: work on self._points
+
+        #           |---- port
+        #           |
+        # port -----|
+
+        half_x = (start_point.x() + end_point.x()) / 2
+
+        self.points: list[QPointF] = []
+
+        self.points.append(start_point)
+        self.points.append(QPointF(half_x, start_point.y()))
+        self.points.append(QPointF(half_x, end_point.y()))
+        self.points.append(end_point)
+
     def reset(self) -> None:
         """
         Reset the visual representation of the signal to what it looked
@@ -121,14 +127,17 @@ class SignalGraphicsItem(QGraphicsWidget):
         to another segment at its end points, except for the two end segments
         which are connected to module ports.
         """
-        for line in self.line_segments:
-            line.paint(QPainter(), None, None)
-        return
+
         # Remove old lines from the GUI
         while self.lines:
             item = self.lines.pop()
             item.setParentItem(None)
 
+        # Remove old lines form the GUI
+        while self._line_segments:
+            item = self._line_segments.pop()
+            item.setParentItem(None)
+
         # Draw lines from the first to the second point, from the second
         # to the third point and so on
         prev_point = self.points[0]
@@ -139,9 +148,11 @@ class SignalGraphicsItem(QGraphicsWidget):
             y1 = prev_point.y()
             x2 = point.x()
             y2 = point.y()
-            line = QGraphicsLineItem(x1, y1, x2, y2, self)
-            line.setPen(ColorScheme.Signal)
-            self.lines.append(line)
+            # line = QGraphicsLineItem(x1, y1, x2, y2, self)
+            # line.setPen(ColorScheme.Signal)
+            segment = LineSegment(prev_point, point, self)
+            self._line_segments.append(segment)
+            # self.lines.append(line)
             prev_point = point
 
     def splitLine(self, start_point_index: int, end_point_index: int) -> None:
@@ -205,7 +216,7 @@ class SignalGraphicsItem(QGraphicsWidget):
             event.ignore()
 
         # Save whether the pressed line segment is vertical or horisontal
-        # for convenience288.5
+        # for convenience
         if line_start.x() == line_end.x():
             self.last_line_vertical = True
         elif line_start.y() == line_end.y():
@@ -464,29 +475,50 @@ class LineSegment(QGraphicsWidget):
         self, start_pos: QPointF, end_pos: QPointF, parent: SignalGraphicsItem
     ):
         super().__init__(parent)
-        start_pos = self.mapFromItem(parent, start_pos)
-        end_pos = self.mapFromItem(parent, end_pos)
+
+        self._parent = parent
+
         self._start_pos = start_pos
         self._end_pos = end_pos
 
-        # Vertical line
-        if self._start_pos.x() == self._end_pos.x():
-            x = self._start_pos.x()
-            y = min(self._start_pos.y(), self._end_pos.y())
-            w = 10
-            h = max(self._start_pos.y(), self._end_pos.y()) - y
+        self._calc_area(start_pos, end_pos)
 
-        # Horizontal line
-        else:
-            x = min(self._start_pos.x(), self._end_pos.x())
-            y = self._start_pos.y()
-            w = max(self._start_pos.y(), self._end_pos.y()) - x
-            h = 10
+    def _calc_area(self, start_pos: QPointF, end_pos: QPointF):
+
+        # start_pos = self.mapFromScene(start_pos)
+        # end_pos = self.mapFromScene(end_pos)
+
+        self._start_pos = start_pos
+        self._end_pos = end_pos
+
+        top_left = QPointF(
+            min(self._start_pos.x(), self._end_pos.x()),
+            min(self._start_pos.y(), self._end_pos.y()),
+        )
+        width = max(self._start_pos.x(), self._end_pos.x()) - top_left.x()
+        height = max(self._start_pos.y(), self._end_pos.y()) - top_left.y()
+        self.setGeometry(top_left.x() - 5, top_left.y() - 5, width + 10, height + 10)
 
-        self.setGeometry(x, y, w, h)
+    def update_position(self, start_pos: QPointF, end_pos: QPointF):
+        self._calc_area(start_pos, end_pos)
 
     def paint(self, painter: QPainter, option, widget):
         painter.drawLine(self._start_pos, self._end_pos)
+        painter.setPen(QPen(QtCore.Qt.red))
+        painter.drawRect(self.boundingRect())
 
     def boundingRect(self):
         return self.geometry()
+
+    def mouseReleaseEvent(self, event: QGraphicsSceneMouseEvent) -> None:
+        """
+        Calls the functions 'handleLeftClick' or 'handleRightClick' if
+        the user left or right clicked.
+        """
+        print(123)
+        return
+        if event.button() == Qt.MouseButton.LeftButton:
+            self.handleLeftClick()
+
+        elif event.button() == Qt.MouseButton.RightButton:
+            self.handleRightClick()