diff --git a/src/sakia/data/entities/certification.py b/src/sakia/data/entities/certification.py
index 67e07044f8ac727ac458fa140bffe26e16385123..d59b7ff789e31ccdc2ab773bb8d4237173e613f3 100644
--- a/src/sakia/data/entities/certification.py
+++ b/src/sakia/data/entities/certification.py
@@ -10,4 +10,4 @@ class Certification:
     block = attr.ib(convert=int)
     timestamp = attr.ib(convert=int)
     signature = attr.ib(convert=str, cmp=False, hash=False)
-    written_on = attr.ib(convert=block_uid, default=BlockUID.empty(), cmp=False, hash=False)
+    written_on = attr.ib(convert=int, default=0, cmp=False, hash=False)
diff --git a/src/sakia/data/entities/identity.py b/src/sakia/data/entities/identity.py
index 76dd814285924621cb14804ab0187850b082b011..445d8f5ecd1e6e019f75ff8a0c81d83604b564bd 100644
--- a/src/sakia/data/entities/identity.py
+++ b/src/sakia/data/entities/identity.py
@@ -10,6 +10,7 @@ class Identity:
     uid = attr.ib(convert=str, default="")
     blockstamp = attr.ib(convert=block_uid, default=BlockUID.empty())
     signature = attr.ib(convert=str, default="", cmp=False, hash=False)
+    # Mediantime of the block referenced by blockstamp
     timestamp = attr.ib(convert=int, default=0, cmp=False, hash=False)
     written_on = attr.ib(convert=block_uid, default=BlockUID.empty(), cmp=False, hash=False)
     revoked_on = attr.ib(convert=block_uid, default=BlockUID.empty(), cmp=False, hash=False)
@@ -17,7 +18,7 @@ class Identity:
     membership_buid = attr.ib(convert=block_uid, default=BlockUID.empty(), cmp=False, hash=False)
     membership_timestamp = attr.ib(convert=int, default=0, cmp=False, hash=False)
     membership_type = attr.ib(convert=str, default='', validator=lambda s, a, t: t in ('', 'IN', 'OUT'), cmp=False, hash=False)
-    membership_written_on = attr.ib(convert=block_uid, default=BlockUID.empty(), cmp=False, hash=False)
+    membership_written_on = attr.ib(convert=int, default=0, cmp=False, hash=False)
 
     def document(self):
         """
diff --git a/src/sakia/data/processors/identities.py b/src/sakia/data/processors/identities.py
index 8626fec2a73193f69ebecc1b87302557b6fec175..c20da37af8fa9b8e32d03792ad4614c14f80c7d4 100644
--- a/src/sakia/data/processors/identities.py
+++ b/src/sakia/data/processors/identities.py
@@ -150,7 +150,7 @@ class IdentitiesProcessor:
             if block_uid(memberships_data['sigDate']) == identity.blockstamp \
                and memberships_data['uid'] == identity.uid:
                 for ms in memberships_data['memberships']:
-                    if block_uid(ms['written']) > identity.membership_written_on:
+                    if ms['written'] > identity.membership_written_on:
                         identity.membership_buid = BlockUID(ms['blockNumber'], ms['blockHash'])
                         identity.membership_type = ms['membership']
 
@@ -166,7 +166,9 @@ class IdentitiesProcessor:
 
                     requirements_data = await self._bma_connector.get(identity.currency, bma.wot.requirements,
                                                                       req_args={'search': identity.pubkey})
-                    identity.member = requirements_data['membershipExpiresIn'] > 0 and not requirements_data['outdistanced']
+                    identity_data = next((data for data in requirements_data["identities"]
+                                          if data["pubkey"] == identity.pubkey))
+                    identity.member = identity_data['membershipExpiresIn'] > 0 and not identity_data['outdistanced']
         except errors.DuniterError as e:
             if e.ucode == errors.NO_MEMBER_MATCHING_PUB_OR_UID:
                 pass
diff --git a/src/sakia/data/repositories/meta.sql b/src/sakia/data/repositories/meta.sql
index 902317994e6371af8a445750ded3d36d2cc8dcba..130c0817bf9d7a6604316df26ce14320f0e44637 100644
--- a/src/sakia/data/repositories/meta.sql
+++ b/src/sakia/data/repositories/meta.sql
@@ -6,12 +6,12 @@ CREATE TABLE IF NOT EXISTS identities(
                                blockstamp VARCHAR(100),
                                signature VARCHAR(100),
                                ts INT,
-                               written_on VARCHAR(100),
-                               revoked_on VARCHAR(100),
+                               written_on INT,
+                               revoked_on INT,
                                member BOOLEAN,
                                ms_buid VARCHAR(100),
                                ms_timestamp INT,
-                               ms_written_on VARCHAR(100),
+                               ms_written_on INT,
                                ms_type VARCHAR(5),
                                PRIMARY KEY (currency, pubkey, uid, blockstamp)
                                );
@@ -62,7 +62,7 @@ CREATE TABLE IF NOT EXISTS certifications(
                                block INT,
                                ts INT,
                                signature VARCHAR(100),
-                               written_on VARCHAR(100),
+                               written_on INT,
                                PRIMARY KEY (currency, certifier, certified, block)
                                );
 
diff --git a/src/sakia/gui/dialogs/certification/controller.py b/src/sakia/gui/dialogs/certification/controller.py
index cba3047a05b17a43558b9d88ffde7af008ac4f3c..0b537e63db51744dbd15dcf246b22f88f9e788d5 100644
--- a/src/sakia/gui/dialogs/certification/controller.py
+++ b/src/sakia/gui/dialogs/certification/controller.py
@@ -40,7 +40,7 @@ class CertificationController(QObject):
         :return: a new Certification controller
         :rtype: CertificationController
         """
