diff --git a/adapters/duniter_v18/certifications.py b/adapters/duniter_v18/certifications.py
index 62230e88241bcc91cd72eb20edfd81cba48308ba..4497c11b63ede0ef5752c748e7127b0cc53a6f76 100644
--- a/adapters/duniter_v18/certifications.py
+++ b/adapters/duniter_v18/certifications.py
@@ -18,28 +18,61 @@ class LevelDBCertificationsRepository:
 
     def __iter__(self):
         """
-        Iterate over pubkey: str, certifications: dict
+        Iterate over pubkey: str, issuer: dict
+        (with issued certifications updated to their last state)
 
         :return:
         """
         for key, value in self.index.__iter__():
-            yield key.decode("utf-8"), get_certifications_from_db_entry(value)
+            yield key.decode("utf-8"), get_issuer_from_db_entry(value)
 
     def get(self, pubkey: str) -> dict:
         """
-        Return certifications dict from pubkey
+        Return issuer dict from pubkey
 
         :param pubkey: Identity account pubkey
         :return:q
         """
-        return get_certifications_from_db_entry(self.index.get(pubkey.encode("utf-8")))
+        db_entry = self.index.get(pubkey.encode("utf-8"))
+        return get_issuer_from_db_entry(db_entry)
 
 
-def get_certifications_from_db_entry(json_string: str) -> dict:
+def get_issuer_from_db_entry(json_string: str) -> dict:
     """
-    Get certifications dict from json string
+    Get issuer dict from json string
+    (with issued certifications updated to their last state)
 
     :param json_string: Json entry
     :return:
     """
-    return json.loads(json_string)
+    issuer = json.loads(json_string)
+    issuer["issued"] = get_updated_certifications_from_issuer(issuer["issued"])
+    return issuer
+
+
+def get_updated_certifications_from_issuer(issued_certifications: list) -> list:
+    """
+    Return certifications from issuer_pubkey
+
+    Certifications are updated to the last state for each receiver
+
+    :param issued_certifications: Issuer issued certifications list
+    :return:
+    """
+    issuer_certifications = []
+    for cert in issued_certifications:
+        if cert["op"] == "CREATE":
+            receiver_pubkey = cert["receiver"]
+            # filter only certifications to receiver
+            issuer_to_receiver_certifications = [issuer_certification for issuer_certification in
+                                                 issued_certifications if
+                                                 issuer_certification["receiver"] == receiver_pubkey]
+            # update first certification properties except for None value
+            issuer_to_receiver_certification = {
+                key: value for issuer_certification in issuer_to_receiver_certifications for (key, value) in
+                issuer_certification.items() if
+                value is not None or issuer_certification == issuer_to_receiver_certifications[0]}
+
+            issuer_certifications.append(issuer_to_receiver_certification)
+
+    return issuer_certifications
diff --git a/lib/functions.py b/lib/functions.py
index 7a28e4df37cae4289965e95c170bd2f62fef85d8..548d47657c6e0587b7b0fff2060cf1c0836deef8 100644
--- a/lib/functions.py
+++ b/lib/functions.py
@@ -19,8 +19,8 @@ def get_wallets_data():
     # Get wallets balances data
     wallets_repository = LevelDBWalletsRepository(os.getenv("LEVELDB_PATH", DEFAULT_LEVELDB_PATH))
     wallets = {}
-    total_money = 0 # counter
-    ignored_money = 0 # counter
+    total_money = 0  # counter
+    ignored_money = 0  # counter
     for unlock_expression, wallet in wallets_repository:
         balance = wallet["balance"]
         if "&&" in unlock_expression:
@@ -79,7 +79,7 @@ def get_identities_and_wallets(start_timestamp):
     print("    parse Wallets...")
     (wallets, total_money, ignored_money) = get_wallets_data()
     # add ignored money to treasury and check initial monetary mass
-    treasury += ignored_money # add ignored money to treasury
+    treasury += ignored_money  # add ignored money to treasury
     wallet_sum = total_money + ignored_money
     missing_money = initial_monetary_mass - wallet_sum
     if missing_money != 0:
@@ -119,7 +119,7 @@ def get_identities_and_wallets(start_timestamp):
             "owner_key": address,
             "balance": balance,
             "membership_expire_on": membership_expire_on if is_member else 0,
-            "next_cert_issuable_on": 0, # initialized to zero, modified later
+            "next_cert_issuable_on": 0,  # initialized to zero, modified later
             "certs_received": {},
         }
 
@@ -140,11 +140,13 @@ def get_identities_and_wallets(start_timestamp):
     # Generate identities Ğ1v2 genesis json bloc
     # certs are stored per issuer in input file
     # certs are stored per receiver in output file
-    print("    parse certification...")
+    print("    parse certifications...")
+    # get certifications updated to their last state
     for i_pubkey, issuer in certifications_repository:
         i_uid = identity_names[i_pubkey]
         i_address = v1_pubkey_to_v2_address(i_pubkey)
 
+        # get certifications updated to their last state
         for cert in issuer["issued"]:
             # if certification expired, skip silently
             if cert["expired_on"] != 0: