diff --git a/src/view/NetworkWindow.py b/src/view/NetworkWindow.py
index a540d03fb725eefbea7abf91ffeffa0030f4fb44..72c61a0b017251994336a7aab7c8530e60c74a19 100644
--- a/src/view/NetworkWindow.py
+++ b/src/view/NetworkWindow.py
@@ -177,6 +177,7 @@ class NetworkWindow(ASubWindow):
         # Connection
 
         self.nodes_model.dataChanged.connect(self.reachs_model.update)
+        self.nodes_model.dataChanged.connect(self.graph_widget.rename_nodes)
         self.reachs_model.dataChanged.connect(self.nodes_model.update)
         self.graph_widget.changeEdge.connect(self.reachs_model.update)
         self.graph_widget.changeNode.connect(self.nodes_model.update)
diff --git a/src/view/network/GraphWidget.py b/src/view/network/GraphWidget.py
index bd817c65e2daf1087feca8a9ff94c02619567076..cfca8bdc0324dfa333bcc06fd40787aaf433fd57 100644
--- a/src/view/network/GraphWidget.py
+++ b/src/view/network/GraphWidget.py
@@ -17,7 +17,7 @@ from PyQt5.QtGui import (
 )
 from PyQt5.QtWidgets import (
     QApplication, QGraphicsItem, QGraphicsScene,
-    QGraphicsView, QStyle
+    QGraphicsView, QStyle, QGraphicsTextItem,
 )
 
 class LandMark(QGraphicsItem):
@@ -79,7 +79,7 @@ class NodeItem(QGraphicsItem):
 
     def boundingRect(self):
         adjust = 2.0
-        return QRectF(-10 - adjust, -10 - adjust, 23 + adjust, 23 + adjust)
+        return QRectF(-10 - adjust, -10 - adjust, 20 + adjust, 20 + adjust)
 
     def shape(self):
         path = QPainterPath()
@@ -111,12 +111,6 @@ class NodeItem(QGraphicsItem):
         return super(NodeItem, self).itemChange(change, value)
 
     def mousePressEvent(self, event):
-        # Switch selected node
-        # if not self.graph.selectedItem() is self:
-        #     self.graph.setSelectedItem(self)
-        # elif self.graph.selectedItem() is self:
-        #     self.graph.setSelectedNewEdgeSrcNode(self)
-
         self.update()
         super(NodeItem, self).mousePressEvent(event)
 
@@ -217,6 +211,36 @@ class EdgeItem(QGraphicsItem):
 
         painter.drawPolygon(QPolygonF([line_center, arrow_p1, arrow_p2]))
 
+class NodeText(QGraphicsTextItem):
+    def __init__(self, node_item):
+        super(NodeText, self).__init__()
+
+        self.item = node_item
+        self.setPlainText(self.item.node.name)
+        self.setDefaultTextColor(Qt.black)
+        #self.setPos(self.item.pos())
+        self.set_custom_pos(self.item.pos())
+        self.setZValue(2)
+
+    def set_custom_pos(self, pos):
+        x = pos.x()
+        y = pos.y() - 42
+
+        self.setPos(QPointF(x,y))
+
+
+    def paint(self, painter, option, widget):
+        color = QColor(Qt.white)
+        color.setAlpha(128)
+
+        painter.setBrush(color)
+        painter.drawRect(self.boundingRect())
+
+        super(NodeText, self).paint(painter, option, widget)
+
+    def rename(self):
+        self.setPlainText(self.item.node.name)
+
 class NewEdgeLine(QGraphicsItem):
     def __init__(self, src, dest):
         super(NewEdgeLine, self).__init__()
@@ -263,10 +287,11 @@ class GraphWidget(QGraphicsView):
 
         self.node_items = []
         self.edge_items = []
+        self.texts = {}
 
         scene = QGraphicsScene(self)
         scene.setItemIndexMethod(QGraphicsScene.NoIndex)
-        scene.setSceneRect(0, 0, 1000, 1000)
+        scene.setSceneRect(0, 0, 2000, 2000)
         self.setScene(scene)
         self.setCacheMode(QGraphicsView.CacheBackground)
         self.setViewportUpdateMode(QGraphicsView.BoundingRectViewportUpdate)
@@ -285,9 +310,12 @@ class GraphWidget(QGraphicsView):
     def create_items(self):
         self.node_items = []
         self.edge_items = []
+        self.texts = {}
 
         for node in self.graph.nodes():
             inode = NodeItem(node, self)
+            self.texts[inode] = NodeText(inode)
+            self.scene().addItem(self.texts[inode])
             self.scene().addItem(inode)
             self.node_items.append(inode)
 
@@ -321,6 +349,8 @@ class GraphWidget(QGraphicsView):
         inode = NodeItem(node, self)
         self.scene().addItem(inode)
         self.node_items.append(inode)
+        self.texts[inode] = NodeText(inode)
+        self.scene().addItem(self.texts[inode])
 
         self.changeNode.emit(self.sender())
 
@@ -333,6 +363,8 @@ class GraphWidget(QGraphicsView):
             )
         )
 
+        self.setSelectedItem(None)
+
         for edge in edges:
             self.graph.remove_edge(edge.edge.name)
 
@@ -343,13 +375,20 @@ class GraphWidget(QGraphicsView):
         self.changeNode.emit(self.sender())
         self.changeEdge.emit(self.sender())
 
+    def rename_nodes(self):
+        for i in self.texts:
+            if type(i) == NodeItem:
+                self.texts[i].rename()
+
     def add_edge(self, node1, node2):
         if node1 == node2:
             return
+
         edge = self.graph.add_edge(node1.node, node2.node)
         # iedge = EdgeItem(node1, node2, edge, self)
         # self.scene().addItem(iedge)
         # self.edge_items.append(iedge)
+        self.setSelectedItem(None)
         self.setSelectedNewEdgeSrcNode(None)
 
         self.tmp_line = None
@@ -387,16 +426,21 @@ class GraphWidget(QGraphicsView):
 
     def nodeChangePosition(self, pos, node):
         node.node.setPos(pos.x(), pos.y())
+        self.texts[node].set_custom_pos(pos)
+        self.texts[node].update()
 
     def selectedItem(self):
         return self._selectedItem
 
-    def setSelectedItem(self, node):
-        previous_node = self._selectedItem
-        self._selectedItem = node
+    def setSelectedItem(self, item):
+        previous_item = self._selectedItem
+        self._selectedItem = item
 
-        if previous_node:
-            previous_node.update()
+        if previous_item:
+            previous_item.update()
+
+        if item:
+            item.update()
 
     def selectedNewEdgeSrcNode(self):
         return self._selectedNewEdgeSrcNode
@@ -518,5 +562,6 @@ class GraphWidget(QGraphicsView):
                 self.tmp_line.dest = pos
             self.tmp_line.update()
 
-        self.update()
-        super(GraphWidget, self).mouseMoveEvent(event)
+        if self._state == "move":
+            self.update()
+            super(GraphWidget, self).mouseMoveEvent(event)