-        view = CertificationView(parent.view, None, None)
+        view = CertificationView(parent.view if parent else None, None, None)
         model = CertificationModel(app)
         certification = cls(view, model, None, None)
 
diff --git a/src/sakia/gui/dialogs/connection_cfg/controller.py b/src/sakia/gui/dialogs/connection_cfg/controller.py
index c863915fd3a51d0a4fc8320abe11267c315c6af6..0901538858939c806e40a356c7b1a8caf3f7c846 100644
--- a/src/sakia/gui/dialogs/connection_cfg/controller.py
+++ b/src/sakia/gui/dialogs/connection_cfg/controller.py
@@ -159,7 +159,7 @@ class ConnectionConfigController(QObject):
                 result, connection_identity = await self.model.publish_selfcert(self.model.connection.salt, password,
                                                                                 self.view.scrypt_params)
                 if result[0]:
-                    self.view.show_success(self.model.notification())
+                    await self.view.show_success(self.model.notification())
                 else:
                     self.view.show_error(self.model.notification(), result[1])
 
diff --git a/src/sakia/services/network.py b/src/sakia/services/network.py
index 46b7502a324397fa3aeb31a58c6e6a2d55d259b6..118cca89b7c0fac6e302d4d0536509b76cf50343 100644
--- a/src/sakia/services/network.py
+++ b/src/sakia/services/network.py
@@ -74,10 +74,9 @@ class NetworkService(QObject):
         :return:
         """
         connectors = []
-        session = aiohttp.ClientSession()
         for node in node_processor.nodes(currency):
-            connectors.append(NodeConnector(node, session))
-        network = cls(app, currency, node_processor, connectors, session, blockchain_service)
+            connectors.append(NodeConnector(node, None))
+        network = cls(app, currency, node_processor, connectors, None, blockchain_service)
         return network
 
     def start_coroutines(self):
@@ -181,6 +180,10 @@ class NetworkService(QObject):
         Start crawling which never stops.
         To stop this crawling, call "stop_crawling" method.
         """
+        session = aiohttp.ClientSession()
+        for connector in self._connectors:
+            connector.session = session
+
         self._must_crawl = True
         first_loop = True
         asyncio.ensure_future(self.discovery_loop())
