diff --git a/src/Model/Network/Edge.py b/src/Model/Network/Edge.py
index 0cc9701e3229a1da93416d2cc180cc5c8b3fc705..4c12c8f700f7e7f83a7e1e59318466ca751fa1cb 100644
--- a/src/Model/Network/Edge.py
+++ b/src/Model/Network/Edge.py
@@ -60,3 +60,9 @@ class Edge(object):
     def disable(self):
         self._enable = False
         self._status.modified()
+
+    def reverse(self):
+        tmp = self.node1
+        self.node1 = self.node2
+        self.node2 = tmp
+        self._status.modified()
diff --git a/src/Model/Network/Graph.py b/src/Model/Network/Graph.py
index fce8c4c38fd4eade5061ba7c6287b4e91d2ddb48..f6871abdc3df8056fdf3873afe9a678b9aad888b 100644
--- a/src/Model/Network/Graph.py
+++ b/src/Model/Network/Graph.py
@@ -56,7 +56,7 @@ class Graph(object):
         )
 
     def node(self, node_name:str):
-        node =  list(
+        node = list(
             filter(
                 lambda n: n.name == node_name,
                 self._nodes
@@ -69,7 +69,7 @@ class Graph(object):
         return node[0]
 
     def edge(self, edge_name:str):
-        edge =  list(
+        edge = list(
             filter(
                 lambda e: e.name == edge_name,
                 self._edges
@@ -154,7 +154,7 @@ class Graph(object):
                 acc or (
                     (e.node1 == node or
                      e.node2 == node)
-                    and e.enable
+                    and e._enable
                 )
             ),
             self._edges,
@@ -162,4 +162,4 @@ class Graph(object):
         )
 
     def is_enable_edge(self, edge):
-        return edge.enable
+        return edge._enable
diff --git a/src/View/Network/GraphWidget.py b/src/View/Network/GraphWidget.py
index 3cfdf47cca64f106e6df3249903dea5c0fc46ddc..2835ac7ed349d106d1e509bb41b975b7371d4811 100644
--- a/src/View/Network/GraphWidget.py
+++ b/src/View/Network/GraphWidget.py
@@ -422,6 +422,17 @@ class GraphWidget(QGraphicsView):
             if type(i) == NodeItem:
                 self.texts[i].rename()
 
+    def enable_edge(self, edge, prev):
+        edge.edge.enable(enable = not prev)
+        self.changeEdge.emit(self.sender())
+        self.changeNode.emit(self.sender())
+        self.display_update()
+
+    def reverse_edge(self, edge):
+        edge.edge.reverse()
+        self.changeEdge.emit(self.sender())
+        self.display_update()
+
     def display_update(self):
         """Clear the scene and redraw it
 
@@ -633,6 +644,11 @@ class GraphWidget(QGraphicsView):
         pos = self.mapToScene(event.pos())
         self.clicked = True
 
+        if event.buttons() & Qt.RightButton:
+            self.update()
+            super(GraphWidget, self).mousePressEvent(event)
+            return
+
         # Move item and select edge item
         if self._state == "move":
             self._selected_new_edge_src_node = None
@@ -753,12 +769,23 @@ class GraphWidget(QGraphicsView):
 
     def _menu_edge(self, event, pos, items, menu):
         delete = menu.addAction(_translate("Network", "Delete the reach"))
-        disable = menu.addAction(_translate("Network", "Disable the reach"))
+        if self.graph.is_enable_edge(items[0].edge):
+            enable = menu.addAction(_translate("Network", "Disable the reach"))
+            is_enable = True
+        else:
+            enable = menu.addAction(_translate("Network", "Enable the reach"))
+            is_enable = False
+
+        reverse = menu.addAction(_translate("Network", "Reverse the reach orientation"))
 
         action = menu.exec_(self.mapToGlobal(event.pos()))
 
         if action == delete:
             self.del_edge(items[0])
+        elif action == enable:
+            self.enable_edge(items[0], is_enable)
+        elif action == reverse:
+            self.reverse_edge(items[0])
 
     def contextMenuEvent(self, event):
         pos = self.mapToScene(event.pos())
diff --git a/src/View/Network/Table.py b/src/View/Network/Table.py
index 1bf0e5b463bca14ae31afa20a6480969e60a5a31..33bd3d337d7e8459857393b30f37a350733f2a4f 100644
--- a/src/View/Network/Table.py
+++ b/src/View/Network/Table.py
@@ -79,11 +79,12 @@ class TrueFalseComboBoxDelegate(QItemDelegate):
         self.commitData.emit(self.sender())
 
 class GraphTableModel(QAbstractTableModel):
-    def __init__(self, headers=[], graph=None, rows_type="nodes"):
+    def __init__(self, headers=[], graph=None, undo = None, rows_type="nodes"):
         super(QAbstractTableModel, self).__init__()
         self.headers = headers
         self.graph = graph
         self._type = rows_type
+        self._undo = undo
 
         if self._type == "nodes":
             self.rows = graph.nodes()
@@ -166,3 +167,11 @@ class GraphTableModel(QAbstractTableModel):
             self.rows[index.row()].node2 = tmp
             self.dataChanged.emit(index, index, [Qt.DisplayRole])
             self.layoutChanged.emit()
+
+    def undo(self):
+        self._undo.undo()
+        self.layoutChanged.emit()
+
+    def redo(self):
+        self._undo.redo()
+        self.layoutChanged.emit()
diff --git a/src/View/Network/Window.py b/src/View/Network/Window.py
index 1bdd676a2c70a0c01c05f8443c09af7794168f63..01d08417b5d181ffad6ff1e51edfdd6b44dc330c 100644
--- a/src/View/Network/Window.py
+++ b/src/View/Network/Window.py
@@ -1,5 +1,9 @@
 # -*- coding: utf-8 -*-
 
+from PyQt5.QtGui import (
+    QKeySequence,
+)
+
 from PyQt5.QtCore import (
     Qt, QRect, QVariant, QAbstractTableModel, pyqtSlot, pyqtSignal,
     QEvent,
@@ -32,6 +36,7 @@ class NetworkWindow(ASubMainWindow):
         super(NetworkWindow, self).__init__(name=self._title, ui="Network", parent=parent)
         self.ui.setWindowTitle(self._title)
 
+        self.setup_sc()
         self.setup_graph()
         self.setup_table()
         self.setup_connections()
@@ -111,11 +116,6 @@ class NetworkWindow(ASubMainWindow):
             self.clicked_del
         )
 
-        self.find(QPushButton, "pushButton_reverse").clicked.connect(
-            self.reverse_edge
-        )
-
-
     def clicked_add(self):
         if self.get_action_checkable("action_toolBar_add"):
             self.set_action_checkable("action_toolBar_del", False)
@@ -135,18 +135,3 @@ class NetworkWindow(ASubMainWindow):
 
         if key == Qt.Key_Escape:
             self._graph_widget.reset_selection
-
-    def reverse_edge(self):
-        """Reverse edge direction of selected table rows
-
-        Returns:
-            Nothing
-        """
-        indices = self.find(QTableView, "tableView_reachs").selectionModel().selectedIndexes()
-        indexes = {}
-
-        for index in sorted(indices):
-            indexes[index.row()] = index
-
-        for row in indexes:
-            self.reachs_model.reverse_edge(indexes[row])
diff --git a/src/View/ui/Network.ui b/src/View/ui/Network.ui
index 9235c0dc8466d83df45ff89adbf616de602b6be0..812fc58f6e0607d236ac69949bfed3939b060197 100644
--- a/src/View/ui/Network.ui
+++ b/src/View/ui/Network.ui
@@ -20,7 +20,7 @@
       <property name="orientation">
        <enum>Qt::Vertical</enum>
       </property>
-      <widget class="QWidget" name="">
+      <widget class="QWidget" name="layoutWidget">
        <layout class="QHBoxLayout" name="horizontalLayout_8">
         <item>
          <layout class="QHBoxLayout" name="horizontalLayout_graph"/>
@@ -31,7 +31,7 @@
        <property name="orientation">
         <enum>Qt::Horizontal</enum>
        </property>
-       <widget class="QWidget" name="">
+       <widget class="QWidget" name="layoutWidget">
         <layout class="QVBoxLayout" name="verticalLayout_9">
          <item>
           <layout class="QHBoxLayout" name="horizontalLayout_10">
@@ -68,13 +68,6 @@
              </property>
             </widget>
            </item>
-           <item>
-            <widget class="QPushButton" name="pushButton_reverse">
-             <property name="text">
-              <string>Reverse</string>
-             </property>
-            </widget>
-           </item>
            <item>
             <spacer name="horizontalSpacer_9">
              <property name="orientation">
@@ -108,7 +101,7 @@
          </item>
         </layout>
        </widget>
-       <widget class="QWidget" name="">
+       <widget class="QWidget" name="layoutWidget">
         <layout class="QVBoxLayout" name="verticalLayout_8">
          <item>
           <layout class="QHBoxLayout" name="horizontalLayout_9">