diff --git a/src/sakia/data/graphs/base_graph.py b/src/sakia/data/graphs/base_graph.py
index 5e9c303f4b6cf513e36fdae25f3b970dbc138e86..8c3544c5d3d6ee4de1dfa8b09e764865a282043e 100644
--- a/src/sakia/data/graphs/base_graph.py
+++ b/src/sakia/data/graphs/base_graph.py
@@ -66,11 +66,14 @@ class BaseGraph(QObject):
         """
         # new node
         node_status = NodeStatus.NEUTRAL
-        if node_identity.pubkey == account_identity.pubkey:
-            node_status += NodeStatus.HIGHLIGHTED
-        if node_identity.member is False:
-            node_status += NodeStatus.OUT
-        return node_status
+        try:
+            if node_identity.pubkey == account_identity.pubkey:
+                node_status += NodeStatus.HIGHLIGHTED
+            if node_identity.member is False:
+                node_status += NodeStatus.OUT
+            return node_status
+        except AttributeError:
+            pass
 
     def confirmation_text(self, block_number):
         """
@@ -203,6 +206,7 @@ class BaseGraph(QObject):
                 certifier = self.identities_service.get_identity(certification.certifier)
                 if not certifier:
                     certifier = await self.identities_service.find_from_pubkey(certification.certifier)
+                    self.identities_service.insert_or_update_identity(certifier)
                 node_status = await self.node_status(certifier, account_identity)
                 self.add_certifier_node(certifier, identity, certification, node_status)
         except NoPeerAvailable as e:
@@ -222,6 +226,7 @@ class BaseGraph(QObject):
                 certified = self.identities_service.get_identity(certification.certified)
                 if not certified:
                     certified = await self.identities_service.find_from_pubkey(certification.certified)
+                    self.identities_service.insert_or_update_identity(certified)
                 node_status = await self.node_status(certified, account_identity)
                 self.add_certified_node(identity, certified, certification, node_status)
 
diff --git a/src/sakia/data/processors/identities.py b/src/sakia/data/processors/identities.py
index 1ed376057894ad634625db4a3043a6d633608b01..8252252894408a979639eeb7c169a938e0c5d84a 100644
--- a/src/sakia/data/processors/identities.py
+++ b/src/sakia/data/processors/identities.py
@@ -153,7 +153,7 @@ class IdentitiesProcessor:
                                                                   req_args={'search': identity.pubkey})
                 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']
+                identity.member = identity_data['membershipExpiresIn'] > 0
                 identity.outdistanced = identity_data['outdistanced']
                 self.insert_or_update_identity(identity)
         except errors.DuniterError as e:
diff --git a/src/sakia/services/identities.py b/src/sakia/services/identities.py
index cdb35def4702b243b2c5ff5a2a328d3156fdd7bd..fd8483711ee5e1d4d212fe955e0204998899b8f9 100644
--- a/src/sakia/services/identities.py
+++ b/src/sakia/services/identities.py
@@ -377,12 +377,12 @@ class IdentitiesService(QObject):
             identity.blockstamp = block_uid(identity_data["meta"]["timestamp"])
             identity.timestamp = await self._blockchain_processor.timestamp(self.currency, identity.blockstamp.number)
             identity.outdistanced = identity_data["outdistanced"]
-            identity.member = identity_data["membershipExpiresIn"] > 0 and not identity_data["outdistanced"]
+            identity.member = identity_data["membershipExpiresIn"] > 0
             median_time = self._blockchain_processor.time(self.currency)
             expiration_time = self._blockchain_processor.parameters(self.currency).ms_validity
             identity.membership_timestamp = median_time - (expiration_time - identity_data["membershipExpiresIn"])
             # We save connections pubkeys
-            if identity.pubkey in self._connections_processor.pubkeys():
+            if self._identities_processor.get_identity(self.currency, identity.pubkey, identity.uid):
                 self._identities_processor.insert_or_update_identity(identity)
         except errors.DuniterError as e:
             if e.ucode == errors.NO_MEMBER_MATCHING_PUB_OR_UID:
@@ -431,6 +431,9 @@ class IdentitiesService(QObject):
         """
         return await self._identities_processor.lookup(self.currency, text)
 
+    def insert_or_update_identity(self, identity):
+        return self._identities_processor.insert_or_update_identity(identity)
+
     def get_identity(self, pubkey, uid=""):
         return self._identities_processor.get_identity(self.currency, pubkey, uid)