diff --git a/src/sakia/tests/conftest.py b/src/sakia/tests/conftest.py
index 1036ec13b371b360c9fba8a9a36bb5dbb6b34e77..eb5cf52bdad90b0bfce99e713e66f2e8591d0ba7 100644
--- a/src/sakia/tests/conftest.py
+++ b/src/sakia/tests/conftest.py
@@ -59,15 +59,6 @@ def app_data(sakia_options):
 def user_parameters():
     return UserParameters()
 
-@pytest.fixture
-def connection(bob):
-    return Connection(currency="testcurrency",
-                      pubkey=bob.key.pubkey,
-                      salt=bob.salt, uid=bob.uid,
-                      scrypt_N=4096, scrypt_r=4, scrypt_p=2,
-                      blockstamp=bob.blockstamp,
-                      password="bobpassword")
-
 @pytest.fixture
 def application(event_loop, meta_repo, sakia_options, app_data, user_parameters):
     return Application(get_application(), event_loop, sakia_options, app_data, user_parameters, meta_repo, {}, {}, {}, {}, {})
@@ -88,6 +79,16 @@ def bob():
     return mirage.User.create("testcurrency", "bob", "bobsalt", "bobpassword", BlockUID.empty())
 
 
+@pytest.fixture
+def wrong_bob_uid():
+    return mirage.User.create("testcurrency", "wrong_bob", "bobsalt", "bobpassword", BlockUID.empty())
+
+
+@pytest.fixture
+def wrong_bob_pubkey():
+    return mirage.User.create("testcurrency", "bob", "wrongbobsalt", "bobpassword", BlockUID.empty())
+
+
 @pytest.fixture
 def simple_fake_server(fake_server, alice, bob):
     fake_server.forge.push(alice.identity())
@@ -99,23 +100,69 @@ def simple_fake_server(fake_server, alice, bob):
     fake_server.forge.forge_block()
     fake_server.forge.set_member(alice.key.pubkey, True)
     fake_server.forge.set_member(bob.key.pubkey, True)
+    fake_server.forge.generate_dividend()
+    fake_server.forge.forge_block()
+    fake_server.forge.forge_block()
+    fake_server.forge.generate_dividend()
     fake_server.forge.forge_block()
     fake_server.forge.forge_block()
     return fake_server
 
 
 @pytest.fixture
-def application_with_one_connection(application, connection, simple_fake_server):
+def application_with_one_connection(application, simple_fake_server, bob):
+    current_block = simple_fake_server.forge.blocks[-1]
+    last_ud_block = [b for b in simple_fake_server.forge.blocks if b.ud][-1]
+    previous_ud_block = [b for b in simple_fake_server.forge.blocks if b.ud][-2]
+    origin_block = simple_fake_server.forge.blocks[0]
+    connection = Connection(currency="testcurrency",
+                      pubkey=bob.key.pubkey,
+                      salt=bob.salt, uid=bob.uid,
+                      scrypt_N=4096, scrypt_r=4, scrypt_p=2,
+                      blockstamp=bob.blockstamp)
     application.db.connections_repo.insert(connection)
