diff --git a/src/cutecoin/core/account.py b/src/cutecoin/core/account.py
index f11fdeda6efb1be7add130ef20bec623f77e87da..a7dafaece39dadceb3ca5baeec9a68c9120832dc 100644
--- a/src/cutecoin/core/account.py
+++ b/src/cutecoin/core/account.py
@@ -10,8 +10,6 @@ from ucoinpy.key import SigningKey
 
 import logging
 import time
-import math
-import json
 import asyncio
 
 from PyQt5.QtCore import QObject, pyqtSignal, QCoreApplication, QT_TRANSLATE_NOOP
@@ -19,7 +17,7 @@ from PyQt5.QtNetwork import QNetworkReply
 
 from .wallet import Wallet
 from .community import Community
-from .registry import Identity, IdentitiesRegistry
+from .registry import LocalState
 from ..tools.exceptions import ContactAlreadyExists
 from ..core.net.api import bma as qtbma
 from ..core.net.api.bma import PROTOCOL_VERSION
@@ -283,8 +281,8 @@ class Account(QObject):
         :return: The account identity in the community
         :rtype: cutecoin.core.registry.Identity
         """
-        identity = self._identities_registry.lookup(self.pubkey, community)
-        if identity.status == Identity.NOT_FOUND:
+        identity = self._identities_registry.find(self.pubkey, community)
+        if identity.local_state == LocalState.NOT_FOUND:
             identity.uid = self.name
         return identity
 
diff --git a/src/cutecoin/core/graph.py b/src/cutecoin/core/graph.py
index 64d9955f8036f51c43813aafaf9ab815a7bc2caf..9ec2ed88b6eb3107f5c107440addfe6288eb8b70 100644
--- a/src/cutecoin/core/graph.py
+++ b/src/cutecoin/core/graph.py
@@ -88,11 +88,11 @@ class Graph(object):
             if node['id'] in tuple(done):
                 continue
             identity_selected = identity.from_metadata(node)
-            certifier_list = identity_selected.certifiers_of(self.community)
+            certifier_list = identity_selected.certifiers_of(self.app.identities_registry, self.community)
             self.add_certifier_list(certifier_list, identity_selected, identity)
             if identity.pubkey in tuple(self._graph.keys()):
                 return False
-            certified_list = identity_selected.certified_by(self.community)
+            certified_list = identity_selected.certified_by(self.app.identities_registry, self.community)
             self.add_certified_list(certified_list, identity_selected, identity)
             if identity.pubkey in tuple(self._graph.keys()):
                 return False
@@ -141,30 +141,30 @@ class Graph(object):
         #  add certifiers of uid
         for certifier in tuple(certifier_list):
             # add only valid certification...
-            if (time.time() - certifier['cert_time']['medianTime']) > self.signature_validity:
+            if (time.time() - certifier['cert_time']) > self.signature_validity:
                 continue
             # new node
-            if certifier['pubkey'] not in self._graph.keys():
+            if certifier['identity'].pubkey not in self._graph.keys():
                 node_status = 0
-                if certifier['pubkey'] == identity_account.pubkey:
+                if certifier['identity'].pubkey == identity_account.pubkey:
                     node_status += NODE_STATUS_HIGHLIGHTED
-                if certifier['isMember'] is False:
+                if certifier['identity'].is_member(self.community) is False:
                     node_status += NODE_STATUS_OUT
-                self._graph[certifier['pubkey']] = {
-                    'id': certifier['pubkey'],
+                self._graph[certifier['identity'].pubkey] = {
+                    'id': certifier['identity'].pubkey,
                     'arcs': list(),
-                    'text': certifier['uid'],
-                    'tooltip': certifier['pubkey'],
+                    'text': certifier['identity'].uid,
+                    'tooltip': certifier['identity'].pubkey,
                     'status': node_status,
                     'connected': [identity.pubkey]
                 }
 
             # keep only the latest certification
-            if self._graph[certifier['pubkey']]['arcs']:
-                if certifier['cert_time']['medianTime'] < self._graph[certifier['pubkey']]['arcs'][0]['cert_time']:
+            if self._graph[certifier['identity'].pubkey]['arcs']:
+                if certifier['cert_time'] < self._graph[certifier['identity'].pubkey]['arcs'][0]['cert_time']:
                     continue
             # display validity status
-            if (time.time() - certifier['cert_time']['medianTime']) > self.ARC_STATUS_STRONG_time:
+            if (time.time() - certifier['cert_time']) > self.ARC_STATUS_STRONG_time:
                 arc_status = ARC_STATUS_WEAK
             else:
                 arc_status = ARC_STATUS_STRONG
@@ -173,17 +173,17 @@ class Graph(object):
                 'status': arc_status,
                 'tooltip': QLocale.toString(
                     QLocale(),
-                    QDateTime.fromTime_t(certifier['cert_time']['medianTime'] + self.signature_validity).date(),
+                    QDateTime.fromTime_t(certifier['cert_time'] + self.signature_validity).date(),
                     QLocale.dateFormat(QLocale(), QLocale.ShortFormat)
                 ),
-                'cert_time': certifier['cert_time']['medianTime']
+                'cert_time': certifier['cert_time']
             }
             #  add arc to certifier
-            self._graph[certifier['pubkey']]['arcs'].append(arc)
+            self._graph[certifier['identity'].pubkey]['arcs'].append(arc)
             # if certifier node not in identity nodes
-            if certifier['pubkey'] not in tuple(self._graph[identity.pubkey]['connected']):
+            if certifier['identity'].pubkey not in tuple(self._graph[identity.pubkey]['connected']):
                 # add certifier node to identity node
-                self._graph[identity.pubkey]['connected'].append(certifier['pubkey'])
+                self._graph[identity.pubkey]['connected'].append(certifier['identity'].pubkey)
 
     def add_certified_list(self, certified_list, identity, identity_account):
         """
