diff --git a/src/cutecoin/gui/views/wot.py b/src/cutecoin/gui/views/wot.py
index e5f64c9176376a659b9aa8a488f7937b178aaea0..aa2728305247146d147a215ce8bc90eb92602370 100644
--- a/src/cutecoin/gui/views/wot.py
+++ b/src/cutecoin/gui/views/wot.py
@@ -55,9 +55,10 @@ class WotView(QGraphicsView):
 
 class Scene(QGraphicsScene):
 
-    # This defines a signal called 'nodeSigned' that takes on string argument
-    node_signed = pyqtSignal(str, name='nodeSigned')
+    # This defines signals taking string arguments
     node_clicked = pyqtSignal(str, name='nodeClicked')
+    node_signed = pyqtSignal(dict, name='nodeSigned')
+    node_transaction = pyqtSignal(dict, name='nodeTransaction')
 
     def __init__(self, parent=None):
         """
@@ -74,21 +75,20 @@ class Scene(QGraphicsScene):
         # self.addLine(-100, 0, 100, 0)
         # self.addLine(0, -100, 0, 100)
 
-    def add_node(self, _id, node, pos):
+    def add_node(self, metadata, pos):
         """
         Add a node item in the graph
 
-        :param str _id: Node id
-        :param dict node: Node data
+        :param dict metadata: Node metadata
         :param tuple pos: Position (x,y) of the node
 
         :return: Node
         """
-        node = Node(_id, node, pos)
+        node = Node(metadata, pos)
         self.addItem(node)
         return node
 
-    def add_arc(self, source_node, destination_node, arc):
+    def add_arc(self, source_node, destination_node, metadata):
         """
         Add an arc between two nodes
 
@@ -98,7 +98,7 @@ class Scene(QGraphicsScene):
 
         :return: Arc
         """
-        arc = Arc(source_node, destination_node, arc)
+        arc = Arc(source_node, destination_node, metadata)
         self.addItem(arc)
         return arc
 
@@ -117,7 +117,7 @@ class Scene(QGraphicsScene):
                 selected_id = _id
                 selected_node = node
 
-        root_node = self.add_node(selected_id, selected_node, (0, 0))
+        root_node = self.add_node(selected_node, (0, 0))
 
         # add certified by selected node
         y = 0
@@ -130,7 +130,7 @@ class Scene(QGraphicsScene):
         nodes = ((k, v) for (k, v) in sorted(nodes.items(), key=lambda kv: kv[1]['node']['text'].lower()))
         # add nodes and arcs
         for _id, items in nodes:
-            node = self.add_node(_id, items['node'], (x, y))
+            node = self.add_node(items['node'], (x, y))
             self.add_arc(root_node, node, items['arc'])
             y += 50
 
@@ -141,7 +141,7 @@ class Scene(QGraphicsScene):
         nodes = ((k, v) for (k, v) in sorted(graph.items(), key=lambda kv: kv[1]['text'].lower()) if selected_id in (arc['id'] for arc in v['arcs']))
         # add nodes and arcs
         for _id, certifier_node in nodes:
-            node = self.add_node(_id, certifier_node, (x, y))
+            node = self.add_node(certifier_node, (x, y))
             for arc in certifier_node['arcs']:
                 if arc['id'] == selected_id:
                     self.add_arc(node, root_node, arc)
@@ -151,24 +151,26 @@ class Scene(QGraphicsScene):
 
 
 class Node(QGraphicsEllipseItem):
-    def __init__(self, _id, data, x_y):
+    def __init__(self, metadata, x_y):
         """
         Create node in the graph scene
 
-        :param dict data: Node data
+        :param dict metadata: Node metadata
         :param x_y: Position of the node
         """
         # unpack tuple
         x, y = x_y
 
         super(Node, self).__init__()
-        self.id = _id
-        self.status_wallet = data['status'] & NODE_STATUS_HIGHLIGHTED
-        self.text = data['text']
-        self.setToolTip(data['tooltip'])
+
+        self.metadata = metadata
+        self.status_wallet = self.metadata['status'] & NODE_STATUS_HIGHLIGHTED
+        self.text = self.metadata['text']
+        self.setToolTip(self.metadata['tooltip'])
         self.arcs = []
         self.menu = None
         self.action_sign = None
+        self.action_transaction = None
 
         # color around ellipse
         outline_color = QColor('grey')
@@ -216,7 +218,7 @@ class Node(QGraphicsEllipseItem):
         """
         if event.button() == Qt.LeftButton:
             # trigger scene signal
-            self.scene().node_clicked.emit(self.id)
+            self.scene().node_clicked.emit(self.metadata['id'])
 
     def hoverEnterEvent(self, event: QGraphicsSceneHoverEvent):
         """
@@ -238,6 +240,10 @@ class Node(QGraphicsEllipseItem):
         self.action_sign = QAction('Sign identity', self.scene())
         self.menu.addAction(self.action_sign)
         self.action_sign.triggered.connect(self.sign_action)
+        # action transaction toward identity
+        self.action_transaction = QAction('Send money to identity', self.scene())
+        self.menu.addAction(self.action_transaction)
+        self.action_transaction.triggered.connect(self.transaction_action)
         self.menu.exec(event.screenPos())
 
     def add_arc(self, arc):
@@ -253,26 +259,34 @@ class Node(QGraphicsEllipseItem):
         Sign identity node
         """
         # trigger scene signal