+    blockchain_parameters = BlockchainParameters(*origin_block.parameters)
+    blockchain = Blockchain(parameters=blockchain_parameters,
+                            current_buid=current_block.blockUID,
+                            current_members_count=current_block.members_count,
+                            current_mass=simple_fake_server.forge.monetary_mass(current_block.number),
+                            median_time=current_block.mediantime,
+                            last_members_count=previous_ud_block.members_count,
+                            last_ud=last_ud_block.ud,
+                            last_ud_base=last_ud_block.unit_base,
+                            last_ud_time=last_ud_block.mediantime,
+                            previous_mass=simple_fake_server.forge.monetary_mass(previous_ud_block.number),
+                            previous_members_count=previous_ud_block.members_count,
+                            previous_ud=previous_ud_block.ud,
+                            previous_ud_base=previous_ud_block.unit_base,
+                            previous_ud_time=previous_ud_block.mediantime,
+                            currency=simple_fake_server.forge.currency)
+    application.db.blockchains_repo.insert(blockchain)
+    bob_blockstamp = simple_fake_server.forge.user_identities[bob.key.pubkey].blockstamp
+    bob_user_identity = simple_fake_server.forge.user_identities[bob.key.pubkey]
+    bob_ms = bob_user_identity.memberships[-1]
+    bob_identity = Identity(currency=simple_fake_server.forge.currency,
+                            pubkey=bob.key.pubkey,
+                            uid=bob.uid,
+                            blockstamp=bob_blockstamp,
+                            signature=bob_user_identity.signature,
+                            timestamp=simple_fake_server.forge.blocks[bob_blockstamp.number].mediantime,
+                            written_on=None,
+                            revoked_on=bob_user_identity.revoked_on,
+                            member=bob_user_identity.member,
+                            membership_buid=bob_ms.blockstamp,
+                            membership_timestamp=simple_fake_server.forge.blocks[bob_ms.blockstamp.number].mediantime,
+                            membership_type=bob_ms.type,
+                            membership_written_on=simple_fake_server.forge.blocks[bob_ms.written_on].number)
+    application.db.identities_repo.insert(bob_identity)
     application.instanciate_services()
     application.db.nodes_repo.insert(Node(currency=simple_fake_server.forge.currency,
                                           pubkey=simple_fake_server.forge.key.pubkey,
                                           endpoints=simple_fake_server.peer_doc().endpoints,
-                                          peer_blockstamp=simple_fake_server.peer_doc().blockstamp,
-                                          uid=simple_fake_server.peer_doc.uid,
-                                          current_buid=BlockUID(simple_fake_server.current_block(None)["number"],
-                                                                simple_fake_server.current_block(None)["hash"]),
-                                          current_ts=simple_fake_server.current_block(None)["medianTime"],
+                                          peer_blockstamp=simple_fake_server.peer_doc().blockUID,
+                                          uid="",
+                                          current_buid=BlockUID(current_block.number, current_block.sha_hash),
+                                          current_ts=current_block.mediantime,
                                           state=Node.ONLINE,
                                           software="duniter",
                                           version="0.40.2"))
