diff --git a/src/sakia/gui/navigation/identity/controller.py b/src/sakia/gui/navigation/identity/controller.py
index e8508152e2071ac3cbc31fbfa0d7725046c446de..7ec8d197076265c627751ad0b6fe692ab38e90cb 100644
--- a/src/sakia/gui/navigation/identity/controller.py
+++ b/src/sakia/gui/navigation/identity/controller.py
@@ -37,6 +37,7 @@ class IdentityController(QObject):
         self.certification = certification
         self._logger = logging.getLogger('sakia')
         self.view.button_membership.clicked.connect(self.send_join_demand)
+        self.view.button_refresh.clicked.connect(self.refresh_certs)
 
     @classmethod
     def create(cls, parent, app, connection, blockchain_service, identities_service, sources_service):
@@ -70,11 +71,6 @@ class IdentityController(QObject):
             menu = ContextMenu.from_data(self.view, self.model.app, None, (identity,))
             menu.view_identity_in_wot.connect(self.view_in_wot)
 
-            menu.qmenu.addSeparator().setText("Certifications")
-            refresh_certs = QAction(menu.qmenu.tr("Refresh"), menu.qmenu.parent())
-            refresh_certs.triggered.connect(self.refresh_certs)
-            menu.qmenu.addAction(refresh_certs)
-
             # Show the context menu.
             menu.qmenu.popup(QCursor.pos())
 
@@ -96,7 +92,8 @@ class IdentityController(QObject):
     @asyncify
     async def refresh_certs(self, checked=False):
         self.view.table_certifiers.setEnabled(False)
-        await self.model.refresh_certifications()
+        await self.model.refresh_identity_data()
+        self.refresh_localized_data()
         self.view.table_certifiers.setEnabled(True)
 
     def refresh_localized_data(self):
diff --git a/src/sakia/gui/navigation/identity/identity.ui b/src/sakia/gui/navigation/identity/identity.ui
index 90d2d5db65f6406f909db5f42c4de007f5c4b8da..1c3fd32caa5fe4f7a21a69f28a80602242518f34 100644
--- a/src/sakia/gui/navigation/identity/identity.ui
+++ b/src/sakia/gui/navigation/identity/identity.ui
@@ -86,15 +86,43 @@ QGroupBox::title {
    <item row="0" column="0">
     <widget class="QGroupBox" name="group_uid_state">
      <property name="title">
-      <string>Identity</string>
+      <string>Membership status</string>
      </property>
      <layout class="QVBoxLayout" name="verticalLayout">
       <item>
-       <widget class="QLabel" name="label_currency">
-        <property name="text">
-         <string/>
-        </property>
-       </widget>
+       <layout class="QHBoxLayout" name="horizontalLayout_3">
+        <item>
+         <widget class="QLabel" name="label_written">
+          <property name="text">
+           <string/>
+          </property>
+         </widget>
+        </item>
+        <item>
+         <spacer name="horizontalSpacer_3">
+          <property name="orientation">
+           <enum>Qt::Horizontal</enum>
+          </property>
+          <property name="sizeHint" stdset="0">
+           <size>
+            <width>40</width>
+            <height>20</height>
+           </size>
+          </property>
+         </spacer>
+        </item>
+        <item>
+         <widget class="QPushButton" name="button_refresh">
+          <property name="text">
+           <string/>
+          </property>
+          <property name="icon">
+           <iconset resource="../../../../../res/icons/icons.qrc">
+            <normaloff>:/icons/refresh_icon</normaloff>:/icons/refresh_icon</iconset>
+          </property>
+         </widget>
+        </item>
+       </layout>
       </item>
       <item>
        <widget class="QLabel" name="label_identity">
diff --git a/src/sakia/gui/navigation/identity/model.py b/src/sakia/gui/navigation/identity/model.py
index 7b23c0147d41e688c2b6eb335139012e8f42bd97..4a63205f4bff5e18d63027790372a63abbf365b9 100644
--- a/src/sakia/gui/navigation/identity/model.py
+++ b/src/sakia/gui/navigation/identity/model.py
@@ -50,8 +50,9 @@ class IdentityModel(QObject):
         self.table_model.init_certifiers()
         return self.proxy_model
 
-    async def refresh_certifications(self):
+    async def refresh_identity_data(self):
         identity = self.identities_service.get_identity(self.connection.pubkey, self.connection.uid)
+        identity = await self.identities_service.load_requirements(identity)
         certifiers = await self.identities_service.load_certifiers_of(identity)
         await self.identities_service.load_certs_in_lookup(identity, certifiers, [])
         self.table_model.init_certifiers()
@@ -165,9 +166,13 @@ class IdentityModel(QObject):
                                                          self.app).localized(False, True)
         outdistanced_text = self.tr("Outdistanced")
         is_identity = False
+        written = False
         is_member = False
         nb_certs = 0
         mstime_remaining = 0
+        identity_expiration = 0
+        identity_expired = False
+        outdistanced = False
         nb_certs_required = self.blockchain_service.parameters().sig_qty
 
         if self.connection.uid:
