diff --git a/src/Model/Network/Graph.py b/src/Model/Network/Graph.py
index 9ad25fe8d1987884ca324d4de5f8e6b8039433e2..93a407c60d09867e935d332b358997c157979ddf 100644
--- a/src/Model/Network/Graph.py
+++ b/src/Model/Network/Graph.py
@@ -101,7 +101,7 @@ class Graph(object):
         return self._add_node(node)
 
     def insert_node(self, node):
-        self._add_node(node)
+        return self._add_node(node)
 
     def create_node(self, x:float = 0.0, y:float = 0.0):
         node = self._create_node(x, y)
@@ -126,6 +126,9 @@ class Graph(object):
                                status = self._status)
         return self._add_edge(edge)
 
+    def insert_edge(self, edge):
+        return self._add_edge(edge)
+
     def remove_node(self, node_name:str):
         self._nodes = list(
             filter(
diff --git a/src/View/Network/GraphWidget.py b/src/View/Network/GraphWidget.py
index 573ac3d7c3e461829c299d38193fe2ad98ea9790..eee76ee9eeae2c3c95d13bfae274133313370b73 100644
--- a/src/View/Network/GraphWidget.py
+++ b/src/View/Network/GraphWidget.py
@@ -400,21 +400,12 @@ class GraphWidget(QGraphicsView):
             Nothing
         """
         node = item.node
-        edges = list(
-            filter(
-                lambda ie: (ie.edge.node1 == node or
-                            ie.edge.node2 == node),
-                self.edge_items
+        self._undo.push(
+            DelNodeCommand(
+                self.graph, node
             )
         )
 
-        self.set_selected_item(None)
-
-        for edge in edges:
-            self.graph.remove_edge(edge.edge.name)
-
-        self.graph.remove_node(node.name)
-
         self.scene().clear()
         self.create_items()
         self.changeNode.emit(self.sender())
diff --git a/src/View/Network/UndoCommand.py b/src/View/Network/UndoCommand.py
index 3266c1cf49180699e12b8fbb54aec6e2af22a666..ea7e2657eae1eddb6603fe04cbf956a7bcc2b1df 100644
--- a/src/View/Network/UndoCommand.py
+++ b/src/View/Network/UndoCommand.py
@@ -24,6 +24,33 @@ class AddNodeCommand(QUndoCommand):
     def redo(self):
         self._graph.insert_node(self._node)
 
+class DelNodeCommand(QUndoCommand):
+    def __init__(self, graph, node):
+        QUndoCommand.__init__(self)
+
+        self._graph = graph
+        self._node = node
+        self._edges = []
+
+    def undo(self):
+        for edge in self._edges:
+            self._graph.insert_edge(edge)
+
+        self._graph.insert_node(self._node)
+
+    def redo(self):
+        self._edges = list(
+            filter(
+                lambda e: (e.node1 == self._node or
+                           e.node2 == self._node),
+                self._graph.edges()
+            )
+        )
+
+        for edge in self._edges:
+            self._graph.remove_edge(edge.name)
+
+        self._graph.remove_node(self._node.name)
 
 class SetCommand(QUndoCommand):
     def __init__(self, element, column, new_value):