diff --git a/src/sakia/tests/functional/process_cfg_community/__init__.py b/src/sakia/tests/functional/process_cfg_community/__init__.py
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/src/sakia/tests/functional/process_cfg_community/test_add_community.py b/src/sakia/tests/functional/process_cfg_community/test_add_community.py
deleted file mode 100644
index 25bb02af9a52bd0ea5109b9fc5a4b9c798141fee..0000000000000000000000000000000000000000
--- a/src/sakia/tests/functional/process_cfg_community/test_add_community.py
+++ /dev/null
@@ -1,235 +0,0 @@
-import asyncio
-import time
-import unittest
-
-from PyQt5.QtCore import QLocale, Qt
-from PyQt5.QtTest import QTest
-from PyQt5.QtWidgets import QDialog
-from sakia.gui.process_cfg_community import ProcessConfigureCommunity
-
-from sakia.app import Application
-from sakia.core.account import Account
-from sakia.core.registry.identities import IdentitiesRegistry
-from sakia.gui.password_asker import PasswordAskerDialog
-from sakia.tests import QuamashTest
-from sakia.tests.mocks.bma import new_blockchain, nice_blockchain
-
-
-class ProcessAddCommunity(unittest.TestCase, QuamashTest):
-    def setUp(self):
-        self.setUpQuamash()
-        QLocale.setDefault(QLocale("en_GB"))
-        self.identities_registry = IdentitiesRegistry({})
-
-        self.application = Application(self.qapplication, self.lp, self.identities_registry)
-        self.application.preferences['notifications'] = False
-        # Salt/password : "testsakia/testsakia"
-        # Pubkey : 7Aqw6Efa9EzE7gtsc8SveLLrM7gm6NEGoywSv4FJx6pZ
-        self.account = Account("testsakia", "7Aqw6Efa9EzE7gtsc8SveLLrM7gm6NEGoywSv4FJx6pZ",
-                               "john", [], [], [], self.identities_registry)
-        self.password_asker = PasswordAskerDialog(self.account)
-        self.password_asker.password = "testsakia"
-        self.password_asker.remember = True
-
-    def tearDown(self):
-        self.tearDownQuamash()
-
-    def test_register_community_empty_blockchain(self):
-        mock = new_blockchain.get_mock(self.lp)
-        time.sleep(2)
-        process_community = ProcessConfigureCommunity(self.application,
-                                                    self.account,
-                                                    None, self.password_asker)
-
-        def close_dialog():
-            if process_community.isVisible():
-                process_community.close()
-
-        async def exec_test():
-            srv, port, url = await mock.create_server()
-            self.addCleanup(srv.close)
-            await asyncio.sleep(1)
-            QTest.mouseClick(process_community.lineedit_server, Qt.LeftButton)
-            QTest.keyClicks(process_community.lineedit_server, "127.0.0.1")
-            QTest.mouseDClick(process_community.spinbox_port, Qt.LeftButton)
-            process_community.spinbox_port.setValue(port)
-            self.assertEqual(process_community.stacked_pages.currentWidget(),
-                             process_community.page_node,
-                             msg="Current widget : {0}".format(process_community.stacked_pages.currentWidget().objectName()))
-            self.assertEqual(process_community.lineedit_server.text(), "127.0.0.1")
-            self.assertEqual(process_community.spinbox_port.value(), port)
-            QTest.mouseClick(process_community.button_register, Qt.LeftButton)
-            await asyncio.sleep(1)
-            self.assertEqual(process_community.label_error.text(), "Broadcasting identity...")
-            await asyncio.sleep(1)
-
-            self.assertEqual(process_community.stacked_pages.currentWidget(),
-                             process_community.page_add_nodes,
-                             msg="Current widget : {0}".format(process_community.stacked_pages.currentWidget().objectName()))
-            await mock.close()
-            QTest.mouseClick(process_community.button_next, Qt.LeftButton)
-
-        self.lp.call_later(15, close_dialog)
-        asyncio.ensure_future(exec_test())
-        self.lp.run_until_complete(process_community.async_exec())
-        self.assertEqual(process_community.result(), QDialog.Accepted)
-
-    def test_connect_community_empty_blockchain(self):
-        mock = new_blockchain.get_mock(self.lp)
-        time.sleep(2)
-        process_community = ProcessConfigureCommunity(self.application,
-                                                    self.account,
-                                                    None, self.password_asker)
-
-        def close_dialog():
-            if process_community.isVisible():
-                process_community.close()
-
-        async def exec_test():
-            srv, port, url = await mock.create_server()
-            self.addCleanup(srv.close)
-
-            await asyncio.sleep(1)
-            QTest.mouseClick(process_community.lineedit_server, Qt.LeftButton)
-            QTest.keyClicks(process_community.lineedit_server, "127.0.0.1")
-            QTest.mouseDClick(process_community.spinbox_port, Qt.LeftButton)
-            process_community.spinbox_port.setValue(port)
-            self.assertEqual(process_community.stacked_pages.currentWidget(),
-                             process_community.page_node,
-                             msg="Current widget : {0}".format(process_community.stacked_pages.currentWidget().objectName()))
-            self.assertEqual(process_community.lineedit_server.text(), "127.0.0.1")
-            self.assertEqual(process_community.spinbox_port.value(), port)
-            QTest.mouseClick(process_community.button_connect, Qt.LeftButton)
-            await asyncio.sleep(2)
-            self.assertEqual(mock.get_request(0).method, 'GET')
-            self.assertEqual(mock.get_request(0).url, '/network/peering')
-            self.assertEqual(process_community.stacked_pages.currentWidget(),
-                             process_community.page_node,
-                             msg="Current widget : {0}".format(process_community.stacked_pages.currentWidget().objectName()))
-            self.assertEqual(process_community.label_error.text(), "Could not find your identity on the network.")
-            await mock.close()
-            process_community.close()
-
-        self.lp.call_later(15, close_dialog)
-        asyncio.ensure_future(exec_test())
-        self.lp.run_until_complete(process_community.async_exec())
-
-    def test_connect_community_wrong_pubkey(self):
-        mock = nice_blockchain.get_mock(self.lp)
-        time.sleep(2)
-        self.account.pubkey = "wrong_pubkey"
-        process_community = ProcessConfigureCommunity(self.application,
-                                                    self.account,
-                                                    None, self.password_asker)
-
-        def close_dialog():
-            if process_community.isVisible():
-                process_community.close()
-
-        async def exec_test():
-            srv, port, url = await mock.create_server()
-            self.addCleanup(srv.close)
-            await asyncio.sleep(1)
-            QTest.mouseClick(process_community.lineedit_server, Qt.LeftButton)
-            QTest.keyClicks(process_community.lineedit_server, "127.0.0.1")
-            QTest.mouseDClick(process_community.spinbox_port, Qt.LeftButton)
-            process_community.spinbox_port.setValue(port)
-            self.assertEqual(process_community.stacked_pages.currentWidget(),
-                             process_community.page_node,
-                             msg="Current widget : {0}".format(process_community.stacked_pages.currentWidget().objectName()))
-            self.assertEqual(process_community.lineedit_server.text(), "127.0.0.1")
-            self.assertEqual(process_community.spinbox_port.value(), port)
-            QTest.mouseClick(process_community.button_connect, Qt.LeftButton)
-            await asyncio.sleep(1)
-            self.assertEqual(mock.get_request(0).method, 'GET')
-            self.assertEqual(mock.get_request(0).url, '/network/peering')
-            self.assertEqual(mock.get_request(1).method, 'GET')
-            self.assertEqual(mock.get_request(1).url,
-                             '/wot/certifiers-of/wrong_pubkey')
-            self.assertEqual(process_community.label_error.text(), """Your pubkey or UID is different on the network.
-Yours : wrong_pubkey, the network : 7Aqw6Efa9EzE7gtsc8SveLLrM7gm6NEGoywSv4FJx6pZ""")
-            await mock.close()
-            process_community.close()
-
-        self.lp.call_later(15, close_dialog)
-        asyncio.ensure_future(exec_test())
-        self.lp.run_until_complete(process_community.async_exec())
-        self.assertEqual(process_community.result(), QDialog.Rejected)
-
-    def test_connect_community_wrong_uid(self):
-        mock = nice_blockchain.get_mock(self.lp)
-        time.sleep(2)
-        self.account.name = "wrong_uid"
-        process_community = ProcessConfigureCommunity(self.application,
-                                                    self.account,
-                                                    None, self.password_asker)
-
-        def close_dialog():
-            if process_community.isVisible():
-                process_community.close()
-
-        async def exec_test():
-            srv, port, url = await mock.create_server()
-            self.addCleanup(srv.close)
-            await asyncio.sleep(1)
-            QTest.mouseClick(process_community.lineedit_server, Qt.LeftButton)
-            QTest.keyClicks(process_community.lineedit_server, "127.0.0.1")
-            QTest.mouseDClick(process_community.spinbox_port, Qt.LeftButton)
-            process_community.spinbox_port.setValue(port)
-            self.assertEqual(process_community.stacked_pages.currentWidget(),
-                             process_community.page_node,
-                             msg="Current widget : {0}".format(process_community.stacked_pages.currentWidget().objectName()))
-            self.assertEqual(process_community.lineedit_server.text(), "127.0.0.1")
-            self.assertEqual(process_community.spinbox_port.value(), port)
-            QTest.mouseClick(process_community.button_connect, Qt.LeftButton)
-            await asyncio.sleep(1)
-            self.assertEqual(mock.get_request(0).method, 'GET')
-            self.assertEqual(mock.get_request(0).url, '/network/peering')
-            self.assertEqual(process_community.label_error.text(), """Your pubkey or UID is different on the network.
-Yours : wrong_uid, the network : john""")
-            await mock.close()
-            process_community.close()
-
-        self.lp.call_later(15, close_dialog)
-        asyncio.ensure_future(exec_test())
-        self.lp.run_until_complete(process_community.async_exec())
-        self.assertEqual(process_community.result(), QDialog.Rejected)
-
-    def test_connect_community_success(self):
-        mock = nice_blockchain.get_mock(self.lp)
-        time.sleep(2)
-        process_community = ProcessConfigureCommunity(self.application,
-                                                    self.account,
-                                                    None, self.password_asker)
-
-        def close_dialog():
-            if process_community.isVisible():
-                process_community.close()
-
-        async def exec_test():
-            srv, port, url = await mock.create_server()
-            QTest.mouseClick(process_community.lineedit_server, Qt.LeftButton)
-            QTest.keyClicks(process_community.lineedit_server, "127.0.0.1")
-            QTest.mouseDClick(process_community.spinbox_port, Qt.LeftButton)
-            process_community.spinbox_port.setValue(port)
-            self.assertEqual(process_community.stacked_pages.currentWidget(),
-                             process_community.page_node,
-                             msg="Current widget : {0}".format(process_community.stacked_pages.currentWidget().objectName()))
-            self.assertEqual(process_community.lineedit_server.text(), "127.0.0.1")
-            self.assertEqual(process_community.spinbox_port.value(), port)
-            QTest.mouseClick(process_community.button_connect, Qt.LeftButton)
-            await asyncio.sleep(1)
-            self.assertEqual(mock.get_request(0).method, 'GET')
-            self.assertEqual(mock.get_request(0).url, '/network/peering')
-            self.assertEqual(mock.get_request(1).method, 'GET')
-            self.assertEqual(mock.get_request(1).url,
-                             '/wot/certifiers-of/7Aqw6Efa9EzE7gtsc8SveLLrM7gm6NEGoywSv4FJx6pZ')
-            self.assertEqual(process_community.stacked_pages.currentWidget(),
-                             process_community.page_add_nodes,
-                             msg="Current widget : {0}".format(process_community.stacked_pages.currentWidget().objectName()))
-            await mock.close()
-            QTest.mouseClick(process_community.button_next, Qt.LeftButton)
-
-        self.lp.call_later(15, close_dialog)
-        asyncio.ensure_future(exec_test())
-        self.lp.run_until_complete(process_community.async_exec())
\ No newline at end of file
diff --git a/src/sakia/tests/functional/test_certification_dialog.py b/src/sakia/tests/functional/test_certification_dialog.py
new file mode 100644
index 0000000000000000000000000000000000000000..a95f107c68f76181e7f9429b509c5050a4288d9a
--- /dev/null
+++ b/src/sakia/tests/functional/test_certification_dialog.py
@@ -0,0 +1,30 @@
+import asyncio
+import pytest
+from duniterpy.documents import Certification
+from PyQt5.QtCore import QLocale, Qt
+from PyQt5.QtTest import QTest
+from PyQt5.QtWidgets import QDialogButtonBox, QApplication, QMessageBox
+from sakia.gui.dialogs.certification.controller import CertificationController
+
+
+@pytest.mark.asyncio
+async def test_certification_init_community(application_with_one_connection, fake_server, bob, alice):
+    certification_dialog = CertificationController.create(None, application_with_one_connection)
+
+    def close_dialog():
+        if certification_dialog.view.isVisible():
+            certification_dialog.view.close()
+
+    async def exec_test():
+        certification_dialog.model.connection.password = bob.password
+        certification_dialog.view.radio_pubkey.setChecked(True)
+        assert certification_dialog.view.edit_pubkey.isEnabled() is True
+        QTest.keyClicks(certification_dialog.view.edit_pubkey, alice.key.pubkey)
+        QTest.mouseClick(certification_dialog.view.button_box.button(QDialogButtonBox.Ok), Qt.LeftButton)
+        await asyncio.sleep(0.1)
+        assert Certification is type(fake_server.forge.pool[0])
+
+    application_with_one_connection.loop.call_later(10, close_dialog)
+    asyncio.ensure_future(exec_test())
+    await certification_dialog.async_exec()
+    await fake_server.close()
diff --git a/src/sakia/tests/functional/test_connection_cfg_dialog.py b/src/sakia/tests/functional/test_connection_cfg_dialog.py
index 03c41d68ca1bf7edcfea991cdb222076a5335ed8..d7f4212400b5608b4c177c783e841b44aa961c2c 100644
--- a/src/sakia/tests/functional/test_connection_cfg_dialog.py
+++ b/src/sakia/tests/functional/test_connection_cfg_dialog.py
@@ -1,8 +1,6 @@
 import asyncio
-import logging
-import sys
 import pytest
-from PyQt5.QtCore import QLocale, Qt
+from PyQt5.QtCore import Qt
 from PyQt5.QtTest import QTest
 from sakia.data.processors import ConnectionsProcessor
 from sakia.gui.dialogs.connection_cfg import ConnectionConfigController
@@ -85,3 +83,60 @@ async def test_connect(application, simple_fake_server, bob):
     asyncio.ensure_future(exec_test())
     await connection_config_dialog.async_exec()
     await simple_fake_server.close()
+
+
+@pytest.mark.asyncio
+async def test_connect_wrong_uid(application, simple_fake_server, wrong_bob_uid, bob):
+    connection_config_dialog = ConnectionConfigController.create_connection(None, application)
+
+    def close_dialog():
+        if connection_config_dialog.view.isVisible():
+            connection_config_dialog.view.close()
+
+    async def exec_test():
+        await asyncio.sleep(1)
+        QTest.keyClicks(connection_config_dialog.view.edit_server, simple_fake_server.peer_doc().endpoints[0].ipv4)
+        connection_config_dialog.view.spinbox_port.setValue(simple_fake_server.peer_doc().endpoints[0].port)
+        assert connection_config_dialog.view.stacked_pages.currentWidget() == connection_config_dialog.view.page_node
+        QTest.mouseClick(connection_config_dialog.view.button_connect, Qt.LeftButton)
+        await asyncio.sleep(1)
+        assert connection_config_dialog.view.stacked_pages.currentWidget() == connection_config_dialog.view.page_connection
+        assert_key_parameters_behaviour(connection_config_dialog, wrong_bob_uid)
+        QTest.mouseClick(connection_config_dialog.view.button_next, Qt.LeftButton)
+        assert connection_config_dialog.view.label_info.text(), """Your pubkey or UID is different on the network.
+Yours : {0}, the network : {1}""".format(wrong_bob_uid.uid, bob.uid)
+        connection_config_dialog.view.close()
+
+    application.loop.call_later(10, close_dialog)
+    asyncio.ensure_future(exec_test())
+    await connection_config_dialog.async_exec()
+    await simple_fake_server.close()
+
+
+@pytest.mark.asyncio
+async def test_connect_wrong_pubkey(application, simple_fake_server, wrong_bob_pubkey, bob):
+    connection_config_dialog = ConnectionConfigController.create_connection(None, application)
+
+    def close_dialog():
+        if connection_config_dialog.view.isVisible():
+            connection_config_dialog.view.close()
+
+    async def exec_test():
+        await asyncio.sleep(1)
+        QTest.keyClicks(connection_config_dialog.view.edit_server, simple_fake_server.peer_doc().endpoints[0].ipv4)
+        connection_config_dialog.view.spinbox_port.setValue(simple_fake_server.peer_doc().endpoints[0].port)
+        assert connection_config_dialog.view.stacked_pages.currentWidget() == connection_config_dialog.view.page_node
+        QTest.mouseClick(connection_config_dialog.view.button_connect, Qt.LeftButton)
+        await asyncio.sleep(1)
+        assert connection_config_dialog.view.stacked_pages.currentWidget() == connection_config_dialog.view.page_connection
+        assert_key_parameters_behaviour(connection_config_dialog, wrong_bob_pubkey)
+        QTest.mouseClick(connection_config_dialog.view.button_next, Qt.LeftButton)
+        assert connection_config_dialog.view.label_info.text(), """Your pubkey or UID is different on the network.
+Yours : {0}, the network : {1}""".format(wrong_bob_pubkey.pubkey, bob.pubkey)
+        connection_config_dialog.view.close()
+
+    application.loop.call_later(10, close_dialog)
+    asyncio.ensure_future(exec_test())
+    await connection_config_dialog.async_exec()
+    await simple_fake_server.close()
+