-        self.scene().node_signed.emit(self.id)
+        self.scene().node_signed.emit(self.metadata)
+
+    def transaction_action(self):
+        """
+        Transaction action to identity node
+        """
+        # trigger scene signal
+        self.scene().node_transaction.emit(self.metadata)
 
 
 class Arc(QGraphicsLineItem):
-    def __init__(self, source_node, destination_node, data):
+    def __init__(self, source_node, destination_node, metadata):
         """
         Create an arc between two nodes
 
         :param Node source_node: Source node of the arc
         :param Node destination_node: Destination node of the arc
-        :param dict data: Arc data
+        :param dict metadata: Arc metadata
         """
         super(Arc, self).__init__()
 
+        self.metadata = metadata
         self.source = source_node
         self.destination = destination_node
-        self.setToolTip(data['tooltip'])
+        self.setToolTip(self.metadata['tooltip'])
         self.source.add_arc(self)
 
-        self.status = data['status']
+        self.status = self.metadata['status']
 
         self.source_point = None
         self.destination_point = None
diff --git a/src/cutecoin/gui/wot_tab.py b/src/cutecoin/gui/wot_tab.py
index 1e9dd772817c386573e2372c0a5de1e6a21ac295..ec7f4f5d817c249b4d9bc89f7273120f400edcd1 100644
--- a/src/cutecoin/gui/wot_tab.py
+++ b/src/cutecoin/gui/wot_tab.py
@@ -8,7 +8,9 @@ from PyQt5.QtWidgets import QWidget
 from ..gen_resources.wot_tab_uic import Ui_WotTabWidget
 from cutecoin.gui.views.wot import NODE_STATUS_HIGHLIGHTED, NODE_STATUS_SELECTED, ARC_STATUS_STRONG, ARC_STATUS_WEAK
 from ucoinpy.api import bma
-
+from .certification import CertificationDialog
+from .add_contact import AddContactDialog
+from .transfer import TransferMoneyDialog
 
 class WotTabWidget(QWidget, Ui_WotTabWidget):
     def __init__(self, account, community, parent=None):
@@ -29,8 +31,9 @@ class WotTabWidget(QWidget, Ui_WotTabWidget):
         self.comboBoxSearch.lineEdit().returnPressed.connect(self.combobox_return_pressed)
 
         # add scene events
-        self.graphicsView.scene().node_signed.connect(self.sign_node)
         self.graphicsView.scene().node_clicked.connect(self.draw_graph)
+        self.graphicsView.scene().node_signed.connect(self.sign_node)
+        self.graphicsView.scene().node_transaction.connect(self.send_money_to_node)
 
         self.account = account
         self.community = community
@@ -62,7 +65,7 @@ class WotTabWidget(QWidget, Ui_WotTabWidget):
         node_status += NODE_STATUS_SELECTED
 
         # highlighted node (wallet)
-        graph[public_key] = {'arcs': [], 'text': certifiers['uid'], 'tooltip': public_key, 'status': node_status}
+        graph[public_key] = {'id': public_key, 'arcs': [], 'text': certifiers['uid'], 'tooltip': public_key, 'status': node_status}
 
         # add certifiers of uid
         for certifier in certifiers['certifications']:
@@ -80,6 +83,7 @@ class WotTabWidget(QWidget, Ui_WotTabWidget):
             if certifier['pubkey'] not in graph.keys():
                 node_status = (NODE_STATUS_HIGHLIGHTED and (certifier['pubkey'] == self.account.pubkey)) or 0
                 graph[certifier['pubkey']] = {
+                    'id': certifier['pubkey'],
                     'arcs': [arc],
                     'text': certifier['uid'],
                     'tooltip': certifier['pubkey'],
@@ -103,6 +107,7 @@ class WotTabWidget(QWidget, Ui_WotTabWidget):
             if certified['pubkey'] not in graph.keys():
                 node_status = (NODE_STATUS_HIGHLIGHTED and (certified['pubkey'] == self.account.pubkey)) or 0
                 graph[certified['pubkey']] = {
+                    'id': certified['pubkey'],
                     'arcs': list(),
                     'text': certified['uid'],
                     'tooltip': certified['pubkey'],
@@ -159,5 +164,26 @@ class WotTabWidget(QWidget, Ui_WotTabWidget):
                 node['pubkey']
         )
 
-    def sign_node(self, public_key):
-        print('sign node {} not implemented'.format(public_key))
+    def sign_node(self, metadata):
+        # check if identity already certified...
+        for certified in self.community.request(bma.wot.CertifiedBy, {'search': self.account.pubkey})['certifications']:
+            if metadata['id'] == certified['pubkey']:
+                return False
+        # open certify dialog
+        dialog = CertificationDialog(self.account)
+        dialog.edit_pubkey.setText(metadata['id'])
+        dialog.radio_pubkey.setChecked(True)
+        dialog.exec_()
+
+    def add_node_as_contact(self, metadata):
+        dialog = AddContactDialog(self.account, self.window())
+        dialog.edit_name.setText(metadata['text'])
+        dialog.edit_pubkey.setText(metadata['id'])
+        dialog.exec_()
+
+    def send_money_to_node(self, metadata):
+        dialog = TransferMoneyDialog(self.account)
+        dialog.edit_pubkey.setText(metadata['id'])
+        dialog.combo_community.setCurrentText(self.community.name())
+        dialog.radio_pubkey.setChecked(True)
+        dialog.exec_()