diff --git a/dist/desktop b/dist/desktop
index 7a51ea325dc733f669c85ab07b680659fde51aca..856765cd3e552d745144129ffd95c7fd3af51291 160000
--- a/dist/desktop
+++ b/dist/desktop
@@ -1 +1 @@
-Subproject commit 7a51ea325dc733f669c85ab07b680659fde51aca
+Subproject commit 856765cd3e552d745144129ffd95c7fd3af51291
diff --git a/platforms/android b/platforms/android
index d23c13ed36c3200ed3d6f9a0c0b36bffc7652787..0dd823dbd23d029224a34ecfe558dbba8484d9c9 160000
--- a/platforms/android
+++ b/platforms/android
@@ -1 +1 @@
-Subproject commit d23c13ed36c3200ed3d6f9a0c0b36bffc7652787
+Subproject commit 0dd823dbd23d029224a34ecfe558dbba8484d9c9
diff --git a/scripts/check-reproducible-build.sh b/scripts/check-reproducible-build.sh
index 87d78b375ffac928c8edd708a58cfa35fce8cad1..4d3af4b9a97b78ecdd615b8a412fc17fd2af7714 100755
--- a/scripts/check-reproducible-build.sh
+++ b/scripts/check-reproducible-build.sh
@@ -62,7 +62,12 @@ echo "Checking diff between templates files... [OK]"
 # Check web extension build
 # ----------------------------------
 
-# Compile
+# Clean generated files (1/2)
+rm www/css/*.app*.css
+rm -rf www/dist
+rm -rf dist/web
+
+# Compile (1/2)
 echo "----------------------------"
 echo "Building web extension... [1/2]"
 gulp webExtBuild --release > /dev/null
@@ -74,10 +79,16 @@ if [[ $? -ne 0 ]] || [[ ! -d "${WEB_EXT_DIR}" ]]; then
 fi;
 
 # Keep a copy
-rm -rf "${WEB_EXT_DIR}.tmp"
-mv "${WEB_EXT_DIR}" "${WEB_EXT_DIR}.tmp"
+WEB_EXT_COPY_DIR="/tmp/cesium-extention"
+rm -rf "${WEB_EXT_COPY_DIR}"
+mv "${WEB_EXT_DIR}" "${WEB_EXT_COPY_DIR}"
+
+# Clean generated files (2/2)
+rm www/css/*.app*.css
+rm -rf www/dist
+rm -rf dist/web
 
-# Compile web extension, second time
+# Compile web extension (2/2)
 echo "Building web extension... [2/2]"
 gulp webExtBuild --release > /dev/null
 [[ $? -ne 0 ]] && exit 1
@@ -85,12 +96,22 @@ gulp webExtBuild --release > /dev/null
 echo "Building web extension... [OK]"
 
 echo "Checking diff between builds..."
-diff -arq "${WEB_EXT_DIR}" "${WEB_EXT_DIR}.tmp" > /tmp/webExtention.diff
+DIFF_FILE=/tmp/cesium-extention.diff
+diff -arq "${WEB_EXT_DIR}" "${WEB_EXT_COPY_DIR}" > ${DIFF_FILE}
 if [[ $? -ne 0 ]]; then
-  cat /tmp/webExtention.diff
-  echo "ERROR: Detected some differences: build is not reproducible!"
+  echo "Checking diff between builds... [FAILED] Build is NOT reproducible!"
+  echo "Please check following diff:"
+  cat ${DIFF_FILE}
+
+  # Clean temporary dir
+  rm -rf ${WEB_EXT_COPY_DIR}
+
   exit 1;
 fi;
-echo "Checking diff between builds... [OK]"
 
-echo "SUCCESS: Build are reproducible!"
+# Final message
+echo "Checking diff between builds... [SUCCESS] Build is reproducible."
+
+# Clean temporary dir (silently)
+rm -rf ${WEB_EXT_COPY_DIR} > /dev/null
+rm /tmp/cesium-extention.diff
diff --git a/scss/ionic.app.scss b/scss/ionic.app.scss
index a3a914f7940223cfdc749486cd605734ee684222..ccded58171529e1b668e4faabd77e4ba2b8e63f7 100644
--- a/scss/ionic.app.scss
+++ b/scss/ionic.app.scss
@@ -913,6 +913,29 @@ html, body {
  Home page
 =============== */
 
+#home .ribbon {
+  position: fixed;
+  top: 15px;
+  right: -110px;
+  z-index: 500;
+  transform: rotate(45deg);
+  text-align: center;
+  width: 300px;
+  text-decoration: none;
+  box-shadow: 0 0 5px #000;
+  a:first-child {
+    opacity: 1 !important;
+  }
+  a {
+    opacity: 0.7;
+    width: 100%;
+  }
+
+  a:hover {
+    opacity: 1;
+    font-size: 16px;
+  }
+}
 #home .logo {
   margin-top: 15px;
   width: 100%;
@@ -2038,26 +2061,79 @@ $ionicon-var-badge-editable: $ionicon-var-edit + "\00a0";
 }
 
 /**********
-   Demo
+   Specific modes (demo, readonly)
 **********/
 
-#menu .badge-demo {
-  font-size: 12px;
+/* -- readonly mode -- */
+
+.visible-readonly {
+  display: none;
+  visibility: hidden;
+}
+
+body.readonly {
+
+  .hidden-readonly {
+    display: none;
+    visibility: hidden;
+  }
+  .visible-readonly {
+    display: inherit !important;
+    visibility: visible !important;
+  }
+}
+
+/* -- demo mode -- */
+
+.visible-demo {
+  display: none;
+  visibility: hidden;
+}
+
+body.demo {
+
+  .hidden-demo {
+    display: none;
+    visibility: hidden;
+  }
+  .visible-demo {
+    display: inherit !important;
+    visibility: visible !important;
+  }
+}
+
+.badge-app-mode {
   font-weight: bold;
   color: whitesmoke !important;
-  position: absolute;
   top: 10px;
-  left: 1px;
   padding: 0 4px;
   text-transform: uppercase;
+  user-select: none;
+}
+#menu .badge-app-mode.left {
+  position: absolute;
+  font-size: 12px;
+  left: 1px;
   transform-origin: 26px 5px;
   transform: rotate(-10deg);
 }
-#menu .badge-demo:hover {
-  font-size: 13px;
+#menu .badge-app-mode.right {
+  position: absolute;
+  font-size: 14px;
+  right: 1px;
+  transform-origin: 26px 5px;
+  transform: rotate(10deg);
+}
+#menu .badge-app-mode.left:hover {
   padding: 1px 4px;
+  font-size: 13px;
   transform: rotate(-15deg);
 }
+#menu .badge-app-mode.right:hover {
+  padding: 2px 5px;
+  font-size: 16px;
+  transform: rotate(15deg);
+}
 /**********
    Help
 **********/
diff --git a/www/i18n/locale-en-GB.json b/www/i18n/locale-en-GB.json
index ccfcf0069a38431fe8ec257ec26bd10df32b4fbb..9ff0a235e95ba45dbef4ecf46dc44f82ea2a84f9 100644
--- a/www/i18n/locale-en-GB.json
+++ b/www/i18n/locale-en-GB.json
@@ -825,12 +825,20 @@
     "USE_FALLBACK_NODE": "Peer <b>{{old}}</b> unreachable or invalid address.<br/><br/>Do you want to temporarily use the <b>{{new}}</b> node?",
     "ISSUE_524_SEND_LOG": "The transaction was rejected because of a known problem (issue #524) but not reproduced.<br/><br/>To help developers correct this error, do you accept <b>the transmission of your logs</b> per message?<br/><small>(No confidential data is sent)</small>"
   },