@@ -177,6 +182,13 @@ class IdentityModel(QObject):
                 if identity:
                     mstime_remaining = self.identities_service.ms_time_remaining(identity)
                     is_member = identity.member
+                    outdistanced = identity.outdistanced
+                    written = identity.written
+                    if not written:
+                        identity_expiration = identity.timestamp + self.parameters().sig_window
+                        identity_expired = identity_expiration < self.blockchain_processor.time(self.connection.currency)
+                        identity_expiration = self.blockchain_processor.adjusted_ts(self.app.currency,
+                                                                                    identity_expiration)
                     nb_certs = len(self.identities_service.certifications_received(identity.pubkey))
                     if not identity.outdistanced:
                         outdistanced_text = self.tr("In WoT range")
@@ -187,7 +199,11 @@ class IdentityModel(QObject):
                     self._logger.error(str(e))
 
         return {
+            'written': written,
+            'idty_expired': identity_expired,
+            'idty_expiration': identity_expiration,
             'amount': localized_amount,
+            'is_outdistanced': outdistanced,
             'outdistanced': outdistanced_text,
             'nb_certs': nb_certs,
             'nb_certs_required': nb_certs_required,
diff --git a/src/sakia/gui/navigation/identity/view.py b/src/sakia/gui/navigation/identity/view.py
index 7cd6d5c0ad5f530a70b10b3d3f242193d73f274a..40edf46c1ac566bd4b4eb1961d368cb082bb200a 100644
--- a/src/sakia/gui/navigation/identity/view.py
+++ b/src/sakia/gui/navigation/identity/view.py
@@ -1,5 +1,5 @@
 from PyQt5.QtWidgets import QWidget, QMessageBox, QAbstractItemView, QHeaderView
-from PyQt5.QtCore import QEvent, QLocale, pyqtSignal, Qt
+from PyQt5.QtCore import QEvent, QLocale, pyqtSignal, Qt, QDateTime
 from .identity_uic import Ui_IdentityWidget
 from enum import Enum
 from sakia.helpers import timestamp_to_dhms
@@ -54,6 +54,17 @@ class IdentityView(QWidget, Ui_IdentityWidget):
                                   message=IdentityView.simple_message[state]))
             self.button_membership.hide()
         else:
+            if data['written']:
+                written_value = self.tr("Identity written in blockchain")
+            else:
+                expiration_text = QLocale.toString(
+                    QLocale(),
+                    QDateTime.fromTime_t(data['idty_expiration']),
+                    QLocale.dateTimeFormat(QLocale(), QLocale.ShortFormat)
+                )
+                written_value = self.tr("Identity not written in blockchain") + \
+                                " (" + self.tr("Expires on : {0}").format(expiration_text) + ")"
+
             status_value = self.tr("Member") if data['membership_state'] else self.tr("Non-Member")
             if data['mstime'] > 0:
                 membership_action_value = self.tr("Renew membership")
@@ -84,29 +95,46 @@ class IdentityView(QWidget, Ui_IdentityWidget):
             else:
                 mstime_remaining_text = self.tr("Expired or never published")
 
-            status_color = '#00AA00' if data['membership_state'] else self.tr('#FF0000')
+            ms_status_color = '#00AA00' if data['membership_state'] else '#FF0000'
+            outdistanced_status_color = '#FF0000' if data['is_outdistanced'] else '#00AA00'
+            if data['written']:
+                written_status_color = "#00AA00"
+            elif data['idty_expired']:
+                written_status_color = "#FF0000"
+            else:
+                written_status_color = '#FF6347'
 
             description_membership = """<html>
 <body>
     <p><span style="font-weight:600;">{status_label}</span>
-     : <span style="color:{status_color};">{status}</span>
+     : <span style="color:{ms_status_color};">{status}</span>
      - <span>{status_info}</span></p>
 </body>
-</html>""".format(status_color=status_color,
+</html>""".format(ms_status_color=ms_status_color,
                   status_label=self.tr("Status"),
                   status=status_value,
                   status_info=status_info)
             description_identity = """<html>
 <body>
-    <p><span style="font-weight:600;">{nb_certs_label}</span> : {nb_certs} ({outdistanced_text})</p>
+    <p><span style="font-weight:600;">{nb_certs_label}</span> : {nb_certs} <span style="color:{outdistanced_status_color};">({outdistanced_text})</span></p>
     <p><span style="font-weight:600;">{mstime_remaining_label}</span> : {mstime_remaining}</p>
 </body>
 </html>""".format(nb_certs_label=self.tr("Certs. received"),
                   nb_certs=data['nb_certs'],
                   outdistanced_text=data['outdistanced'],
+                  outdistanced_status_color=outdistanced_status_color,
                   mstime_remaining_label=self.tr("Membership"),
                   mstime_remaining=mstime_remaining_text)
 
+            self.label_written.setText("""
+<html>
+<body>
+    <p><span style="font-weight:450; color:{written_status_color};">{written_label}</span></p>
+</body>
+</html>
+""".format(written_label=written_value,
+           written_status_color=written_status_color))
+
             if data['is_identity']:
                 self.label_membership.setText(description_membership)
                 self.label_identity.setText(description_identity)