diff --git a/www/i18n/locale-en.json b/www/i18n/locale-en.json
index 58648623ddcd7cf936e9105590e79ba032175b9e..8fef23040cd5edb9c57fed47e75f372472d26847 100644
--- a/www/i18n/locale-en.json
+++ b/www/i18n/locale-en.json
@@ -112,6 +112,7 @@
     "REMEMBER_ME": "Remember me",
     "PLUGINS_SETTINGS": "Extensions",
     "BTN_RESET": "Restore default values",
+    "EXPERT_MODE": "Enable expert mode<span class=\"hidden-xs\"> (Display more details on peers)</span>",
     "POPUP_NODE": {
       "TITLE" : "Duniter Node",
       "HELP" : "Set the address of the node to use:"
diff --git a/www/i18n/locale-fr-FR.json b/www/i18n/locale-fr-FR.json
index 90cdf8d3ba84d7c49ead890cd728030c9c111b2a..a4a13b1229c9eecb878872ede21a8ba3ac5dd409 100644
--- a/www/i18n/locale-fr-FR.json
+++ b/www/i18n/locale-fr-FR.json
@@ -112,6 +112,7 @@
     "REMEMBER_ME": "Se souvenir de moi",
     "PLUGINS_SETTINGS": "Extensions",
     "BTN_RESET": "Restaurer les valeurs par défaut",
+    "EXPERT_MODE": "Activer le mode expert<span class=\"hidden-xs\"> (Informations détaillées sur les noeuds)</span>",
     "POPUP_NODE": {
       "TITLE" : "Noeud Duniter",
       "HELP" : "Saisissez l'adresse du noeud que vous voulez utiliser :"
diff --git a/www/js/controllers/currency-controllers.js b/www/js/controllers/currency-controllers.js
index 3767e3618c12be4cc101bed998696cfcef3ad497..5676ac627163399a23e2a9cdf1cc69b2388cd8f4 100644
--- a/www/js/controllers/currency-controllers.js
+++ b/www/js/controllers/currency-controllers.js
@@ -107,6 +107,7 @@ function CurrencyViewController($scope, $q, $translate, $timeout, BMA, UIUtils,
   $scope.medianTime  = 0;
   $scope.difficulty  = 0;
   $scope.Nprev = 0;
+  $scope.screen = UIUtils.screen;
 
   $scope.$on('$ionicView.enter', function(e, $state) {
     $translate(['COMMON.DATE_PATTERN'])
diff --git a/www/js/services/bma-services.js b/www/js/services/bma-services.js
index aff598f0513c2c45e2700945ed1d305a0d89c6b8..422d3fdfc2944eff35f3ff577576d46ad25d248b 100644
--- a/www/js/services/bma-services.js
+++ b/www/js/services/bma-services.js
@@ -261,7 +261,7 @@ angular.module('cesium.bma.services', ['ngResource', 'cesium.http.services', 'ce
 
     return {
       node: {
-        summary: csHttp.get(host, port, '/node/summary'),
+        summary: csHttp.getWithCache(host, port, '/node/summary', csHttp.cache.LONG),
         server: server,
         host: host,
         port: port,
@@ -299,6 +299,7 @@ angular.module('cesium.bma.services', ['ngResource', 'cesium.http.services', 'ce
           ud: getBlockchainWithUd,
           tx: csHttp.get(host, port, '/blockchain/with/tx'),
           newcomers: csHttp.get(host, port, '/blockchain/with/newcomers'),
+          hardship: csHttp.get(host, port, '/blockchain/hardship/:pubkey'),
         },
         lastUd: getBlockchainLastUd
       },
diff --git a/www/js/services/network-services.js b/www/js/services/network-services.js
index ee6863e5f75c4f0f60b3e8347d4fc8b93e0a4842..f923e85500f9210a1e1b6db6d9ee1a2b63a6a87e 100644
--- a/www/js/services/network-services.js
+++ b/www/js/services/network-services.js
@@ -1,7 +1,7 @@
 
 angular.module('cesium.network.services', ['ngResource', 'ngApi', 'cesium.bma.services'])
 
-.factory('csNetwork', function($rootScope, $q, $interval, $timeout, BMA, Api) {
+.factory('csNetwork', function($rootScope, $q, $interval, $timeout, BMA, Api, csSettings) {
   'ngInject';
 
   factory = function(id) {
@@ -83,42 +83,66 @@ angular.module('cesium.network.services', ['ngResource', 'ngApi', 'cesium.bma.se
           score += (100000000 * (peer.online ? 1 : 0));
           score += (10000000  * (peer.hasMainConsensusBlock ? 1 : 0));
           score += (1000     * (peer.hasConsensusBlock ? currents[peer.buid] : 0));
-          score += (1       * (peer.uid ? peer.uid.charCodeAt(0) : 0)); // alphabetical order
+          score += (-1       * (peer.uid ? peer.uid.charCodeAt(0) : 999)); // alphabetical order
           return -score;
         });
       },
 
-      processPeer = function(peer) {
-        if (peer) {
-          peer = new Peer(peer);
-          var server = peer.getServer();
-          // Test each peer only once
-          if (!data.knownPeers[server]) {
-            data.knownPeers[server] = true;
-            peer.dns = peer.getDns();
-            peer.server = server;
-            peer.blockNumber = peer.block.replace(/-.+$/, '');
-            data.newPeers.push(peer);
-            var node = BMA.instance(peer.getHost(), peer.getPort(), false);
-            return node.blockchain.current()
-              .then(function(block){
-                peer.currentNumber = block.number;
-                peer.online = true;
-                peer.buid = buid(block);
-                peer.uid = data.uidsByPubkeys[peer.pubkey];
-                if (data.knownBlocks.indexOf(peer.buid) === -1) {
-                  data.knownBlocks.push(peer.buid);
-                }
-                console.debug('[network] Peer [' + server + ']    status [UP]   block [' + peer.buid.substring(0, 20) + ']');
+      processPeer = function(peer, refresh) {
+        if (!peer) return;
+        peer = new Peer(peer);
+        var server = peer.getServer();
+        // Test each peer only once
+        if (!refresh && data.knownPeers[server]) return;
+        var skipPushToNew = refresh && !data.knownPeers[server];
+        data.knownPeers[server] = true;
+        peer.dns = peer.getDns();
+        peer.server = server;
+        peer.blockNumber = peer.block.replace(/-.+$/, '');
+        peer.uid = data.uidsByPubkeys[peer.pubkey];
+        var node = BMA.instance(peer.getHost(), peer.getPort(), false);
+        var jobs  = [
+          node.blockchain.current()
+          .then(function(block){
+            peer.currentNumber = block.number;
+            peer.online = true;
+            peer.buid = buid(block);
+            if (data.knownBlocks.indexOf(peer.buid) === -1) {
+              data.knownBlocks.push(peer.buid);
+            }
+          })
+         ];
+        if (csSettings.data.expertMode) {
+          // Get Version
+          jobs.push(node.node.summary()
+            .then(function(res){
+              peer.version = res && res.duniter && res.duniter.version;
+            }));
+
+          // Get hardship
+          if (peer.uid) {
+            jobs.push(node.blockchain.stats.hardship({pubkey: peer.pubkey})
+              .then(function(res){
+                peer.level = res && res.level;
+              }).catch(function() {
+                peer.level = null;
               })
-              .catch(function(err) {
-                // node is DOWN
-                peer.online=false;
-                peer.buid = null;
-                console.debug('[network] Peer [' + server + '] status [DOWN]');
-              });
+            );
           }
         }
+        $q.all(jobs)
+          .then(function() {
+            if (!skipPushToNew) data.newPeers.push(peer);
+            console.debug('[network] Peer [' + server + ']    status [UP]   block [' + peer.buid.substring(0, 20) + ']');
+          })
+          .catch(function(err) {
+            // node is DOWN
+            peer.online=false;
+            peer.buid = null;
+            peer.uid = data.uidsByPubkeys[peer.pubkey];
+            if (!skipPushToNew) data.newPeers.push(peer);
+            console.debug('[network] Peer [' + server + '] status [DOWN]');
+          });
       },
 
       refreshPeers = function() {
@@ -170,6 +194,7 @@ angular.module('cesium.network.services', ['ngResource', 'ngApi', 'cesium.bma.se
       },
 
       startListeningOnSocket = function() {
+        // Listen for new block
         data.bma.websocket.block().on('block', function(block) {
           if (data.updatingPeers) return;
           var uid = buid(block);
@@ -188,11 +213,20 @@ angular.module('cesium.network.services', ['ngResource', 'ngApi', 'cesium.bma.se
             }
           }
         });
+        // Listen for new peer
         data.bma.websocket.peer().on('peer', function(peer) {
-          processPeer(peer);
-          if (!data.updatingPeers) {
-            sortPeers();
-          }
+          // Waiting block propagation
+          $timeout(function() {
+            var promise = processPeer(peer, true);
+            if (promise) promise.then(function() {
+              if (!data.updatingPeers && data.newPeers.length) {
+                data.peers = data.peers.concat(data.newPeers.splice(0));
+                console.debug('[network] New peers found: sort and ad them to result...');
+              }
+              sortPeers();
+              api.data.raise.changed(data); // send event to plugins
+            }, 500);
+          })
         });
       },
 
diff --git a/www/js/services/settings-services.js b/www/js/services/settings-services.js
index 9e5cea9ff14b7c7175c5cd5162f0b66e91bb0517..0669160d242930c4f2edef608896be51346abada 100644
--- a/www/js/services/settings-services.js
+++ b/www/js/services/settings-services.js
@@ -28,6 +28,7 @@ angular.module('cesium.settings.services', ['ngResource', 'ngApi', 'cesium.confi
         showUDHistory: true,
         showLoginSalt: false,
         initPhase: false, // For currency start (when block #0 not written)
+        expertMode: true,
         helptip: {
           enable: true,
           currency: 0,
diff --git a/www/plugins/es/js/controllers/wot-controllers.js b/www/plugins/es/js/controllers/wot-controllers.js
index c91c1b57a09b9390d132b6bcf0ddb15769354433..de681fe99847460d3e13d63db64e84975f8e9197 100644
--- a/www/plugins/es/js/controllers/wot-controllers.js
+++ b/www/plugins/es/js/controllers/wot-controllers.js
@@ -26,7 +26,7 @@ angular.module('cesium.es.wot.controllers', ['cesium.es.services'])
 
 ;
 
-function ESWotIdentityViewController($scope, csSettings, PluginService, esModals) {
+function ESWotIdentityViewController($scope, csSettings, PluginService, esModals, UIUtils) {
   'ngInject';
 
   $scope.extensionPoint = PluginService.extensions.points.current.get();
@@ -48,6 +48,7 @@ function ESWotIdentityViewController($scope, csSettings, PluginService, esModals
   $scope.showNewMessageModal = function() {
     return $scope.loadWallet()
       .then(function() {
+        UIUtils.loading.hide();
         return esModals.showMessageCompose({
           destPub: $scope.formData.pubkey,
           destUid: $scope.formData.name||$scope.formData.uid
diff --git a/www/templates/currency/tabs/view_network.html b/www/templates/currency/tabs/view_network.html
index 321aeddae34e2edcb6010643c2c7ac77de1ef628..e905439f3b2dc486f0f72f54197deda6c8d5101d 100644
--- a/www/templates/currency/tabs/view_network.html
+++ b/www/templates/currency/tabs/view_network.html
@@ -10,11 +10,24 @@
 
         <a class="peer-item item item-icon-left"
            ng-repeat="peer in peers track by peer.server"
-           ng-class="{ assertive: !peer.online, balanced: (peer.online && peer.hasMainConsensusBlock), energized: (peer.online && !peer.hasMainConsensusBlock) }"
+           ng-class="{ assertive: !peer.online, balanced: (peer.online && peer.hasMainConsensusBlock), energized: (peer.online && !peer.hasMainConsensusBlock)}"
            ui-sref="app.view_peer({server: peer.server})">
             <i class="icon ion-android-globe"></i>
-            <h3><span ng-class="{ positive: peer.uid }">{{peer.uid || peer.pubkey.substr(0,8)}}</span> <span class="gray">{{peer.dns && ' | ' + peer.dns}}</span></h3>
-            <h4>{{peer.server}}</h4>
-            <span class="badge" ng-class="{ 'badge-balanced': peer.hasMainConsensusBlock, 'badge-energized': peer.hasConsensusBlock }">{{peer.currentNumber}}</span>
+            <div class="row no-padding">
+              <div class="col no-padding">
+                <h3><i ng-class="{'ion-person': peer.uid, 'ion-key': !peer.uid}"></i> {{peer.uid || peer.pubkey.substr(0,8)}}</span> <span class="gray">{{peer.dns && ' | ' + peer.dns}}</h3>
+                <h4>{{peer.server}}</h4>
+              </div>
+              <div class="col col-10 no-padding" ng-if="settings.expertMode">
+                <h3 class="hidden-sm hidden-xs hidden-md">
+                  <span ng-class="{balanced: peer.level <= 100, energized: peer.level > 100 && peer.level <= 200, assertive: peer.level > 200}"
+                        ng-if="peer.level"><i class="ion-lock-combination"></i> {{peer.level}}</span>&nbsp;
+                </h3>
+                <h4 class="hidden-sm hidden-xs hidden-md gray">v{{peer.version}}</h4>
+              </div>
+              <div class="col col-20 no-padding">
+                <span class="badge" ng-class="{ 'badge-balanced': peer.hasMainConsensusBlock, 'badge-energized': peer.hasConsensusBlock }">{{peer.currentNumber}}</span>
+              </div>
+            </div>
         </a>
     </div>
diff --git a/www/templates/settings/settings.html b/www/templates/settings/settings.html
index 4997758fc9c92596e10a9d569fbdccb91860b0ac..29a99a253a11ec12c5496be5b910c46db218e694 100644
--- a/www/templates/settings/settings.html
+++ b/www/templates/settings/settings.html
@@ -40,7 +40,7 @@
         </label>
       </div>
 
-      <label class="item  item-input item-select">
+      <label class="item item-input item-select">
         <div class="input-label">
           {{'COMMON.LANGUAGE' | translate}}
         </div>
@@ -50,7 +50,7 @@
         </select>
       </label>
 
-      <div class="item  item-toggle dark">
+      <div class="item item-toggle dark">
         <div class="input-label">
          {{'SETTINGS.USE_LOCAL_STORAGE' | translate}}
         </div>
@@ -62,7 +62,7 @@
         </label>
       </div>
 
-      <div class="item  item-toggle dark">
+      <div class="item item-toggle dark">
         <div class="input-label" ng-bind-html="'SETTINGS.ENABLE_HELPTIP' | translate">
         </div>
         <label class="toggle toggle-royal">
@@ -94,7 +94,7 @@
 
       <span class="item item-divider" translate>SETTINGS.HISTORY_SETTINGS</span>
 
-      <div class="item  item-toggle dark">
+      <div class="item item-toggle dark">
         <div class="input-label" translate>SETTINGS.DISPLAY_UD_HISTORY</div>
         <label class="toggle toggle-royal">
           <input type="checkbox" ng-model="formData.showUDHistory" >
@@ -109,12 +109,22 @@
 
       <span class="item item-divider" translate>SETTINGS.NETWORK_SETTINGS</span>
 
-      <div class="item  ink" ng-click="changeNode()">
+      <div class="item ink" ng-click="changeNode()">
         <div class="input-label">
         {{'SETTINGS.NODE' | translate}}
         </div>
         <span class="item-note dark">{{getServer()}}</ng-if></span>
       </div>
+      <div class="item item-toggle dark hidden-sm hidden-xs hidden-md">
+        <div class="input-label" ng-bind-html="'SETTINGS.EXPERT_MODE' | translate"></div>
+        <label class="toggle toggle-royal">
+          <input type="checkbox" ng-model="formData.expertMode" >
+          <div class="track">
+            <div class="handle"></div>
+          </div>
+        </label>
+      </div>
+
       <!-- Allow extension here -->
       <cs-extension-point name="network"></cs-extension-point>