@@ -196,36 +196,36 @@ class Graph(object):
         # add certified by uid
         for certified in tuple(certified_list):
             # add only valid certification...
-            if (time.time() - certified['cert_time']['medianTime']) > self.signature_validity:
+            if (time.time() - certified['cert_time']) > self.signature_validity:
                 continue
-            if certified['pubkey'] not in self._graph.keys():
+            if certified['identity'].pubkey not in self._graph.keys():
                 node_status = 0
-                if certified['pubkey'] == identity_account.pubkey:
+                if certified['identity'].pubkey == identity_account.pubkey:
                     node_status += NODE_STATUS_HIGHLIGHTED
-                if certified['isMember'] is False:
+                if certified['identity'].is_member(self.community) is False:
                     node_status += NODE_STATUS_OUT
-                self._graph[certified['pubkey']] = {
-                    'id': certified['pubkey'],
+                self._graph[certified['identity'].pubkey] = {
+                    'id': certified['identity'].pubkey,
                     'arcs': list(),
-                    'text': certified['uid'],
-                    'tooltip': certified['pubkey'],
+                    'text': certified['identity'].uid,
+                    'tooltip': certified['identity'].pubkey,
                     'status': node_status,
                     'connected': [identity.pubkey]
                 }
             # display validity status
-            if (time.time() - certified['cert_time']['medianTime']) > self.ARC_STATUS_STRONG_time:
+            if (time.time() - certified['cert_time']) > self.ARC_STATUS_STRONG_time:
                 arc_status = ARC_STATUS_WEAK
             else:
                 arc_status = ARC_STATUS_STRONG
             arc = {
-                'id': certified['pubkey'],
+                'id': certified['identity'].pubkey,
                 'status': arc_status,
                 'tooltip': QLocale.toString(
                     QLocale(),
-                    QDateTime.fromTime_t(certified['cert_time']['medianTime'] + self.signature_validity).date(),
+                    QDateTime.fromTime_t(certified['cert_time'] + self.signature_validity).date(),
                     QLocale.dateFormat(QLocale(), QLocale.ShortFormat)
                 ),
-                'cert_time': certified['cert_time']['medianTime']
+                'cert_time': certified['cert_time']
             }
 
             # replace old arc if this one is more recent
@@ -245,9 +245,9 @@ class Graph(object):
                 # add arc in graph
                 self._graph[identity.pubkey]['arcs'].append(arc)
             # if certified node not in identity nodes
-            if certified['pubkey'] not in tuple(self._graph[identity.pubkey]['connected']):
+            if certified['identity'].pubkey not in tuple(self._graph[identity.pubkey]['connected']):
                 # add certified node to identity node
-                self._graph[identity.pubkey]['connected'].append(certified['pubkey'])
+                self._graph[identity.pubkey]['connected'].append(certified['identity'].pubkey)
 
     def add_identity(self, identity, status=None, arcs=None, connected=None):
         """
diff --git a/src/cutecoin/core/registry/__init__.py b/src/cutecoin/core/registry/__init__.py
index 4ab046a19ff274331c3bc1ffd25e16bd19985478..5180c368bb56a87483d542c19bb83c71133d1a94 100644
--- a/src/cutecoin/core/registry/__init__.py
+++ b/src/cutecoin/core/registry/__init__.py
@@ -1,2 +1,2 @@
 from .identities import IdentitiesRegistry
-from .identity import Identity
\ No newline at end of file
+from .identity import Identity, LocalState, BlockchainState
\ No newline at end of file
diff --git a/src/cutecoin/core/registry/identities.py b/src/cutecoin/core/registry/identities.py
index 3810908a3f044f9d314ab133f87ebc7dd0f7cb2f..12eb705abfe0dd503a27b2463e1dd262977620d2 100644
--- a/src/cutecoin/core/registry/identities.py
+++ b/src/cutecoin/core/registry/identities.py
@@ -1,6 +1,6 @@
-from PyQt5.QtNetwork import QNetworkReply
+from PyQt5.QtNetwork import QNetworkReply, QNetworkRequest
 from cutecoin.core.net.api import bma as qtbma
-from .identity import Identity
+from .identity import Identity, LocalState, BlockchainState
 
 import json
 import asyncio
@@ -42,7 +42,7 @@ class IdentitiesRegistry:
             identities_json.append(identity.jsonify())
         return {'registry': identities_json}
 
-    def lookup(self, pubkey, community):
+    def find(self, pubkey, community):
         """
         Get a person from the pubkey found in a community
 
@@ -61,31 +61,60 @@ class IdentitiesRegistry:
         else:
             identity = Identity.empty(pubkey)
             self._instances[pubkey] = identity
-            reply = community.bma_access.simple_request(qtbma.wot.Lookup, req_args={'search': pubkey})
-            reply.finished.connect(lambda: self.handle_lookup(reply, identity, community))
+            reply = community.bma_access.simple_request(qtbma.wot.CertifiersOf, req_args={'search': pubkey})
+            reply.finished.connect(lambda: self.handle_certifiersof(reply, identity, community))
         return identity
 
     @asyncio.coroutine
-    def future_lookup(self, pubkey, community):
-        def handle_reply(reply):
-            strdata = bytes(reply.readAll()).decode('utf-8')
-            data = json.loads(strdata)
-
-            timestamp = 0
-            for result in data['results']:
-                if result["pubkey"] == identity.pubkey:
-                    uids = result['uids']
-                    identity_uid = ""
-                    for uid_data in uids:
-                        if uid_data["meta"]["timestamp"] > timestamp:
-                            timestamp = uid_data["meta"]["timestamp"]
-                            identity_uid = uid_data["uid"]
-                    identity.uid = identity_uid
-                    identity.status = Identity.FOUND
+    def future_find(self, pubkey, community):
+        def handle_certifiersof_reply(reply, tries=0):
+            if reply.error() == QNetworkReply.NoError:
+                status_code = reply.attribute(QNetworkRequest.HttpStatusCodeAttribute)
+                if status_code == 200:
+                    strdata = bytes(reply.readAll()).decode('utf-8')
+                    data = json.loads(strdata)
+
+                    identity.uid = data['uid']
+                    identity.local_state = LocalState.PARTIAL
+                    identity.blockchain_state = BlockchainState.VALIDATED
                     logging.debug("Lookup : found {0}".format(identity))
                     future_identity.set_result(True)
-                    return
-            future_identity.set_result(True)
+                else:
+                    reply = community.bma_access.simple_request(qtbma.wot.Lookup,
+                                                                req_args={'search': pubkey})
+                    reply.finished.connect(lambda: handle_lookup_reply(reply))
+            elif tries < 3:
+                reply = community.bma_access.simple_request(qtbma.wot.CertifiersOf, req_args={'search': pubkey})
+                reply.finished.connect(lambda: handle_certifiersof_reply(reply, tries=tries+1))
+            else:
+                future_identity.set_result(False)
+
+        def handle_lookup_reply(reply, tries=0):
+            status_code = reply.attribute(QNetworkRequest.HttpStatusCodeAttribute)
+            if reply.error() == QNetworkReply.NoError and status_code == 200:
+                strdata = bytes(reply.readAll()).decode('utf-8')
+                data = json.loads(strdata)
+
+                timestamp = 0
+                for result in data['results']:
+                    if result["pubkey"] == identity.pubkey:
+                        uids = result['uids']
+                        identity_uid = ""
+                        for uid_data in uids:
+                            if uid_data["meta"]["timestamp"] > timestamp:
+                                timestamp = uid_data["meta"]["timestamp"]
+                                identity_uid = uid_data["uid"]
+                        identity.uid = identity_uid
+                        identity.status = Identity.FOUND
+                        logging.debug("Lookup : found {0}".format(identity))
+                        future_identity.set_result(True)
+                        return
+                future_identity.set_result(True)
+            elif tries < 3:
+                reply = community.bma_access.simple_request(qtbma.wot.Lookup, req_args={'search': pubkey})
+                reply.finished.connect(lambda: handle_lookup_reply(reply, tries=tries+1))
+            else:
+                future_identity.set_result(False)
 
         future_identity = asyncio.Future()
         if pubkey in self._instances:
@@ -94,11 +123,41 @@ class IdentitiesRegistry:
         else:
             identity = Identity.empty(pubkey)
             self._instances[pubkey] = identity
-            reply = community.bma_access.simple_request(qtbma.wot.Lookup, req_args={'search': pubkey})
-            reply.finished.connect(lambda: handle_reply(reply))
+            reply = community.bma_access.simple_request(qtbma.wot.CertifiersOf, req_args={'search': pubkey})
+            reply.finished.connect(lambda: handle_certifiersof_reply(reply))
         yield from future_identity
         return identity
 
+    def handle_certifiersof(self, reply, identity, community, tries=0):
+        """
+        :param PyQt5.QtNetwork.QNetworkReply reply
+        :param cutecoin.core.registry.identity.Identity identity: The looked up identity
+        :return:
+        """
+        if reply.error() == QNetworkReply.NoError:
+            status_code = reply.attribute(QNetworkRequest.HttpStatusCodeAttribute)
+            if status_code == 200:
+                strdata = bytes(reply.readAll()).decode('utf-8')
+                data = json.loads(strdata)
+                identity.uid = data['uid']
+                identity.local_state = LocalState.PARTIAL
+                identity.blockchain_state = BlockchainState.VALIDATED
+                logging.debug("Lookup : found {0}".format(identity))
+                identity.inner_data_changed.emit(str(qtbma.wot.CertifiersOf))
+            else:
+                reply = community.bma_access.simple_request(qtbma.wot.Lookup,
+                                                            req_args={'search': identity.pubkey})
+                reply.finished.connect(lambda: self.handle_lookup(reply, identity,
+                                                                  community, tries=0))
+        else:
+            logging.debug("Error in reply : {0}".format(reply.error()))
+            if tries < 3:
+                tries += 1
+                reply = community.bma_access.simple_request(qtbma.wot.CertifiersOf,
+                                                            req_args={'search': identity.pubkey})
+                reply.finished.connect(lambda: self.handle_certifiersof(reply, identity,
+                                                                  community, tries=tries))
+
     def handle_lookup(self, reply, identity, community, tries=0):
         """
         :param cutecoin.core.registry.identity.Identity identity: The looked up identity
@@ -131,7 +190,7 @@ class IdentitiesRegistry:
                 reply.finished.connect(lambda: self.handle_lookup(reply, identity,
                                                                   community, tries=tries))
 
-    def from_metadata(self, metadata):
+    def from_handled_data(self, uid, pubkey, blockchain_state):
         """
         Get a person from a metadata dict.
         A metadata dict has a 'text' key corresponding to the person uid,
@@ -140,10 +199,23 @@ class IdentitiesRegistry:
         :param dict metadata: The person metadata
         :return: A new person if pubkey wasn't knwon, else the existing instance.
         """
-        pubkey = metadata['id']
         if pubkey in self._instances:
+            if self._instances[pubkey].blockchain_state == BlockchainState.NOT_FOUND:
+                self._instances[pubkey].blockchain_state = blockchain_state
+            elif self._instances[pubkey].blockchain_state != BlockchainState.VALIDATED \
+                    and blockchain_state == BlockchainState.VALIDATED:
+                self._instance[pubkey].blockchain_state = blockchain_state
+                self._instances[pubkey].inner_data_changed.emit()
+
+            if self._instances[pubkey].uid != uid:
+                self._instances[pubkey].uid = uid
+                self._instances[pubkey].inner_data_changed.emit()
+
+            if self._instances[pubkey].local_state == LocalState.NOT_FOUND:
+                self._instances[pubkey].local_state = LocalState.COMPLETED
+
             return self._instances[pubkey]
         else:
-            identity = Identity.from_metadata(metadata)
+            identity = Identity.from_handled_data(uid, pubkey, blockchain_state)
             self._instances[pubkey] = identity
             return identity
diff --git a/src/cutecoin/core/registry/identity.py b/src/cutecoin/core/registry/identity.py
index f0179cea8d345136e83e51f5c93279e8550280e5..e3757852621dabc8da4cc89f622c32f794c5cf6b 100644
--- a/src/cutecoin/core/registry/identity.py
+++ b/src/cutecoin/core/registry/identity.py
@@ -7,6 +7,7 @@ Created on 11 févr. 2014
 import logging
 import time
 import asyncio
+from enum import Enum
 
 from ucoinpy.documents.certification import SelfCertification
 from cutecoin.tools.exceptions import Error, NoPeerAvailable,\
@@ -16,36 +17,46 @@ from cutecoin.core.net.api.bma import PROTOCOL_VERSION
 from PyQt5.QtCore import QObject, pyqtSignal
 
 
+class LocalState(Enum):
+    NOT_FOUND = 0
+    PARTIAL = 1
+    COMPLETED = 2
+
+
+class BlockchainState(Enum):
+    NOT_FOUND = 0
+    BUFFERED = 1
+    VALIDATED = 2
+
+
 class Identity(QObject):
     """
     A person with a uid and a pubkey
     """
-    FOUND = 1
-    NOT_FOUND = 0
-
     inner_data_changed = pyqtSignal(str)
 
-    def __init__(self, uid, pubkey, status):
+    def __init__(self, uid, pubkey, local_state, blockchain_state):
         """
         Initializing a person object.
 
         :param str uid: The person uid, also known as its uid on the network
         :param str pubkey: The person pubkey
-        :param int status: The local status of the identity
+        :param LocalState local_state: The local status of the identity
+        :param BlockchainState blockchain_state: The blockchain status of the identity
         """
         super().__init__()
-        assert(status in (Identity.FOUND, Identity.NOT_FOUND))
         self.uid = uid
         self.pubkey = pubkey
-        self.status = status
+        self.local_state = local_state
+        self.blockchain_state = blockchain_state
 
     @classmethod
     def empty(cls, pubkey):
-        return cls("", pubkey, Identity.NOT_FOUND)
+        return cls("", pubkey, LocalState.NOT_FOUND, BlockchainState.NOT_FOUND)
 
     @classmethod
-    def from_metadata(cls, metadata):
-        return cls(metadata["text"], metadata["id"], Identity.NOT_FOUND)
+    def from_handled_data(cls, uid, pubkey, blockchain_state):
+        return cls(uid, pubkey, LocalState.COMPLETED, blockchain_state)
 
     @classmethod
     def from_json(cls, json_data):
@@ -57,9 +68,10 @@ class Identity(QObject):
         """
         pubkey = json_data['pubkey']
         uid = json_data['uid']
-        status = json_data['status']
+        local_state = json_data['local_state']
+        blockchain_state = json_data['blockchain_state']
 
-        return cls(uid, pubkey, status)
+        return cls(uid, pubkey, local_state, blockchain_state)
 
     @asyncio.coroutine
     def selfcert(self, community):
@@ -185,104 +197,114 @@ class Identity(QObject):
             return certifiers['isMember']
         return False
 
-    def certifiers_of(self, community):
+    def certifiers_of(self, identities_registry, community):
         """
         Get the list of this person certifiers
 
+        :param cutecoin.core.registry.identities.IdentitiesRegistry identities_registry: The identities registry
         :param cutecoin.core.community.Community community: The community target to request the join date
-        :return: The list of the certifiers of this community in BMA json format
+        :return: The list of the certifiers of this community
         """
-        certifiers = community.bma_access.get(self, qtbma.wot.CertifiersOf, {'search': self.pubkey})
+        data = community.bma_access.get(self, qtbma.wot.CertifiersOf, {'search': self.pubkey})
 
-        if certifiers == qtbma.wot.CertifiersOf.null_value:
+        certifiers = list()
+
+        if data == qtbma.wot.CertifiersOf.null_value:
             logging.debug('bma.wot.CertifiersOf request error')
             data = community.bma_access.get(self, qtbma.wot.Lookup, {'search': self.pubkey})
             if data == qtbma.wot.Lookup.null_value:
                 logging.debug('bma.wot.Lookup request error')
-                return list()
-
-            # convert api data to certifiers list
-            certifiers = list()
-            # add certifiers of uid
-
-            for result in data['results']:
-                if result["pubkey"] == self.pubkey:
-                    for uid_data in result['uids']:
-                        for certifier_data in uid_data['others']:
-                            for uid in certifier_data['uids']:
-                            # add a certifier
-                                certifier = {}
-                                certifier['uid'] = uid
-                                certifier['pubkey'] = certifier_data['pubkey']
-                                certifier['isMember'] = certifier_data['isMember']
-                                certifier['cert_time'] = dict()
-                                certifier['cert_time']['medianTime'] = community.get_block(
-                                    certifier_data['meta']['block_number'])['medianTime']
-                                certifiers.append(certifier)
-            return certifiers
-
-        return certifiers['certifications']
-
-    def unique_valid_certifiers_of(self, community):
-        certifier_list = self.certifiers_of(community)
+            else:
+                for result in data['results']:
+                    if result["pubkey"] == self.pubkey:
+                        for uid_data in result['uids']:
+                            for certifier_data in uid_data['others']:
+                                for uid in certifier_data['uids']:
+                                    # add a certifier
+                                    certifier = {}
+                                    certifier['identity'] = identities_registry.from_handled_data(uid, certifier_data['pubkey'],
+                                                                          BlockchainState.BUFFERED)
+                                    block = community.bma_access.get(self, qtbma.blockchain.Block,
+                                                                         {'number': certifier_data['meta']['block_number']})
+                                    certifier['cert_time'] = block['medianTime']
+                                    certifiers.append(certifier)
+        else:
+            for certifier_data in data['certifications']:
+                certifier = {}
+                certifier['identity'] = identities_registry.from_handled_data(certifier_data['uid'],
+                                                                              certifier_data['pubkey'],
+                                                                              BlockchainState.VALIDATED)
+                certifier['cert_time'] = certifier_data['cert_time']['medianTime']
+                certifiers.append(certifier)
+        return certifiers
+
+    def unique_valid_certifiers_of(self, identities_registry, community):
+        certifier_list = self.certifiers_of(identities_registry, community)
         unique_valid = []
         #  add certifiers of uid
         for certifier in tuple(certifier_list):
             # add only valid certification...
-            if community.certification_expired(certifier['cert_time']['medianTime']):
+            if community.certification_expired(certifier['cert_time']):
                 continue
 
             # keep only the latest certification
-            already_found = [c['pubkey'] for c in unique_valid]
-            if certifier['pubkey'] in already_found:
-                index = already_found.index(certifier['pubkey'])
-                if certifier['cert_time']['medianTime'] > unique_valid[index]['cert_time']['medianTime']:
+            already_found = [c['identity'].pubkey for c in unique_valid]
+            if certifier['identity'].pubkey in already_found:
+                index = already_found.index(certifier['identity'].pubkey)
+                if certifier['cert_time'] > unique_valid[index]['cert_time']:
                     unique_valid[index] = certifier
             else:
                 unique_valid.append(certifier)
         return unique_valid
 
-    def certified_by(self, community):
+    def certified_by(self, identities_registry, community):
         """
         Get the list of persons certified by this person
 
         :param cutecoin.core.community.Community community: The community target to request the join date
         :return: The list of the certified persons of this community in BMA json format
         """
-        certified_list = community.bma_access.get(self, qtbma.wot.CertifiedBy, {'search': self.pubkey})
-        if certified_list == qtbma.wot.CertifiedBy.null_value:
+        data = community.bma_access.get(self, qtbma.wot.CertifiedBy, {'search': self.pubkey})
+        certified_list = list()
+        if data == qtbma.wot.CertifiedBy.null_value:
             logging.debug('bma.wot.CertifiersOf request error')
             data = community.bma_access.get(self, qtbma.wot.Lookup, {'search': self.pubkey})
             if data == qtbma.wot.Lookup.null_value:
                 logging.debug('bma.wot.Lookup request error')
-                return list()
             else:
-                certified_list = list()
                 for result in data['results']:
                     if result["pubkey"] == self.pubkey:
-                        for certified in result['signed']:
-                            certified['cert_time'] = dict()
-                            certified['cert_time']['medianTime'] = certified['meta']['timestamp']
+                        for certified_data in result['signed']:
+                            certified = {}
+                            certified['identity'] = identities_registry.from_handled_data(certified_data['uid'],
+                                                                              certified_data['pubkey'],
+                                                                              BlockchainState.BUFFERED)
+                            certified['cert_time'] = certified_data['meta']['timestamp']
                             certified_list.append(certified)
-
-            return certified_list
-
-        return certified_list['certifications']
-
-    def unique_valid_certified_by(self, community):
-        certified_list = self.certified_by(community)
+        else:
+            for certified_data in data['certifications']:
+                certified = {}
+                certified['identity'] = identities_registry.from_handled_data(certified_data['uid'],
+                                                                              certified_data['pubkey'],
+                                                                              BlockchainState.VALIDATED)
+                certified['cert_time'] = certified_data['cert_time']['medianTime']
+                certified_list.append(certified)
+        return certified_list
+
+    def unique_valid_certified_by(self, identities_registry, community):
+        certified_list = self.certified_by(identities_registry, community)
         unique_valid = []
         #  add certifiers of uid
         for certified in tuple(certified_list):
             # add only valid certification...
-            if community.certification_expired(certified['cert_time']['medianTime']):
+            if community.certification_expired(certified['cert_time']):
                 continue
 
             # keep only the latest certification
-            already_found = [c['pubkey'] for c in unique_valid]
-            if certified['pubkey'] in already_found:
-                index = already_found.index(certified['pubkey'])
-                if certified['cert_time']['medianTime'] > unique_valid[index]['cert_time']['medianTime']:
+            already_found = [c['identity'].pubkey for c in unique_valid]
+            if certified['identity'].pubkey in already_found:
+                index = already_found.index(certified['identity'].pubkey)
+                if certified['cert_time'] > unique_valid[index]['cert_time']:
                     unique_valid[index] = certified
             else:
                 unique_valid.append(certified)
@@ -303,11 +325,12 @@ class Identity(QObject):
         """
         data = {'uid': self.uid,
                 'pubkey': self.pubkey,
-                'status': self.status}
+                'local_state': self.local_state,
+                'blockchain_state': self.blockchain_state}
         return data
 
     def __str__(self):
-        status_str = ("NOT_FOUND", "FOUND")
-        return "{0} - {1} - {2}".format(self.uid,
+        return "{0} - {1} - {2} - {3}".format(self.uid,
                                         self.pubkey,
-                                        status_str[self.status])
\ No newline at end of file
+                                        self.local_state,
+                                        self.blockchain_state)
diff --git a/src/cutecoin/gui/community_tab.py b/src/cutecoin/gui/community_tab.py
index 35b47cf7fdf65398ba96d1d8ab5ec031b2edbe4f..38caf2856b55550ad36694514ccf8fb7328c3073 100644
--- a/src/cutecoin/gui/community_tab.py
+++ b/src/cutecoin/gui/community_tab.py
@@ -96,7 +96,7 @@ class CommunityTabWidget(QWidget, Ui_CommunityTabWidget):
             pubkey_index = model.sourceModel().index(source_index.row(),
                                                    pubkey_col)
             pubkey = model.sourceModel().data(pubkey_index, Qt.DisplayRole)
-            identity = self.app.identities_registry.lookup(pubkey, self.community)
+            identity = self.app.identities_registry.find(pubkey, self.community)
             menu = QMenu(self)
 
             informations = QAction(self.tr("Informations"), self)
@@ -235,7 +235,7 @@ class CommunityTabWidget(QWidget, Ui_CommunityTabWidget):
         pubkeys = self.community.members_pubkeys()
         identities = []
         for p in pubkeys:
-            identities.append(self.app.identities_registry.lookup(p, self.community))
+            identities.append(self.app.identities_registry.find(p, self.community))
 
         self_identity = self.account.identity(self.community)
 
@@ -266,11 +266,11 @@ class CommunityTabWidget(QWidget, Ui_CommunityTabWidget):
                 raise
 
         account_connections = []
-        for p in self_identity.unique_valid_certifiers_of(self.community):
-            account_connections.append(self.app.identities_registry.lookup(p['pubkey'], self.community))
+        for p in self_identity.unique_valid_certifiers_of(self.app.identities_registry, self.community):
+            account_connections.append(p['identity'])
         certifiers_of = [p for p in account_connections]
-        for p in self_identity.unique_valid_certified_by(self.community):
-            account_connections.append(self.app.identities_registry.lookup(p['pubkey'], self.community))
+        for p in self_identity.unique_valid_certified_by(self.app.identities_registry, self.community):
+            account_connections.append(p['identity'])
         certified_by = [p for p in account_connections
                   if p.pubkey not in [i.pubkey for i in certifiers_of]]
         identities = certifiers_of + certified_by
diff --git a/src/cutecoin/gui/currency_tab.py b/src/cutecoin/gui/currency_tab.py
index 4041e88f4e02bc898c36f9400007e17cc24539e5..04224f0a30856a18e19c95257bbcc43d18298eb1 100644
--- a/src/cutecoin/gui/currency_tab.py
+++ b/src/cutecoin/gui/currency_tab.py
@@ -109,7 +109,7 @@ class CurrencyTabWidget(QWidget, Ui_CurrencyTabWidget):
         logging.debug("Refresh block")
         self.status_info.clear()
         try:
-            person = self.app.identities_registry.lookup(self.app.current_account.pubkey, self.community)
+            person = self.app.identities_registry.find(self.app.current_account.pubkey, self.community)
             expiration_time = person.membership_expiration_time(self.community)
             sig_validity = self.community.parameters['sigValidity']
             warning_expiration_time = int(sig_validity / 3)
@@ -125,7 +125,7 @@ class CurrencyTabWidget(QWidget, Ui_CurrencyTabWidget):
                         toast.display(self.tr("Membership expiration"),
                                   self.tr("<b>Warning : Membership expiration in {0} days</b>").format(days))
 
-            certifiers_of = person.unique_valid_certifiers_of(self.community)
+            certifiers_of = person.unique_valid_certifiers_of(self.app.identities_registry, self.community)
             if len(certifiers_of) < self.community.parameters['sigQty']:
                 self.status_info.append('warning_certifications')
                 if self.app.preferences['notifications']:
diff --git a/src/cutecoin/gui/wallets_tab.py b/src/cutecoin/gui/wallets_tab.py
index ec52c17f5cf87de8638a24e4eaf3ad391117525e..36c27ef130d558daa01b129c4326c2eaa9ed1280 100644
--- a/src/cutecoin/gui/wallets_tab.py
+++ b/src/cutecoin/gui/wallets_tab.py
@@ -71,8 +71,8 @@ class WalletsTabWidget(QWidget, Ui_WalletsTab):
             last_renewal = None
             expiration = None
 
-        certified = identity.unique_valid_certified_by(self.community)
-        certifiers = identity.unique_valid_certifiers_of(self.community)
+        certified = identity.unique_valid_certified_by(self.app.identities_registry, self.community)
+        certifiers = identity.unique_valid_certifiers_of(self.app.identities_registry, self.community)
         if last_renewal and expiration:
             date_renewal = QLocale.toString(
                 QLocale(),
diff --git a/src/cutecoin/gui/wot_tab.py b/src/cutecoin/gui/wot_tab.py
index a3299f1225e84cafccc1ee601ff23e922b45b2f9..ac600f732bfbce87b630243158079c24e8f4d8ba 100644
--- a/src/cutecoin/gui/wot_tab.py
+++ b/src/cutecoin/gui/wot_tab.py
@@ -79,8 +79,8 @@ class WotTabWidget(QWidget, Ui_WotTabWidget):
             identity.inner_data_changed.connect(self.handle_identity_change)
 
         # create Identity from node metadata
-        certifier_list = identity.certifiers_of(self.community)
-        certified_list = identity.certified_by(self.community)
+        certifier_list = identity.certifiers_of(self.app.identities_registry, self.community)
+        certified_list = identity.certified_by(self.app.identities_registry, self.community)
 
         # create empty graph instance
         graph = Graph(self.community)