-  "DEMO": {
-    "BADGE": "Demo",
-    "MODE": "Mode demonstration",
-    "FEATURE_NOT_AVAILABLE": "Functionality <b>not available</b> on this demonstration site.",
-    "MODE_HELP": "Cesium works in <b>demonstration mode</b>: consultation is on account is available, but no account operation can be performed.",
-    "INSTALL_HELP": "For <b>security reasons</b> we recommend <b>installing</b> your copy of the software.<br/> Visit the site <a href='https://cesium.app'>www.cesium.app</a> for help."
+  "MODE": {
+    "DEMO": {
+      "BADGE": "Demo",
+      "MODE": "Demonstration mode",
+      "FEATURE_NOT_AVAILABLE": "Functionality <b>not available</b> on this demonstration site.",
+      "MODE_HELP": "Cesium works in <b>demonstration mode</b>: consultation on account is available, but no operation can be performed.",
+      "INSTALL_HELP": "For <b>security reasons</b> we recommend <b>installing</b> your copy of the software.<br/> Visit the site <a href='https://cesium.app'>www.cesium.app</a> for help."
+    },
+    "READONLY": {
+      "BADGE": "Monit",
+      "MODE": "Monitoring mode",
+      "MODE_HELP": "Cesium works in <b>monitoring mode</b>: only currency monitoring features are available.",
+      "INSTALL_HELP": "If you want to <b>create a wallet account</b> to send or received money, we recommend <b>installing</b> your copy of the software.<br/> Visit the site <a href='https://cesium.app'>www.cesium.app</a> for help."
+    }
   },
   "DOWNLOAD": {
     "POPUP_TITLE": "<b>Revocation file</b>",
diff --git a/www/i18n/locale-en.json b/www/i18n/locale-en.json
index b2e4e80f8a2a902078d0d1bdd2b62ce0eed8bc16..54bf66b237f17913c6adfadeab239fca1c1b7105 100644
--- a/www/i18n/locale-en.json
+++ b/www/i18n/locale-en.json
@@ -825,12 +825,20 @@
     "USE_FALLBACK_NODE": "Peer <b>{{old}}</b> unreachable or invalid address.<br/><br/>Do you want to temporarily use the <b>{{new}}</b> node?",
     "ISSUE_524_SEND_LOG": "The transaction was rejected because of a known problem (issue #524) but not reproduced.<br/><br/>To help developers correct this error, do you accept <b>the transmission of your logs</b> per message?<br/><small>(No confidential data is sent)</small>"
   },
-  "DEMO": {
-    "BADGE": "Demo",
-    "MODE": "Mode demonstration",
-    "FEATURE_NOT_AVAILABLE": "Functionality <b>not available</b> on this demonstration site.",
-    "MODE_HELP": "Cesium works in <b>demonstration mode</b>: consultation is on account is available, but no account operation can be performed.",
-    "INSTALL_HELP": "For <b>security reasons</b> we recommend <b>installing</b> your copy of the software.<br/> Visit the site <a href='https://cesium.app'>www.cesium.app</a> for help."
+  "MODE": {
+    "DEMO": {
+      "BADGE": "Demo",
+      "MODE": "Demonstration mode",
+      "FEATURE_NOT_AVAILABLE": "Functionality <b>not available</b> on this demonstration site.",
+      "MODE_HELP": "Cesium works in <b>demonstration mode</b>: consultation on account is available, but no operation can be performed.",
+      "INSTALL_HELP": "For <b>security reasons</b> we recommend <b>installing</b> your copy of the software.<br/> Visit the site <a href='https://cesium.app'>www.cesium.app</a> for help."
+    },
+    "READONLY": {
+      "BADGE": "Monit",
+      "MODE": "Monitoring mode",
+      "MODE_HELP": "Cesium works in <b>monitoring mode</b>: only currency monitoring features are available.",
+      "INSTALL_HELP": "If you want to <b>create a wallet account</b> to send or received money, we recommend <b>installing</b> your copy of the software.<br/> Visit the site <a href='https://cesium.app'>www.cesium.app</a> for help."
+    }
   },
   "DOWNLOAD": {
     "POPUP_TITLE": "<b>Revocation file</b>",
diff --git a/www/i18n/locale-es-ES.json b/www/i18n/locale-es-ES.json
index 6a366b69c857c46a06e643b8090db6d8a535bf4f..434951ef72c7b9694fd06cb01d4340638d18f066 100644
--- a/www/i18n/locale-es-ES.json
+++ b/www/i18n/locale-es-ES.json
@@ -916,12 +916,20 @@
     "USE_FALLBACK_NODE": "Nodo <b>{{old}}</b> inalcanzable o dirección inválida.<br/><br/>¿Desea utilizar temporalmente el nodo <b>{{new}}</b>?",
     "ISSUE_524_SEND_LOG": "La transacción ha sido rechazada a causa de una anomalía conocida (ticket #524) pero todavía <b>no replicable</b>.<br/><br/>Para ayudar a los/as desarrolladores/as a corregir este error, ¿ <b>acepta el envío de los logs(trazas del programa)</b> ?<br/><small>(ningún dato confidencia será enviado)</small>."
   },
-  "DEMO": {
-    "BADGE": "Demo",
-    "MODE": "Modo de demostración",
-    "FEATURE_NOT_AVAILABLE": "Funcionalidad <b>no disponible</b> en este sitio de demostración.",
-    "MODE_HELP": "El cesio funciona en <b> modo de demostración </b>: la consulta está disponible, pero no se puede realizar ninguna operación.",
-    "INSTALL_HELP": "Por <b>razones de seguridad</b> recomendamos <b>instalar</b> su copia del software.<br/>Visite el sitio de Internet <a href='https://cesium.app'> www.cesium.app </a> para obtener ayuda."
+  "MODE": {
+    "DEMO": {
+      "BADGE": "Demo",
+      "MODE": "Modo de demostración",
+      "FEATURE_NOT_AVAILABLE": "Funcionalidad <b>no disponible</b> en este sitio de demostración.",
+      "MODE_HELP": "Cesium funciona en <b> modo de demostración </b>: la consulta está disponible, pero no se puede realizar ninguna operación.",
+      "INSTALL_HELP": "Por <b>razones de seguridad</b> recomendamos <b>instalar</b> su copia del software.<br/>Visite el sitio de Internet <a href='https://cesium.app'> www.cesium.app </a> para obtener ayuda."
+    },
+    "READONLY": {
+      "BADGE": "Monit",
+      "MODE": "Modo de supervisión",
+      "MODE_HELP": "Cesium funciona en <b> modo de supervisión </b>: solo están disponibles las funciones de monitoreo de divisas.",
+      "INSTALL_HELP": "Si desea <b>crear una cuenta</b> para enviar o recibir dinero, le recomendamos <b>instalar</b> su copia del software.<br/>Visite el sitio de Internet <a href='https://cesium.app'> www.cesium.app </a> para obtener ayuda."
+    }
   },
   "DOWNLOAD": {
     "POPUP_TITLE": "<b>Revocación del archivo</b>",
diff --git a/www/i18n/locale-fr-FR.json b/www/i18n/locale-fr-FR.json
index 0bd80c44e4a3fead24f6f96e2370f3ba526a7782..3882270c3836542b1e50acbb8fd382b3db1ff72e 100644
--- a/www/i18n/locale-fr-FR.json
+++ b/www/i18n/locale-fr-FR.json
@@ -118,10 +118,16 @@
   "HOME": {
     "TITLE": "Cesium",
     "WELCOME": "Bienvenue dans l'application Cesium !",
+    "WELCOME_READONLY": "Bienvenue dans Cesium Monit !",
     "MESSAGE": "Recevez et envoyez de la monnaie libre {{currency|abbreviate}}",
-    "BTN_CURRENCY": "Explorer la monnaie {{name|abbreviate}}",
+    "MESSAGE_READONLY": "Suivez l'état de la monnaie libre {{currency|abbreviate}} en temps réel.",
+    "BTN_CURRENCY": "Explorer la monnaie {{currency|abbreviate}}",
     "BTN_ABOUT": "à propos",
     "BTN_HELP": "Aide en ligne",
+    "BTN_NETWORK": "Etat du réseau",
+    "FREE_SOFTWARE": "Logiciel libre",
+    "FORK_ME": "Cloner moi !",
+    "SHOW_LICENSE": "Voir la license",
     "REPORT_ISSUE": "anomalie",
     "NOT_YOUR_ACCOUNT_QUESTION" : "Vous n'êtes pas propriétaire du compte <b class=\"ion-key\"> {{pubkey|formatPubkey}}</b>&nbsp;?",
     "BTN_CHANGE_ACCOUNT": "Déconnecter ce compte",
@@ -825,12 +831,20 @@
     "USE_FALLBACK_NODE": "Nœud <b>{{old}}</b> injoignable ou adresse invalide.<br/><br/>Voulez-vous temporairement utiliser le nœud <b>{{new}}</b> ?",
     "ISSUE_524_SEND_LOG": "La transaction a été rejetée, à cause d'une anomalie connue (ticket #524) mais <b>non reproduite</b>.<br/><br/>Pour aider les développeurs à corriger cette erreur, <b>acceptez-vous la transmission de vos logs</b> par message ?<br/><small>(aucune donnée confidentielle n'est envoyée)</small>."
   },
-  "DEMO": {
-    "BADGE": "Démo",
-    "MODE": "Mode démonstration",
-    "FEATURE_NOT_AVAILABLE": "Fonctionnalité <b>non disponible</b> sur ce site de démonstration.",
-    "MODE_HELP": "Cesium fonctionne en <b>mode démonstration</b> : la consultation est de compte est disponible, mais aucune opération de compte ne peut être réalisée.",
-    "INSTALL_HELP": "Pour des <b>raisons de sécurité</b> nous vous recommandons <b>d'installer</b> votre copie du logiciel. Visitez le site <a href='https://cesium.app'>www.cesium.app</a> pour obtenir de l'aide."
+  "MODE": {
+    "DEMO": {
+      "BADGE": "Démo",
+      "MODE": "Mode démonstration",
+      "FEATURE_NOT_AVAILABLE": "Fonctionnalité <b>non disponible</b> sur ce site de démonstration.",
+      "MODE_HELP": "Cesium fonctionne en <b>mode démonstration</b> : la consultation de compte est possible, mais aucune opération ne pourra être réalisée.",
+      "INSTALL_HELP": "Pour des <b>raisons de sécurité</b> nous vous recommandons <b>d'installer</b> votre copie de l'application Cesium. Visitez le site <a href='https://cesium.app'>www.cesium.app</a> pour obtenir de l'aide."
+    },
+    "READONLY": {
+      "BADGE": "Monit",
+      "MODE": "Mode monitoring",
+      "MODE_HELP": "Cesium fonctionne en <b>mode monitoring</b> : sono disponibili solo le funzionalità di monitoraggio della valuta.",
+      "INSTALL_HELP": "Si vous souhaitez <b>créer un compte portefeuille</b> pour envoyer ou recevoir de la monnaie, nous vous recommandons <b>d'installer votre copie</b> de l'application Cesium. Visitez le site <a href='https://cesium.app'>www.cesium.app</a> pour obtenir de l'aide."
+    }
   },
   "DOWNLOAD": {
     "POPUP_TITLE": "<b>Fichier de révocation</b>",
diff --git a/www/i18n/locale-it-IT.json b/www/i18n/locale-it-IT.json
index 91e4982b6e5359fce3713870f1cbc0d937560f0d..3d02036c2c50f2f2363a846f7d32770f3582e689 100644
--- a/www/i18n/locale-it-IT.json
+++ b/www/i18n/locale-it-IT.json
@@ -740,13 +740,21 @@
      "USE_FALLBACK_NODE": "Peer <b>{{old}}</b> indisponibile o indirizzo errato.<br/><br/>Vuoi utilizzare temporanemante il <b>{{new}}</b> nodo?",
      "INVALID_FILE_FORMAT": "Formato file non valido.",
      "SAME_TX_RECIPIENT": "Il destinatario deve essere diverso dall'emittente."
+  },
+  "MODE": {
+    "DEMO": {
+      "BADGE": "Demo",
+      "MODE": "Modalità dimostrativa",
+      "FEATURE_NOT_AVAILABLE": "Funzionalità <b>non disponibile</b> su questo sito dimostrativo.",
+      "MODE_HELP": "Il cesio funziona in <b>modalità dimostrativa</b>: è disponibile la consultazione per conto, ma non è possibile eseguire alcuna operazione per conto.",
+      "INSTALL_HELP": "Per <b>motivi di sicurezza</b> ti consigliamo di <b>installare</b> la tua copia del software.<br/>Visita il sito <a href='https://cesium.app'>www.cesium.app</a> per assistenza."
     },
-  "DEMO": {
-    "BADGE": "Demo",
-    "MODE": "Modalità dimostrativa",
-    "FEATURE_NOT_AVAILABLE": "Funzionalità <b>non disponibile</b> su questo sito dimostrativo.",
-    "MODE_HELP": "Il cesio funziona in <b>modalità dimostrativa</b>: è disponibile la consultazione per conto, ma non è possibile eseguire alcuna operazione per conto.",
-    "INSTALL_HELP": "Per <b>motivi di sicurezza</b> ti consigliamo di <b>installare</b> la tua copia del software.<br/>Visita il sito <a href='https://cesium.app'>www.cesium.app</a> per assistenza."
+    "READONLY": {
+      "BADGE": "Monit",
+      "MODE": "Modalità di monitoraggio",
+      "MODE_HELP": "Il cesio funziona in <b>modalità monitoraggio</b>: sono disponibili solo le funzionalità di monitoraggio della valuta.",
+      "INSTALL_HELP": "Se desidera <b>creare un account di portafoglio</b> per inviare o ricevere valuta, ti consigliamo di <b>installare</b> la tua copia del software.<br/>Visita il sito <a href='https://cesium.app'>www.cesium.app</a> per assistenza."
+    }
   },
    "DOWNLOAD": {
      "POPUP_TITLE": "<b>File di cancellazione dell'identità/b>",
diff --git a/www/index.html b/www/index.html
index 4f879f3974e3472be149249a92265f4a404acfc1..eda74b02f348bb3120e4ef438b6dbdc0eae85ac3 100644
--- a/www/index.html
+++ b/www/index.html
@@ -53,7 +53,7 @@
 
   </head>
   <body id="cesium" ng-strict-di="true" window-exit-unauth="true"
-        ng-class="{'nobackdrop': $root.tour, 'expert-mode': $root.settings.expertMode}"
+        ng-class="{'nobackdrop': $root.tour, 'expert-mode': $root.settings.expertMode, 'demo': $root.config.demo && !$root.config.readonly, 'readonly': $root.config.readonly}"
         style="background-color: #1a237e;">
     <ion-nav-view>
       <div class="loader">
diff --git a/www/js/api/app.js b/www/js/api/app.js
index c6c44a70f6508f3c714bb2d7e124ec0379af4276..5eb16b7b66c85646b3772b8481895cc5acb7bd24 100644
--- a/www/js/api/app.js
+++ b/www/js/api/app.js
@@ -228,13 +228,21 @@ angular.module('cesium-api', ['ionic', 'ionic-material', 'ngMessages', 'pascalpr
     $scope.$watch('transferButton.style', $scope.computeTransferButtonHtml, true);
   })
 
-  .controller('ApiTransferCtrl', function ($scope, $rootScope, $timeout, $controller, $state, $q, $translate, $filter,
-                                           $window, $ionicHistory, BMA, CryptoUtils, UIUtils, csSettings, csCurrency,
-                                           csPlatform, csTx, csWallet, csDemoWallet){
+  .controller('ApiTransferCtrl', function($scope, $rootScope, $timeout, $controller, $state, $q, $translate, $filter,
+                                          $window, $ionicHistory, BMA, CryptoUtils, UIUtils, csConfig, csSettings,
+                                          csPlatform, csCurrency, csTx, csWallet, csDemoWallet) {
     'ngInject';
 
+    // WARN: Disable demo mode, on the API (a non-blocking warn message will be display later)
+    var config = csConfig;
+    if (config.demo) {
+      config = angular.copy(config);
+      config.demo = false;
+      config.readonly = false;
+    }
+
     // Initialize the super class and extend it.
-    angular.extend(this, $controller('AuthCtrl', {$scope: $scope}));
+    angular.extend(this, $controller('AuthCtrl', {$scope: $scope, csConfig: config}));
 
     $scope.loading = true;
     $scope.transferData = {
diff --git a/www/js/config.js b/www/js/config.js
index df8b629da4267a0ecf6c683f5fc09da705f085b5..ab9233e596075183d9f2a3704b30cf7b6ff2857f 100644
--- a/www/js/config.js
+++ b/www/js/config.js
@@ -11,6 +11,7 @@ angular.module("cesium.config", [])
 .constant("csConfig", {
 	"cacheTimeMs": 300000,
 	"demo": false,
+  "readonly": true,
 	"fallbackLanguage": "en",
 	"rememberMe": true,
 	"showUDHistory": true,
@@ -123,4 +124,4 @@ angular.module("cesium.config", [])
 	"newIssueUrl": "https://git.duniter.org/clients/cesium-grp/cesium/issues/new"
 })
 
-;
\ No newline at end of file
+;
diff --git a/www/js/controllers/app-controllers.js b/www/js/controllers/app-controllers.js
index 52b45f23a8fbccff9e57ea4f72617525d4c205fd..71e44eabae12ed03e064494b4df173f404f21088 100644
--- a/www/js/controllers/app-controllers.js
+++ b/www/js/controllers/app-controllers.js
@@ -533,6 +533,7 @@ function HomeController($scope, $state, $timeout, $ionicHistory, $translate, $ht
   $scope.loading = true;
   $scope.locales = angular.copy(csSettings.locales);
   $scope.smallscreen = UIUtils.screen.isSmall();
+  $scope.showInstallHelp = false;
 
   $scope.enter = function(e, state) {
     if (ionic.Platform.isIOS()) {
diff --git a/www/js/controllers/help-controllers.js b/www/js/controllers/help-controllers.js
index 869ff98dac4fdfe9232f3b92c6f3285e069ed877..9d567d4091dc558dab117966f4358d549b3ba66f 100644
--- a/www/js/controllers/help-controllers.js
+++ b/www/js/controllers/help-controllers.js
@@ -161,13 +161,16 @@ function HelpTipController($scope, $state, $window, $ionicSideMenuDelegate, $tim
     $scope.tour = true;
     $scope.continue = true;
 
-    // Wallet (if NOT login)
-    return $scope.startWalletNoLoginTour(0, true)
+    console.debug("[help] Starting help tour... {demo: {0}, readonly: {1}, isLogin: {2}}".format(
+      csConfig.demo, csConfig.readonly, csWallet.isLogin()));
+
+    // Wallet (if NOT readonly and NOT login)
+    return ((!csConfig.readonly && csWallet.isLogin()) ? $scope.startWalletNoLoginTour(0, true) : $q.when(true))
 
       // Wallet (if login)
       .then(function(next){
         if (!next) return false;
-        if (!csWallet.isLogin()) return true; // not login: continue
+        if (csConfig.readonly || !csWallet.isLogin()) return true; // not login or readonly: continue
         return $scope.startWalletTour(0, true)
           .then(function(endIndex){
             if (!endIndex) return false;
@@ -180,7 +183,7 @@ function HelpTipController($scope, $state, $window, $ionicSideMenuDelegate, $tim
       // Wallet certifications
       .then(function(next){
         if (!next) return false;
-        if (!csWallet.isLogin()) return true; // not login: continue
+        if (csConfig.readonly || !csWallet.isLogin()) return true; // not login or readonly: continue
         return $scope.startWalletCertTour(0, true)
           .then(function(endIndex){
             if (!endIndex) return false;
@@ -193,7 +196,7 @@ function HelpTipController($scope, $state, $window, $ionicSideMenuDelegate, $tim
       // My operations (if login)
       .then(function(next){
         if (!next) return false;
-        if (!csWallet.isLogin()) return true; // not login: continue
+        if (csConfig.readonly || !csWallet.isLogin()) return true; // not login or readonly: continue
         return $scope.startTxTour(0, true)
           .then(function(endIndex){
             if (!endIndex) return false;
@@ -206,7 +209,7 @@ function HelpTipController($scope, $state, $window, $ionicSideMenuDelegate, $tim
       // My wallets (if login)
       .then(function(next){
         if (!next) return false;
-        if (!csWallet.isLogin()) return true; // not login: continue
+        if (csConfig.readonly || !csWallet.isLogin()) return true; // not login or readonly: continue
         return $scope.startWalletsTour(0, true)
           .then(function(endIndex){
             if (!endIndex) return false;
@@ -219,12 +222,14 @@ function HelpTipController($scope, $state, $window, $ionicSideMenuDelegate, $tim
       // Header tour
       .then(function(next){
         if (!next) return false;
+        if (csConfig.readonly) return true; // readonly: continue
         return $scope.startHeaderTour(0, true);
       })
 
-      // Settings tour
+      // Settings tour (if not readonly mode)
       .then(function(next){
         if (!next) return false;
+        if (csConfig.readonly) return true; // Skip if readonly mode (will be play later)
         return $scope.startSettingsTour(0, true);
       })
 
@@ -289,6 +294,12 @@ function HelpTipController($scope, $state, $window, $ionicSideMenuDelegate, $tim
           });
       })
 
+      // Settings tour (if readonly mode)
+      .then(function(next){
+        if (!next) return false;
+        if (!csConfig.readonly) return true; // Skip if NOT readonly
+        return $scope.startSettingsTour(0, true);
+      })
 
       // Finish tour
       .then(function(next){
@@ -319,7 +330,7 @@ function HelpTipController($scope, $state, $window, $ionicSideMenuDelegate, $tim
           bindings: {
             content: 'HELP.TIP.MENU_BTN_CURRENCY',
             icon: {
-              position: UIUtils.screen.isSmall() ? 'left' : 'bottom-left'
+              position: UIUtils.screen.isSmall() || csConfig.readonly ? 'left' : 'bottom-left'
             }
           }
         });
@@ -432,7 +443,7 @@ function HelpTipController($scope, $state, $window, $ionicSideMenuDelegate, $tim
         // Select the second tabs
         $timeout(function () {
           var tabs = $window.document.querySelectorAll('ion-tabs .tabs a');
-          if (tabs && tabs.length == 3) {
+          if (tabs && tabs.length === 3) {
             angular.element(tabs[2]).triggerHandler('click');
           }
         }, 100);
@@ -450,7 +461,7 @@ function HelpTipController($scope, $state, $window, $ionicSideMenuDelegate, $tim
           bindings: {
             content: 'HELP.TIP.MENU_BTN_NETWORK',
             icon: {
-              position: UIUtils.screen.isSmall() ? 'left' : 'bottom-left'
+              position: UIUtils.screen.isSmall() || csConfig.readonly ? 'left' : 'bottom-left'
             }
           }
         });
@@ -545,7 +556,7 @@ function HelpTipController($scope, $state, $window, $ionicSideMenuDelegate, $tim
           bindings: {
             content: 'HELP.TIP.MENU_BTN_WOT',
             icon: {
-              position: UIUtils.screen.isSmall() ? 'left' : 'bottom-left'
+              position: UIUtils.screen.isSmall() || csConfig.readonly ? 'left' : 'bottom-left'
             }
           },
           onError: 'continue'
@@ -650,6 +661,8 @@ function HelpTipController($scope, $state, $window, $ionicSideMenuDelegate, $tim
    * @returns {*}
    */
   $scope.startWotCertTour = function(startIndex, hasNext) {
+    if (csConfig.readonly) return $q.when(true);
+
     var steps = [
 
       function() {
@@ -1038,7 +1051,7 @@ function HelpTipController($scope, $state, $window, $ionicSideMenuDelegate, $tim
    * @returns {*}
    */
   $scope.startHeaderTour = function(startIndex, hasNext) {
-    if (UIUtils.screen.isSmall()) return $q.when(true);
+    if (UIUtils.screen.isSmall() || csConfig.readonly) return $q.when(true);
 
     function _getProfilBtnElement() {
       var elements = $window.document.querySelectorAll('#helptip-header-bar-btn-profile');
@@ -1053,15 +1066,13 @@ function HelpTipController($scope, $state, $window, $ionicSideMenuDelegate, $tim
         var element = _getProfilBtnElement();
         if (!element) return true;
 
-        // If home; add offset because of locales button
-        var iconStyle =  $state.is('app.home') ? 'margin-right: 60px' : undefined;
-
         return $scope.showHelpTip(element, {
           bindings: {
             content: 'HELP.TIP.HEADER_BAR_BTN_PROFILE',
             icon: {
               position: 'right',
-              style: iconStyle
+              // If home; add offset because of locales button
+              style: $state.is('app.home') ? 'margin-right: 60px' : undefined
             }
           }
         });
@@ -1120,13 +1131,13 @@ function HelpTipController($scope, $state, $window, $ionicSideMenuDelegate, $tim
     var steps = [
 
       function () {
-        if (!UIUtils.screen.isSmall()) return true;
+        if (!UIUtils.screen.isSmall() && !csConfig.readonly) return true;
         $ionicSideMenuDelegate.toggleLeft(true);
-        return $scope.showHelpTip('helptip-menu-btn-settings', {
+        return $scope.showHelpTip(UIUtils.screen.isSmall() ? 'helptip-menu-btn-settings' : 'menu-btn-settings', {
           bindings: {
             content: 'HELP.TIP.MENU_BTN_SETTINGS',
             icon: {
-              position: 'left'
+              position: UIUtils.screen.isSmall() ? 'left' : 'bottom-left'
             }
           },
           timeout: 1000
diff --git a/www/js/controllers/join-controllers.js b/www/js/controllers/join-controllers.js
index 44cb09da657a7a4d49c913c841a19fd5791ce7aa..f4444fd7c98afc93a917e34e75b3c1ce29ea93fd 100644
--- a/www/js/controllers/join-controllers.js
+++ b/www/js/controllers/join-controllers.js
@@ -86,7 +86,7 @@ function JoinChooseAccountTypeModalController($scope, $state, Modals, UIUtils, c
   };
 
   $scope.selectAccountTypeAndClose = function(type) {
-    if (csConfig.demo === true || csConfig.demo === "true") {
+    if (csConfig.demo) {
       return UIUtils.alert.demo();
     }
     $scope.formData.accountType = type;
diff --git a/www/js/controllers/login-controllers.js b/www/js/controllers/login-controllers.js
index fd671bee0a5eed7749336e11d133e0317e3173d2..527495df719def631ab0ccf4fb16100d743a89de 100644
--- a/www/js/controllers/login-controllers.js
+++ b/www/js/controllers/login-controllers.js
@@ -50,7 +50,7 @@ function LoginModalController($scope, $timeout, $q, $ionicPopover, $window, Cryp
   parameters = parameters || {};
 
   // Demo mode: force PUBKEY method
-  if (csConfig.demo === true || csConfig.demo === "true") {
+  if (csConfig.demo) {
     parameters.method = 'PUBKEY';
   }
 
@@ -424,7 +424,7 @@ function LoginModalController($scope, $timeout, $q, $ionicPopover, $window, Cryp
   $scope.changeMethod = function(method, params){
     $scope.hideMethodsPopover();
 
-    if (method !== 'PUBKEY' && (csConfig.demo === true || csConfig.demo === "true")) {
+    if (method !== 'PUBKEY' && csConfig.demo) {
       return UIUtils.alert.demo();
     }
 
@@ -612,10 +612,14 @@ function LoginModalController($scope, $timeout, $q, $ionicPopover, $window, Cryp
 }
 
 
-function AuthController($scope, $controller){
+function AuthController($scope, $controller, csConfig){
+
+  var config = angular.copy(csConfig);
+  config.demo = false;
+  config.readonly = false;
 
   // Initialize the super class and extend it.
-  angular.extend(this, $controller('LoginModalCtrl', {$scope: $scope, parameters: {auth: true}}));
+  angular.extend(this, $controller('LoginModalCtrl', {$scope: $scope, parameters: {auth: true}, csConfig: config}));
 
   $scope.setForm = function(form) {
     $scope.form = form;
diff --git a/www/js/controllers/wallet-controllers.js b/www/js/controllers/wallet-controllers.js
index e6d338e4e4865357280d778aa45ca3c15facc2f1..59224fef7532a939a74785d6dabdbfc9b1e06f17 100644
--- a/www/js/controllers/wallet-controllers.js
+++ b/www/js/controllers/wallet-controllers.js
@@ -1225,7 +1225,7 @@ function WalletSecurityModalController($scope, UIUtils, csConfig, csWallet, $tra
   };
 
   $scope.selectOption = function(option, enableOnDemo){
-    if (!enableOnDemo && (csConfig.demo === true || csConfig.demo === "true")) {
+    if (!enableOnDemo && csConfig.demo) {
       return UIUtils.alert.demo();
     }
     $scope.option = option;
diff --git a/www/js/platform.js b/www/js/platform.js
index 09c6cd1abe547d1fd29098c607faeda04538e7c0..e243bc4174d76dd374cc527a6f4d6bc46d024579 100644
--- a/www/js/platform.js
+++ b/www/js/platform.js
@@ -112,6 +112,10 @@ angular.module('cesium.platform', ['ngIdle', 'cesium.config', 'cesium.services']
       listeners,
       removeChangeStateListener;
 
+    // Fix csConfig values
+    csConfig.demo = csConfig.demo === true || csConfig.demo === 'true' || false;
+    csConfig.readonly = csConfig.readonly === true || csConfig.readonly === 'true' || false;
+
     function disableChangeState() {
       if (removeChangeStateListener) return; // make sure to call this once
 
diff --git a/www/js/services/settings-services.js b/www/js/services/settings-services.js
index 403ae8f8391cd524aab226069c255a9d3937f5ee..5249c912ab3836782106a037732a9747002eae01 100644
--- a/www/js/services/settings-services.js
+++ b/www/js/services/settings-services.js
@@ -59,6 +59,8 @@ angular.module('cesium.settings.services', ['ngApi', 'cesium.config'])
     timeWarningExpireMembership: 2592000 * 2 /*=2 mois*/,
     timeWarningExpire: 2592000 * 3 /*=3 mois*/,
     minVersion: '1.1.0',
+    sourceUrl: 'https://git.duniter.org/clients/cesium-grp/cesium',
+    sourceLicenseUrl: 'https://git.duniter.org/clients/cesium-grp/cesium/-/raw/master/LICENSE',
     newIssueUrl: "https://git.duniter.org/clients/cesium-grp/cesium/issues/new",
     userForumUrl: "https://forum.monnaie-libre.fr",
     latestReleaseUrl: "https://api.github.com/repos/duniter/cesium/releases/latest",
diff --git a/www/js/services/utils-services.js b/www/js/services/utils-services.js
index 6193485c8af0a8382f71d1bcc548eaf40df18259..c7a2dd3e21c06c52dd387b848f38810d0720ba01 100644
--- a/www/js/services/utils-services.js
+++ b/www/js/services/utils-services.js
@@ -101,9 +101,9 @@ angular.module('cesium.utils.services', ['angular-fullscreen-toggle'])
   }
 
   function alertDemo() {
-    return $translate(["DEMO.FEATURE_NOT_AVAILABLE", "DEMO.INSTALL_HELP"])
+    return $translate(["MODE.DEMO.FEATURE_NOT_AVAILABLE", "MODE.DEMO.INSTALL_HELP"])
       .then(function(translations) {
-        var message = translations["DEMO.FEATURE_NOT_AVAILABLE"] + "<br/><br/>" + translations["DEMO.INSTALL_HELP"];
+        var message = translations["MODE.DEMO.FEATURE_NOT_AVAILABLE"] + "<br/><br/>" + translations["MODE.DEMO.INSTALL_HELP"];
         return alertInfo(message, undefined, {cssClass: 'large'});
       });
   }
diff --git a/www/js/services/wallet-services.js b/www/js/services/wallet-services.js
index 79e9549171104d83ba8c44c2a1f8c5e129fea080..cc54c98e239b65a19bec452a004bd07a401ddf19 100644
--- a/www/js/services/wallet-services.js
+++ b/www/js/services/wallet-services.js
@@ -289,8 +289,8 @@ angular.module('cesium.wallet.services', ['ngApi', 'ngFileSaver', 'cesium.bma.se
           });
       }
 
-      // Disable auth, if demo
-      if (csConfig.demo === true || csConfig.demo === "true") {
+      // Disable auth, if readonly or demo
+      if (csConfig.readonly || csConfig.demo) {
         return UIUtils.alert.demo()
           .then(function() {
             throw 'CANCELLED';
diff --git a/www/plugins/es/templates/settings/plugin_settings.html b/www/plugins/es/templates/settings/plugin_settings.html
index 57399c58140fac2996c70cc62886ca899ad27a43..288ba6c2f631b0f5bf09c0d7f50f713cfd1b749b 100644
--- a/www/plugins/es/templates/settings/plugin_settings.html
+++ b/www/plugins/es/templates/settings/plugin_settings.html
@@ -14,9 +14,9 @@
       </label>
     </div>
 
-    <span class="item item-divider" translate>SETTINGS.STORAGE_DIVIDER</span>
+    <span class="item item-divider hidden-readonly hidden-demo" translate>SETTINGS.STORAGE_DIVIDER</span>
 
-    <div class="item item-toggle item-text-wrap dark">
+    <div class="item item-toggle item-text-wrap dark hidden-demo hidden-readonly">
       <div class="input-label" ng-class="{'gray': !formData.enable}" class="input-label" translate>ES_SETTINGS.ENABLE_REMOTE_STORAGE</div>
       <h4 class="gray text-wrap" ng-bind-html="'ES_SETTINGS.ENABLE_REMOTE_STORAGE_HELP' | translate"></h4>
       <label class="toggle toggle-royal">
@@ -59,10 +59,10 @@
       <i class="icon ion-ios-arrow-right"></i>
     </ion-item>
 
-    <span class="item item-divider" translate>ES_SETTINGS.NOTIFICATIONS.DIVIDER</span>
+    <span class="item item-divider hidden-readonly" translate>ES_SETTINGS.NOTIFICATIONS.DIVIDER</span>
 
     <!-- Enable HTML notifications -->
-    <div class="item item-toggle dark hidden-xs hidden-sm">
+    <div class="item item-toggle dark hidden-xs hidden-sm hidden-readonly">
       <div ng-class="{'gray': !formData.enable}" class="input-label" translate>ES_SETTINGS.NOTIFICATIONS.ENABLE_HTML5_NOTIFICATION</div>
       <h4 class="gray" ng-bind-html="'ES_SETTINGS.NOTIFICATIONS.ENABLE_HTML5_NOTIFICATION_HELP' | translate"></h4>
       <label class="toggle toggle-royal">
@@ -73,9 +73,9 @@
       </label>
     </div>
 
-    <span class="item gray item-text-wrap" translate>ES_SETTINGS.NOTIFICATIONS.HELP_TEXT</span>
+    <span class="item gray item-text-wrap hidden-readonly" translate>ES_SETTINGS.NOTIFICATIONS.HELP_TEXT</span>
 
-    <label class="item item-toggle dark item-text-wrap">
+    <label class="item item-toggle dark item-text-wrap hidden-readonly">
       <span ng-class="{'gray': !formData.enable}" translate>ES_SETTINGS.NOTIFICATIONS.ENABLE_TX_SENT</span>
       <div class="toggle toggle-royal">
         <input type="checkbox" ng-model="formData.notifications.txSent" ng-disabled="!formData.enable">
@@ -84,7 +84,7 @@
         </div>
       </div>
     </label>
-    <label class="item item-toggle dark item-text-wrap">
+    <label class="item item-toggle dark item-text-wrap hidden-readonly">
       <span ng-class="{'gray': !formData.enable}" translate>ES_SETTINGS.NOTIFICATIONS.ENABLE_TX_RECEIVED</span>
       <label class="toggle toggle-royal">
         <input type="checkbox" ng-model="formData.notifications.txReceived" ng-disabled="!formData.enable">
@@ -93,7 +93,7 @@
         </div>
       </label>
     </label>
-    <label class="item item-toggle dark item-text-wrap">
+    <label class="item item-toggle dark item-text-wrap hidden-readonly">
       <span ng-class="{'gray': !formData.enable}" translate>ES_SETTINGS.NOTIFICATIONS.ENABLE_CERT_SENT</span>
       <div class="toggle toggle-royal">
         <input type="checkbox" ng-model="formData.notifications.certSent" ng-disabled="!formData.enable">
@@ -102,7 +102,7 @@
         </div>
       </div>
     </label>
-    <label class="item item-toggle dark item-text-wrap">
+    <label class="item item-toggle dark item-text-wrap hidden-readonly">
       <span ng-class="{'gray': !formData.enable}" translate>ES_SETTINGS.NOTIFICATIONS.ENABLE_CERT_RECEIVED</span>
       <div class="toggle toggle-royal">
         <input type="checkbox" ng-model="formData.notifications.certReceived" ng-disabled="!formData.enable">
diff --git a/www/plugins/es/templates/wot/view_certifications_extend.html b/www/plugins/es/templates/wot/view_certifications_extend.html
index 46de8d5d0d64c507112e58f9d01c8f54f0f059c3..ccd9c015d0b9278bd846145de56b90f26ebd805e 100644
--- a/www/plugins/es/templates/wot/view_certifications_extend.html
+++ b/www/plugins/es/templates/wot/view_certifications_extend.html
@@ -1,5 +1,5 @@
 <!-- nav buttons section -->
-<ng-if ng-if=":state:enable && extensionPoint === 'nav-buttons'">
+<ng-if ng-if=":state:enable && extensionPoint === 'nav-buttons' && !$root.config.readonly">
 
   <button class="button button-icon button-clear icon ion-android-more-vertical visible-xs visible-sm" ng-click="showCertificationActionsPopover($event)">
   </button>
@@ -7,7 +7,7 @@
 </ng-if>
 
 <!-- Buttons section -->
-<ng-if ng-if=":state:enable && extensionPoint === 'buttons'">
+<ng-if ng-if=":state:enable && extensionPoint === 'buttons' && !$root.config.readonly">
 
   <button class="button button-stable button-small-padding icon ion-android-more-vertical"
           ng-click="showCertificationActionsPopover($event)"
diff --git a/www/plugins/es/templates/wot/view_identity_extend.html b/www/plugins/es/templates/wot/view_identity_extend.html
index f75b6d7eb15ca8b4705c86e6913c48d4dafe1349..f9cb63b914207e7f9eea7dc595926890d89fb6f2 100644
--- a/www/plugins/es/templates/wot/view_identity_extend.html
+++ b/www/plugins/es/templates/wot/view_identity_extend.html
@@ -6,7 +6,7 @@
 </ng-if>
 
 <!-- Top fab buttons -->
-<ng-if ng-if=":state:enable && extensionPoint === 'buttons-top-fab'">
+<ng-if ng-if=":state:enable && extensionPoint === 'buttons-top-fab' && !$root.config.readonly">
   <button id="fab-compose-{{:rebind:formData.pubkey}}"
           class="button button-fab button-fab-top-left button-fab-hero mini button-stable spin"
           style="left: 88px;"
@@ -16,7 +16,7 @@
 </ng-if>
 
 <!-- Buttons section -->
-<ng-if ng-if=":state:enable && extensionPoint === 'buttons'">
+<ng-if ng-if=":state:enable && extensionPoint === 'buttons' && !$root.config.readonly">
   <button class="button button-stable button-small-padding icon ion-email"
           ng-disabled="loading"
           ng-click="showNewMessageModal()"
@@ -25,7 +25,7 @@
 </ng-if>
 
 <!-- End of buttons section -->
-<ng-if ng-if=":state:enable && extensionPoint === 'after-buttons'">
+<ng-if ng-if=":state:enable && extensionPoint === 'after-buttons' && !$root.config.readonly">
   <!-- options -->
   <button class="button button-stable button-small-padding icon ion-android-more-vertical"
           ng-click="showActionsPopover($event)">
diff --git a/www/templates/api/transfer.html b/www/templates/api/transfer.html
index dbd18ae7f8085e1451bc3ad767c631933b224b66..4efe4869bba2a800fa24c01eb51d4886183f7052 100644
--- a/www/templates/api/transfer.html
+++ b/www/templates/api/transfer.html
@@ -45,6 +45,13 @@
             </div>
           </div>
 
+          <div class="no-padding energized-100-bg" ng-if="$root.config.demo">
+            <div class="item item-icon-left item-text-wrap no-border">
+              <i class="icon ion-android-alert assertive" ></i>
+              <p translate>MODE.DEMO.INSTALL_HELP</p>
+            </div>
+          </div>
+
           <ng-include src="::'templates/login/form_login.html'"></ng-include>
 
         </div>
diff --git a/www/templates/common/note_feature_not_available.html b/www/templates/common/note_feature_not_available.html
index 96cdf71c795b979ec3f29574c2804edeed948558..ce33c9d8d494f7eb5b603226d0ef029e65985966 100644
--- a/www/templates/common/note_feature_not_available.html
+++ b/www/templates/common/note_feature_not_available.html
@@ -1,5 +1,5 @@
 
-<h4 ng-if="::$root.config.demo" style="color: red !important;">
+<h4 class="assertive">
   <b class="ion-android-close"></b>
-  <span translate>DEMO.FEATURE_NOT_AVAILABLE</span>
+  <span translate>MODE.DEMO.FEATURE_NOT_AVAILABLE</span>
 </h4>
diff --git a/www/templates/help/help.html b/www/templates/help/help.html
index 7cc999ae18d48ee97c6419c525fc1d2bc1a27308..40c81e48585cb4348bc3cee6eecd491055299de8 100644
--- a/www/templates/help/help.html
+++ b/www/templates/help/help.html
@@ -1,10 +1,22 @@
 <a name="demo"></a>
 <div class="row responsive-sm"
+     ng-if="::$root.config.demo"
      ng-class="itemsClass['demo']">
-  <div class="col col-20" translate>DEMO.MODE</div>
+  <div class="col col-20" translate>MODE.DEMO.MODE</div>
   <div class="col">
-    <span translate>DEMO.MODE_HELP</span><br/>
-    <span translate>DEMO.INSTALL_HELP</span>
+    <span translate>MODE.DEMO.MODE_HELP</span><br/>
+    <span translate>MODE.DEMO.INSTALL_HELP</span>
+  </div>
+</div>
+
+<a name="readonly"></a>
+<div class="row responsive-sm"
+     ng-if="::$root.config.readonly"
+     ng-class="itemsClass['readonly']">
+  <div class="col col-20" translate>MODE.READONLY.MODE</div>
+  <div class="col">
+    <span translate>MODE.READONLY.MODE_HELP</span><br/>
+    <span translate>MODE.READONLY.INSTALL_HELP</span>
   </div>
 </div>
 
diff --git a/www/templates/home/home.html b/www/templates/home/home.html
index f04c64c844d46c6faf769c3c62d2e6993576b826..a30058c89280175128d1c36c3772f509c86987b2 100644
--- a/www/templates/home/home.html
+++ b/www/templates/home/home.html
@@ -15,17 +15,30 @@
 
   <ion-content class="positive-900-bg circle-bg-dark">
 
+    <div class="ribbon" ng-if="::$root.config.demo || $root.config.readonly">
+      <a class="badge badge-assertive" ng-if="$root.config.demo"  ng-click="showHelpModal('demo')">{{:locale:'MODE.DEMO.BADGE'|translate}}</a>
+      <a class="badge badge-balanced" ng-if="$root.config.readonly" ng-click="showHelpModal('readonly')">{{:locale:'MODE.READONLY.BADGE'|translate}}</a>
+      <a class="badge badge-positive" ng-click="openLink($event, $root.settings.sourceUrl)" title="{{:locale:'HOME.FORK_ME'|translate}}">{{:locale:'HOME.FREE_SOFTWARE'|translate}}</a>
+      <a class="badge badge-stable" ng-click="openLink($event, $root.settings.sourceLicenseUrl)" title="{{:locale:'HOME.SHOW_LICENSE'|translate}}">AGPL-3.0</a>
+    </div>
+
     <div class="row padding-horizontal no-padding-xxs responsive-lg">
       <div class="col col-30 no-padding hidden-xs hidden-sm">&nbsp;</div>
       <div class="col text-center no-padding-xs main-container">
 
-        <div id="helptip-home-logo" class="logo"></div>
+        <div id="helptip-home-logo" class="logo">
+        </div>
 
-        <h4>
+        <h4 ng-if="::!$root.config.readonly">
           <span class="hidden-xs" translate>HOME.WELCOME</span>
           <b ng-show="!loading" translate-values=":currency:{currency: $root.currency.name}" translate>HOME.MESSAGE</b>
         </h4>
 
+        <h4 ng-if="::$root.config.readonly">
+          <span class="hidden-xs" translate>HOME.WELCOME_READONLY</span>
+          <b ng-show="!loading" translate-values=":currency:{currency: $root.currency.name}" translate>HOME.MESSAGE_READONLY</b>
+        </h4>
+
         <div class="center padding" ng-if="loading">
           <ion-spinner icon="android" ></ion-spinner>
         </div>
@@ -39,7 +52,7 @@
             <!-- Retry -->
             <button type="button"
                     class="button button-positive icon icon-left ion-refresh ink"
-                    ng-click="reload()">{{'COMMON.BTN_REFRESH'|translate}}</button>
+                    ng-click="reload()">{{:locale:'COMMON.BTN_REFRESH'|translate}}</button>
           </div>
         </div>
 
@@ -47,15 +60,27 @@
 
           <!-- Help tour (NOT ready yet for small device) -->
           <button type="button"
-                  class="button button-block button-stable button-raised icon-left icon ion-easel ink-dark hidden-xs"
-                  ng-show="login"
+                  class="button button-block button-stable button-raised icon-left icon ion-easel ink-dark"
+                  ng-class="::{'hidden-xs': !$root.config.readonly}"
+                  ng-show="login || $root.config.readonly"
                   ng-click="startHelpTour($event)" >
-            {{'COMMON.BTN_HELP_TOUR'|translate}}
+            {{:locale:'COMMON.BTN_HELP_TOUR'|translate}}
+          </button>
+
+          <button type="button"
+                  class="item button button-block button-balanced button-raised icon icon-left ion-ios-world-outline ink-dark "
+                  ui-sref="app.currency" ng-if="::$root.config.readonly">
+            <span translate-values=":currency:{currency: $root.currency.name}" translate>HOME.BTN_CURRENCY</span>
+          </button>
+          <button type="button"
+                  class="item button button-block button-positive button-raised icon icon-left ion-cloud ink-dark "
+                  ui-sref="app.network" ng-if="::$root.config.readonly">
+            {{:locale:'HOME.BTN_NETWORK'|translate}}
           </button>
 
           <button type="button"
                   class="button button-block button-positive button-raised ink-dark"
-                  ng-click="showJoinModal()" ng-if="!login" translate>LOGIN.CREATE_FREE_ACCOUNT</button>
+                  ng-click="showJoinModal()" ng-if="!$root.config.readonly && !login" translate>LOGIN.CREATE_FREE_ACCOUNT</button>
 
           <button type="button"
                   class="item button button-block button-raised icon icon-left ion-person ink-dark"
@@ -66,7 +91,7 @@
                   class="item button button-block button-stable button-raised icon icon-left ion-card ink-dark visible-xs"
                   ui-sref="app.view_wallet_tx" ng-if="login">
             <b class="icon-secondary ion-clock" style="left: 52px; top: -2px; font-size: 10pt; display: block;"></b>
-            {{'MENU.TRANSACTIONS'|translate}}
+            {{:locale:'MENU.TRANSACTIONS'|translate}}
           </button>
 
           <button type="button"
@@ -76,7 +101,9 @@
           <br class="visible-xs visible-sm"/>
 
           <!-- join link -->
-          <div class="text-center no-padding" ng-show="!login">
+          <div class="text-center no-padding"
+               ng-if="::!$root.config.readonly"
+               ng-show="!login">
             <br class="visible-xs visible-sm"/>
             {{'LOGIN.HAVE_ACCOUNT_QUESTION'|translate}}
             <b>
@@ -98,15 +125,31 @@
             </b>
           </div>
 
+          <!-- login (small screen) -->
           <button type="button"
                   class="button button-block button-stable button-raised ink visible-xs visible-sm"
-                  ui-sref="app.view_wallet" ng-if="!login" translate>COMMON.BTN_LOGIN</button>
+                  ui-sref="app.view_wallet" ng-if="!$root.config.readonly && !login" translate>COMMON.BTN_LOGIN</button>
+
+          <!-- Help if readonly or demo mode -->
+          <div class="text-center visible-demo">
+            <br/>
+            <p class="text-center">
+              <span class="light"><i class="icon ion-help-circled" style="font-size: 16pt;"></i></span>
+              <span class="stable" translate>MODE.DEMO.MODE_HELP</span>
+              <a href="#" ng-click="showHelpModal('demo')" translate>HOME.READ_MORE</a>
+            </p>
+          </div>
+          <p class="text-center no-padding visible-readonly">
+            <br/>
+            <span class="light"><i class="icon ion-help-circled " style="font-size: 16pt;"></i></span>
+            <span class="stable" translate>MODE.READONLY.INSTALL_HELP</span>
+          </p>
 
 
           <div class="text-center no-padding visible-xs stable">
             <br/>
             <!-- version -->
-            {{'COMMON.APP_VERSION'|translate:{version: config.version} }}
+            {{:locale:'COMMON.APP_VERSION'|translate:{version: config.version} }}
             |
             <!-- about -->
             <a href="#" ng-click="showAboutModal()" translate>HOME.BTN_ABOUT</a>
diff --git a/www/templates/join/modal_choose_account_type.html b/www/templates/join/modal_choose_account_type.html
index 8e49160c7b8c36994d0e3e064ef9d952992373a1..b2d0e5764acdee59f1a12feddb8e6a47f1153b6e 100644
--- a/www/templates/join/modal_choose_account_type.html
+++ b/www/templates/join/modal_choose_account_type.html
@@ -87,7 +87,7 @@
                 <i class="item-image icon dark ion-card"></i>
                 <h2 translate>ACCOUNT.NEW.WALLET_ACCOUNT</h2>
                 <h4 class="gray" translate>ACCOUNT.NEW.WALLET_ACCOUNT_HELP</h4>
-                <ng-include src="::'templates/common/note_feature_not_available.html'"></ng-include>
+                <ng-include ng-if="::$root.config.demo" src="::'templates/common/note_feature_not_available.html'"></ng-include>
                 <i class="icon dark ion-ios-arrow-right"></i>
               </div>
             </button>
@@ -99,7 +99,7 @@
                 <i class="item-image icon dark ion-person"></i>
                 <h2 translate>ACCOUNT.NEW.MEMBER_ACCOUNT</h2>
                 <h4 class="gray" ng-bind-html="'ACCOUNT.NEW.MEMBER_ACCOUNT_HELP'|translate:currency"></h4>
-                <ng-include src="::'templates/common/note_feature_not_available.html'"></ng-include>
+                <ng-include ng-if="::$root.config.demo" src="::'templates/common/note_feature_not_available.html'"></ng-include>
                 <i class="icon dark ion-ios-arrow-right"></i>
               </div>
             </button>
diff --git a/www/templates/menu.html b/www/templates/menu.html
index 68b69347a26927adecfae7c7e722745729e63fce..79b34e896591736546f7ac15f6a94a56ceb9b05e 100644
--- a/www/templates/menu.html
+++ b/www/templates/menu.html
@@ -16,7 +16,7 @@
 
         <!-- current node info -->
         <button class="button button-clear button-peer hidden-xs hidden-sm gray"
-                ng-if="$root.settings.expertMode"
+                ng-if="$root.config.readonly || $root.settings.expertMode"
                 style="max-width: 450px !important;"
                 ng-click="showPeerInfoPopover($event)">
           <span style="display: inline-flex;">
@@ -32,7 +32,7 @@
 
         <!-- profile -->
         <a id="helptip-header-bar-btn-profile"
-           class="button button-icon button-clear hidden-xs hidden-sm"
+           class="button button-icon button-clear hidden-xs hidden-sm hidden-readonly"
            ng-click="showProfilePopover($event)">
           <i class="avatar avatar-member"
              ng-if="!walletData.avatar"
@@ -61,7 +61,8 @@
         <span class="animate-fade-in animate-show-hide ng-hide" ng-show="$root.currency.name">
           {{:locale:'COMMON.APP_NAME'|translate}} {{$root.currency.name|abbreviate}}
         </span>
-        <a class="badge badge-demo badge-assertive" ng-if="::$root.config.demo" ng-click="showHelpModal('demo')()" translate>DEMO.BADGE</a>
+        <a class="badge badge-assertive badge-app-mode left visible-demo" ng-click="showHelpModal('demo')">{{:locale:'MODE.DEMO.BADGE'|translate}}</a>
+        <a class="badge badge-balanced badge-app-mode right visible-readonly" ng-click="showHelpModal('readonly')">{{:locale:'MODE.READONLY.BADGE'|translate}}</a>
       </h1>
 
       <div class="visible-sm visible-xs hero">
@@ -110,12 +111,12 @@
         <!-- *************** -->
 
         <ion-item menu-close
-                  class="item item-actions item-button-right visible-xs visible-sm"
+                  class="item item-actions item-button-right visible-xs visible-sm hidden-readonly"
                   ng-if="login"
                   ng-class="::{'item-button-left': $root.device.barcode.enable}">
           <!-- transfer -->
           <button
-            class="button button-positive ink-dark"
+            class="button button-positive ink-dark "
             ng-click="showTransferModal()">
             <i class="icon ion-paper-airplane"></i>
           </button>
@@ -144,10 +145,10 @@
         <!-- ************ -->
         <!-- User Section -->
         <!-- ************ -->
-        <div class="item item-divider"></div>
+        <div class="item item-divider hidden-readonly"></div>
 
         <a menu-close
-           class="item item-icon-left"
+           class="item item-icon-left hidden-readonly"
            active-link="active"
            active-link-path-prefix="#/app/account"
            ui-sref="app.view_wallet"
@@ -158,7 +159,7 @@
         <a id="helptip-menu-btn-account"></a>
 
         <a menu-close
-           class="item item-icon-left"
+           class="item item-icon-left hidden-readonly"
            active-link="active"
            active-link-path-prefix="#/app/history"
            ui-sref="app.view_wallet_tx"
@@ -170,7 +171,7 @@
         <a id="helptip-menu-btn-tx"></a>
 
         <a menu-close
-           class="item item-icon-left"
+           class="item item-icon-left hidden-readonly"
            active-link="active"
            active-link-path-prefix="#/app/wallets"
            ui-sref="app.view_wallets"
@@ -181,16 +182,16 @@
         </a>
         <a id="helptip-menu-btn-wallets"></a>
 
-        <div class="item item-divider visible-xs visible-sm"></div>
+        <div class="item item-divider visible-xs visible-sm hidden-readonly" ></div>
 
         <!-- Allow extension here -->
-        <cs-extension-point name="menu-user"></cs-extension-point>
+        <cs-extension-point name="menu-user" ></cs-extension-point>
 
         <!-- *************** -->
         <!-- Actions section -->
         <!-- *************** -->
 
-        <ion-item class="item hidden-xs hidden-sm">
+        <ion-item class="item hidden-xs hidden-sm hidden-readonly">
           <!-- transfer -->
           <button class="button button-block button-small button-small-padding  icon-left icon ion-paper-airplane no-margin"
                   ng-class="{'button-positive': login, 'button-stable': !login}"
@@ -200,12 +201,12 @@
         </ion-item>
 
         <!-- Spacer (large screen only) -->
-        <div class="item-spacer"></div>
+        <div class="item-spacer hidden-readonly"></div>
 
         <!-- ************ -->
         <!-- Main section -->
         <!-- ************ -->
-        <div class="item item-divider"></div>
+        <div class="item item-divider hidden-readonly"></div>
 
         <!-- Help tour (NOT ready yet for small device) -->
         <a  class="item item-icon-left item-closeable hidden-xs hidden-sm"
@@ -259,6 +260,8 @@
         <cs-extension-point name="menu-discover"></cs-extension-point>
 
 
+        <div class="item-spacer visible-readonly"></div>
+
         <div class="item item-divider visible-xs visible-sm"></div>
 
 
@@ -272,8 +275,9 @@
         </a>
 
         <a menu-close
-           class="item item-icon-left visible-xs visible-sm"
+           class="item item-icon-left visible-xs visible-sm visible-readonly"
            active-link="active"
+           id="menu-btn-settings"
            active-link-path-prefix="#/app/settings"
            ui-sref="app.settings">
           <i class="icon ion-android-settings"></i>
diff --git a/www/templates/modal_about.html b/www/templates/modal_about.html
index 61496ac67812ed0d926748d05e88b847a07b50f9..d8113a5a6ccfcf72807dd248a685e8ecfb18ba5d 100644
--- a/www/templates/modal_about.html
+++ b/www/templates/modal_about.html
@@ -57,7 +57,7 @@
       <ion-item class="item-icon-left">
         <i class="item-image icon ion-network"></i>
         {{'ABOUT.CODE' | translate}}
-        <h3><a ng-click="openLink($event, 'https://git.duniter.org/clients/cesium-grp/cesium')">https://git.duniter.org/clients/cesium-grp/cesium</a></h3>
+        <h3><a ng-click="openLink($event, $root.settings.sourceUrl)">{{$root.settings.sourceUrl}}</a></h3>
       </ion-item>
 
       <!-- team -->
diff --git a/www/templates/settings/settings.html b/www/templates/settings/settings.html
index b3bb0d9a98cab0e0ff3691dfb836c5f6d15d7fcb..7e75e002cb093950e6bd1737a10d6a63b52cd9dc 100644
--- a/www/templates/settings/settings.html
+++ b/www/templates/settings/settings.html
@@ -107,11 +107,11 @@
         <!-- Allow extension here -->
         <cs-extension-point name="common"></cs-extension-point>
 
-        <span class="item item-divider">
+        <span class="item item-divider hidden-readonly">
           {{'SETTINGS.AUTHENTICATION_SETTINGS' | translate}}
         </span>
 
-        <div class="item item-toggle item-text-wrap" >
+        <div class="item item-toggle item-text-wrap hidden-readonly" >
           <div class="input-label" ng-class="{'gray': !formData.useLocalStorage}">
             {{'SETTINGS.REMEMBER_ME' | translate}}
           </div>
@@ -126,16 +126,20 @@
           </label>
         </div>
 
-        <label class="item item-input item-select item-text-wrap">
-          <div class="input-label hidden-xs">
+        <label class="item item-input item-select item-text-wrap hidden-readonly"
+               >
+          <div class="input-label hidden-xs" ng-class="::{'gray': $root.config.demo}">
             <span class="hidden-xs" translate>SETTINGS.KEEP_AUTH</span>
             <h4 class="gray text-wrap hidden-xs" ng-bind-html="'SETTINGS.KEEP_AUTH_HELP' | translate"></h4>
+            <ng-include ng-if="::$root.config.demo" src="::'templates/common/note_feature_not_available.html'"></ng-include>
           </div>
-          <span class="visible-xs" translate>SETTINGS.KEEP_AUTH_SHORT</span>
+          <span class="visible-xs" ng-class="::{'gray': $root.config.demo}" translate>SETTINGS.KEEP_AUTH_SHORT</span>
 
           <select ng-model="formData.keepAuthIdle"
+                  ng-disabled="$root.config.demo"
                   ng-options="i as (keepAuthIdleLabels[i].labelKey | translate:keepAuthIdleLabels[i].labelParams ) for i in keepAuthIdles track by i">
           </select>
+
         </label>
 
         <div class="item item-input hidden-xs hidden-sm" ng-class="{'gray': (!formData.useLocalStorage || !formData.rememberMe)}" ng-if="::$root.device.isDesktop()">
@@ -151,11 +155,11 @@
       <!-- second column  -->
       <div class="col col-50 list item-border-large padding-left padding-right no-padding-xs no-padding-sm no-margin-xs no-margin-sm">
 
-        <span class="item item-divider">
+        <span class="item item-divider hidden-readonly">
           {{'SETTINGS.WALLETS_SETTINGS' | translate}}
         </span>
 
-          <div class="item item-toggle item-text-wrap dark">
+          <div class="item item-toggle item-text-wrap dark hidden-readonly">
             <span class="input-label" ng-class="{'gray': !formData.useLocalStorage}" translate>SETTINGS.USE_WALLETS_ENCRYPTION</span>
             <h4 class="gray text-wrap" ng-bind-html="'SETTINGS.USE_WALLETS_ENCRYPTION_HELP' | translate">
             </h4>
@@ -168,9 +172,9 @@
             </label>
           </div>
 
-        <span class="item item-divider" translate>SETTINGS.HISTORY_SETTINGS</span>
+        <span class="item item-divider hidden-readonly" translate>SETTINGS.HISTORY_SETTINGS</span>
 
-        <div class="item item-toggle item-text-wrap dark">
+        <div class="item item-toggle item-text-wrap dark hidden-readonly">
           <div class="input-label" translate>SETTINGS.DISPLAY_UD_HISTORY</div>
           <label class="toggle toggle-royal">
             <input type="checkbox" ng-model="formData.showUDHistory" >
@@ -180,7 +184,7 @@
           </label>
         </div>
 
-        <div class="item item-toggle dark hidden-xs hidden-sm">
+        <div class="item item-toggle dark hidden-xs hidden-sm hidden-readonly">
           <div class="input-label" translate>SETTINGS.TX_HISTORY_AUTO_REFRESH</div>
           <h4 class="gray text-wrap" ng-bind-html="'SETTINGS.TX_HISTORY_AUTO_REFRESH_HELP' | translate"></h4>
           <label class="toggle toggle-royal">
diff --git a/www/templates/wallet/modal_security.html b/www/templates/wallet/modal_security.html
index b60e7ccb22f891a520ec33db9f044ed16d21f86d..5528359edaa6e199895daf3bb81d5a5ebe786171 100644
--- a/www/templates/wallet/modal_security.html
+++ b/www/templates/wallet/modal_security.html
@@ -42,7 +42,7 @@
                 <h2 translate>ACCOUNT.SECURITY.RECOVER_ID</h2>
                 <h4 class="gray" translate>ACCOUNT.SECURITY.RECOVER_ID_HELP</h4>
 
-                <ng-include src="::'templates/common/note_feature_not_available.html'"></ng-include>
+                <ng-include ng-if="::$root.config.demo" src="::'templates/common/note_feature_not_available.html'"></ng-include>
                 <i class="icon dark ion-ios-arrow-right" ng-if="::!$root.config.demo"></i>
               </div>
             </div>
@@ -66,7 +66,7 @@
                 <b class="ion-locked icon-secondary dark" style="top: 0px; left: 40px; font-size: 8px;"></b>
                 <h2 translate>ACCOUNT.SECURITY.SAVE_ID</h2>
                 <h4 class="gray" translate>ACCOUNT.SECURITY.SAVE_ID_HELP</h4>
-                <ng-include src="::'templates/common/note_feature_not_available.html'"></ng-include>
+                <ng-include ng-if="::$root.config.demo" src="::'templates/common/note_feature_not_available.html'"></ng-include>
                 <i class="icon dark ion-ios-arrow-right"></i>
               </div>
             </div>
@@ -79,7 +79,7 @@
                 <b class="ion-key icon-secondary dark" style="top: -8px; left: 42px; font-size: 12px;"></b>
                 <h2 translate>ACCOUNT.SECURITY.GENERATE_KEYFILE</h2>
                 <h4 class="gray" translate>ACCOUNT.SECURITY.GENERATE_KEYFILE_HELP</h4>
-                <ng-include src="::'templates/common/note_feature_not_available.html'"></ng-include>
+                <ng-include ng-if="::$root.config.demo" src="::'templates/common/note_feature_not_available.html'"></ng-include>
                 <i class="icon dark ion-ios-arrow-right"></i>
               </div>
             </div>
@@ -92,7 +92,7 @@
                 <b class="ion-close icon-secondary dark" style="top: 0px; left: 40px; font-size: 8px;"></b>
                 <h2 translate>ACCOUNT.SECURITY.DOWNLOAD_REVOKE</h2>
                 <h4 class="gray" translate>ACCOUNT.SECURITY.DOWNLOAD_REVOKE_HELP</h4>
-                <ng-include src="::'templates/common/note_feature_not_available.html'"></ng-include>
+                <ng-include ng-if="::$root.config.demo" src="::'templates/common/note_feature_not_available.html'"></ng-include>
                 <i class="icon dark ion-android-archive"></i>
               </div>
             </div>
@@ -104,7 +104,7 @@
                 <b class="ion-flag icon-secondary dark" style="top: -8px; left: 39px; font-size: 12px;"></b>
                 <h2 translate>ACCOUNT.SECURITY.SEND_IDENTITY</h2>
                 <h4 class="gray" ng-bind-html="::'ACCOUNT.SECURITY.SEND_IDENTITY_HELP' | translate"></h4>
-                <ng-include src="::'templates/common/note_feature_not_available.html'"></ng-include>
+                <ng-include ng-if="::$root.config.demo" src="::'templates/common/note_feature_not_available.html'"></ng-include>
               </div>
             </div>
 
@@ -115,7 +115,7 @@
                 <b class="ion-plus icon-secondary dark" style="top: -8px; left: 39px; font-size: 12px;"></b>
                 <h2 translate>ACCOUNT.SECURITY.MEMBERSHIP_IN</h2>
                 <h4 class="gray" ng-bind-html="::'ACCOUNT.SECURITY.MEMBERSHIP_IN_HELP' | translate"></h4>
-                <ng-include src="::'templates/common/note_feature_not_available.html'"></ng-include>
+                <ng-include ng-if="::$root.config.demo" src="::'templates/common/note_feature_not_available.html'"></ng-include>
               </div>
             </div>
 
@@ -126,7 +126,7 @@
                 <b class="ion-close icon-secondary assertive-900" style="top: -8px; left: 39px; font-size: 12px;"></b>
                 <h2 translate>ACCOUNT.SECURITY.REVOCATION_WALLET</h2>
                 <h4 class="gray" translate>ACCOUNT.SECURITY.REVOCATION_WALLET_HELP</h4>
-                <ng-include src="::'templates/common/note_feature_not_available.html'"></ng-include>
+                <ng-include ng-if="::$root.config.demo" src="::'templates/common/note_feature_not_available.html'"></ng-include>
               </div>
             </div>
           </div>
diff --git a/www/templates/wallet/slides/slides_generate_keyfile.html b/www/templates/wallet/slides/slides_generate_keyfile.html
index 3a2bfe6101041155cb146ac400532aa3bc3633e2..895a0439bc52c3541fb0001a051c73320fa08486 100644
--- a/www/templates/wallet/slides/slides_generate_keyfile.html
+++ b/www/templates/wallet/slides/slides_generate_keyfile.html
@@ -12,7 +12,7 @@
           <b class="ion-ios-redo icon-secondary dark" style="top: -8px; left: 42px; font-size: 12px;"></b>
           <h2 translate>ACCOUNT.SECURITY.KEYFILE.PUBSEC_FORMAT</h2>
           <h4 class="gray" translate>ACCOUNT.SECURITY.KEYFILE.PUBSEC_FORMAT_HELP</h4>
-          <h4 ng-if="::$root.config.demo" style="color: red !important;"><b class="ion-android-close"></b> <span translate>DEMO.FEATURE_NOT_AVAILABLE</span></h4>
+          <ng-include ng-if="::$root.config.demo" src="::'templates/common/note_feature_no
           <i class="icon dark ion-ios-arrow-right"></i>
         </div>
       </div>
@@ -24,7 +24,7 @@
           <b class="ion-ios-redo icon-secondary dark" style="top: -8px; left: 42px; font-size: 12px;"></b>
           <h2 translate>ACCOUNT.SECURITY.KEYFILE.WIF_FORMAT</h2>
           <h4 class="gray" translate>ACCOUNT.SECURITY.KEYFILE.WIF_FORMAT_HELP</h4>
-          <h4 ng-if="::$root.config.demo" style="color: red !important;"><b class="ion-android-close"></b> <span translate>DEMO.FEATURE_NOT_AVAILABLE</span></h4>
+          <ng-include ng-if="::$root.config.demo" src="::'templates/common/note_feature_no
           <i class="icon dark ion-ios-arrow-right"></i>
         </div>
       </div>
@@ -37,7 +37,7 @@
           <b class="ion-locked icon-secondary dark" style="top: 0px; left: 43px; font-size: 8px;"></b>
           <h2 translate>ACCOUNT.SECURITY.KEYFILE.EWIF_FORMAT</h2>
           <h4 class="gray" translate>ACCOUNT.SECURITY.KEYFILE.EWIF_FORMAT_HELP</h4>
-          <h4 ng-if="::$root.config.demo" style="color: red !important;"><b class="ion-android-close"></b> <span translate>DEMO.FEATURE_NOT_AVAILABLE</span></h4>
+          <ng-include ng-if="::$root.config.demo" src="::'templates/common/note_feature_no
           <i class="icon dark ion-ios-arrow-right"></i>
         </div>
       </div>
diff --git a/www/templates/wot/view_certifications.html b/www/templates/wot/view_certifications.html
index 91de2a53c0d191990c1f4dc47552b3870afa26ad..2981a7d4b7fc5279b370938ed61c5cf5c4783338 100644
--- a/www/templates/wot/view_certifications.html
+++ b/www/templates/wot/view_certifications.html
@@ -98,12 +98,12 @@
 
     <!-- fab button -->
   <div class="visible-xs visible-sm">
-    <button id="fab-certify" class="button button-fab button-fab-bottom-right button-energized-900 spin"
+    <button id="fab-certify" class="button button-fab button-fab-bottom-right button-energized-900 spin hidden-readonly"
             ng-if="canCertify && !alreadyCertified"
             ng-click="certify()">
       <i class="icon ion-ribbon-b"></i>
     </button>
-    <button id="fab-select-certify" class="button button-fab button-fab-bottom-right button-energized-900 spin"
+    <button id="fab-select-certify" class="button button-fab button-fab-bottom-right button-energized-900 spin hidden-readonly"
             ng-if="canSelectAndCertify"
             ng-click="selectAndCertify()">
       <i class="icon ion-plus"></i>
diff --git a/www/templates/wot/view_identity.html b/www/templates/wot/view_identity.html
index 419e693d9538a494c960f09ce5287cbfea7f3630..6c1b8328b19e3f9da305eb283e87cdb1fa802867 100644
--- a/www/templates/wot/view_identity.html
+++ b/www/templates/wot/view_identity.html
@@ -53,14 +53,14 @@
       <!-- Allow extension here -->
       <cs-extension-point name="buttons"></cs-extension-point>
 
-      <button class="button button-stable button-small-padding icon ion-ribbon-b ink"
+      <button class="button button-stable button-small-padding icon ion-ribbon-b ink hidden-readonly"
               ng-click="certify()"
               ng-if=":rebind:formData.hasSelf"
               title="{{'WOT.BTN_CERTIFY' | translate}}"
               ng-disabled="disableCertifyButton">
       </button>
 
-      <button class="button button-calm ink"
+      <button class="button button-calm ink hidden-readonly"
               ng-click="showTransferModal({pubkey:formData.pubkey, uid: formData.name||formData.uid})">
         {{'COMMON.BTN_SEND_MONEY' | translate}}
       </button>
@@ -69,9 +69,9 @@
     </div>
 
     <!-- fab buttons -->
-    <div class="visible-xs visible-sm">
+    <div class="visible-xs visible-sm ">
       <button id="fab-certify-{{:rebind:formData.uid}}"
-              class="button button-fab button-fab-top-left button-fab-hero button-calm spin"
+              class="button button-fab button-fab-top-left button-fab-hero button-calm spin hidden-readonly"
               ng-if=":rebind:(canCertify && !alreadyCertified)"
               ng-click="certify()">
         <i class="icon ion-ribbon-b"></i>
@@ -172,8 +172,8 @@
   </ion-content>
 
   <!-- fab button -->
-  <div class="visible-xs visible-sm" ng-hide="loading">
-    <button id="fab-transfer" class="button button-fab button-fab-bottom-right button-assertive drop"
+  <div class="visible-xs visible-sm " ng-hide="loading">
+    <button id="fab-transfer" class="button button-fab button-fab-bottom-right button-assertive drop hidden-readonly"
             ng-click="showTransferModal({pubkey:formData.pubkey, uid: formData.uid})">
       <i class="icon ion-android-send"></i>
     </button>