diff --git a/src/Model/Network/Graph.py b/src/Model/Network/Graph.py
index 8cc6de21e58d763f695e85dce9b49abd64033c78..ad9d6f67ab40b04044f56735c336e5fc18f581cc 100644
--- a/src/Model/Network/Graph.py
+++ b/src/Model/Network/Graph.py
@@ -9,6 +9,9 @@ class Graph(object):
     def __init__(self):
         super(Graph, self).__init__()
 
+        self._node_ctor = Node
+        self._edge_ctor = Edge
+
         self._nodes_ids = 0
         self._edges_ids = 0
 
@@ -55,27 +58,34 @@ class Graph(object):
             )
         )[0]
 
+    def _add_node(self, node):
+        self._nodes.append(node)
+        self._nodes_ids += 1
+        return node
+
     def add_node(self, x:float = 0.0, y:float = 0.0):
-        node = Node(
+        node = self._node_ctor(
             self._nodes_ids,
             f"Node {self._nodes_ids}",
             x = x, y = y
         )
-        self._nodes.append(node)
-        self._nodes_ids += 1
-        return node
+        return self._add_node(node)
 
-    def add_edge(self, n1:Node, n2:Node):
+    def _add_edge(self, edge):
         # This edge already exists ?
-        if any(filter(lambda e: (e.node1 == n1 and e.node2 == n2),
+        if any(filter(lambda e: (e.node1 == edge.node1 and
+                                 e.node2 == edge.node2),
                       self._edges)):
             return None
 
-        edge = Edge(self._edges_ids, "", n1, n2)
         self._edges.append(edge)
         self._edges_ids += 1
         return edge
 
+    def add_edge(self, n1:Node, n2:Node):
+        edge = self._edge_ctor(self._edges_ids, "", n1, n2)
+        return self._add_edge(edge)
+
     def remove_node(self, node_name:str):
         self._nodes = list(
             filter(
diff --git a/src/Model/River.py b/src/Model/River.py
index 4094bc91294b09c5d8b87ad01ad93e84230dfffa..b38470c1430485edbf040d08bf41600a9d7d6644 100644
--- a/src/Model/River.py
+++ b/src/Model/River.py
@@ -31,3 +31,16 @@ class RiverReach(Edge):
 class River(Graph):
     def __init__(self):
         super(River, self).__init__()
+
+        # Replace Node and Edge ctor by custom ctor
+        self._node_ctor = RiverNode
+        self._edge_ctor = RiverReach
+
+        self._current_reach = None
+
+
+    def current_reach(self):
+        return self._current_reach
+
+    def current_reach(self, reach):
+        self._current_reach = reach
diff --git a/src/View/Network/GraphWidget.py b/src/View/Network/GraphWidget.py
index 0bd70655138ef0fb10262c2c63d561bcf13897cb..a0d1921400d332efad32953873a6b052350b40ae 100644
--- a/src/View/Network/GraphWidget.py
+++ b/src/View/Network/GraphWidget.py
@@ -548,6 +548,7 @@ class GraphWidget(QGraphicsView):
         """
         previous_edge = self._current_edge
         self._current_edge = edge
+        self.graph.current_reach(edge.edge)
 
         if previous_edge:
             previous_edge.update()