diff --git a/www/js/config.js b/www/js/config.js
index a97e17fc9c65e922af8ba342636cf19fce343279..68d35ef7fd45ddc7af469bd4d1b3f8ec34d67f05 100644
--- a/www/js/config.js
+++ b/www/js/config.js
@@ -59,7 +59,7 @@ angular.module("cesium.config", [])
 		}
 	},
 	"version": "0.13.1",
-	"build": "2017-07-07T21:41:26.068Z",
+	"build": "2017-07-07T22:33:40.659Z",
 	"newIssueUrl": "https://github.com/duniter/cesium/issues/new?labels=bug"
 })
 
diff --git a/www/js/controllers/join-controllers.js b/www/js/controllers/join-controllers.js
index 4c643f0f9382e5b9cfc072f094b875b09ca13e2a..0a936b90adda4db0ed863438540dbe3aca6ba1de 100644
--- a/www/js/controllers/join-controllers.js
+++ b/www/js/controllers/join-controllers.js
@@ -168,7 +168,7 @@ function JoinModalController($scope, $state, $interval, $timeout, UIUtils, Crypt
   $scope.showAccountPubkey = function() {
     $scope.formData.computing=true;
 
-    CryptoUtils.connect($scope.formData.username, $scope.formData.password)
+    CryptoUtils.scryptKeypair($scope.formData.username, $scope.formData.password)
       .then(function(keypair) {
         $scope.formData.pubkey = CryptoUtils.util.encode_base58(keypair.signPk);
         $scope.formData.computing=false;
@@ -318,56 +318,48 @@ function JoinModalController($scope, $state, $interval, $timeout, UIUtils, Crypt
 
     UIUtils.loading.show();
 
-    csWallet.login($scope.formData.username, $scope.formData.password)
-    .then(function() {
-      if ($scope.accountType === "member") {
-        $scope.closeModal();
-        csSettings.data.wallet = csSettings.data.wallet || {};
-        csSettings.data.wallet.alertIfUnusedWallet = false; // do not alert if empty
-        // Redirect to wallet
-        $state.go('app.view_wallet');
-
-        // Send self
-        csWallet.self($scope.formData.pseudo, false/*do NOT load membership here*/)
-          .then(function() {
-            // Send membership IN
-            csWallet.membership.inside()
-            .then(function() {
+    return csWallet.login({auth: true, expectedPubkey: $scope.formData.pubkey, isNew: true})
+      .then(function() {
+        if ($scope.accountType === "member") {
+          $scope.closeModal();
+          csSettings.data.wallet = csSettings.data.wallet || {};
+          csSettings.data.wallet.alertIfUnusedWallet = false; // do not alert if empty
 
-              $scope.closeModal();
-
-              // Redirect to wallet
-              $state.go('app.view_wallet')
+          // Send self
+          return csWallet.self($scope.formData.pseudo, false/*do NOT load membership here*/)
+            .then(function() {
+              // Send membership IN
+              csWallet.membership.inside()
               .then(function() {
-                $scope.downloadRevocationRegistration();
+
+                $scope.closeModal();
+
+                // Redirect to wallet
+                $state.go('app.view_wallet')
+                .then(function() {
+                  $scope.downloadRevocationRegistration();
+                });
+              })
+              .catch(function(err) {
+                if (err && err.ucode != BMA.errorCodes.MEMBERSHIP_ALREADY_SEND) return;
+                onErrorLogout('ERROR.SEND_MEMBERSHIP_IN_FAILED')(err);
               });
             })
-            .catch(function(err) {
-              //
-              if (err && err.ucode == BMA.errorCodes.MEMBERSHIP_ALREADY_SEND) {
-
-              }
-              onErrorLogout('ERROR.SEND_MEMBERSHIP_IN_FAILED')(err);
-            });
-          })
-          .catch(onErrorLogout('ERROR.SEND_IDENTITY_FAILED'));
-      }
-      else{
-
-        csWallet.data.isNew = true;
-
-        $scope.closeModal();
+            .catch(onErrorLogout('ERROR.SEND_IDENTITY_FAILED'));
+        }
+        else{
+          $scope.closeModal();
 
-        //Redirect to wallet
-        $state.go('app.view_wallet');
+          // Redirect to wallet
+          $state.go('app.view_wallet');
 
-      }
-    })
-    .catch(function(err) {
-      UIUtils.loading.hide();
-      console.error('>>>>>>>' , err);
-      UIUtils.alert.error('ERROR.CRYPTO_UNKNOWN_ERROR');
-    });
+        }
+      })
+      .catch(function(err) {
+        UIUtils.loading.hide();
+        console.error('>>>>>>>' , err);
+        UIUtils.alert.error('ERROR.CRYPTO_UNKNOWN_ERROR');
+      });
   };
 
   $scope.downloadRevocationRegistration = function() {
diff --git a/www/js/controllers/wallet-controllers.js b/www/js/controllers/wallet-controllers.js
index 16ed5044ed6e94790b7252ccc5452150b5860383..1c2643cecf00b541e953cbebf7a4322c365acf03 100644
--- a/www/js/controllers/wallet-controllers.js
+++ b/www/js/controllers/wallet-controllers.js
@@ -976,11 +976,10 @@ function WalletSecurityModalController($scope, UIUtils, csWallet, $translate, Cr
 
     var salt = $scope.formData.username;
     var pwd = $scope.formData.password;
-    CryptoUtils.connect(salt, pwd)
+    CryptoUtils.scryptKeypair(salt, pwd)
       .then(function (keypair) {
         $scope.pubkey = CryptoUtils.util.encode_base58(keypair.signPk);
     })
-
       .then(function () {
         if (!csWallet.isUserPubkey($scope.pubkey)) {
           UIUtils.alert.error('ERROR.SALT_OR_PASSWORD_NOT_CONFIRMED', 'ERROR.LOGIN_FAILED');
diff --git a/www/js/services/currency-services.js b/www/js/services/currency-services.js
index 283c799627e07e8992a7e9970e45f4a96d674c83..24d08c5225487d9adb8c24600b7e63e59af837df 100644
--- a/www/js/services/currency-services.js
+++ b/www/js/services/currency-services.js
@@ -122,9 +122,7 @@ angular.module('cesium.currency.services', ['ngApi', 'cesium.bma.services'])
         });
     }
 
-    function getData(options) {
-      options = options || {};
-      //options.current = angular.isDefined(options.current) ? options.current : false;
+    function getData() {
 
       if (started) { // load only once
         return $q.when(data);
diff --git a/www/js/services/wallet-services.js b/www/js/services/wallet-services.js
index 99e2f4fc3a6296b8a7d6fa8742cca654ac727830..109219b0d6f76697da4723dc216bc3418246a03f 100644
--- a/www/js/services/wallet-services.js
+++ b/www/js/services/wallet-services.js
@@ -125,6 +125,7 @@ angular.module('cesium.wallet.services', ['ngApi', 'ngFileSaver', 'cesium.bma.se
 
           authData = res;
           data.pubkey = res.pubkey;
+          data.isNew = angular.isDefined(options.isNew) ? options.isNew : data.isNew;
           if (csSettings.data.keepAuthIdle) {
             data.keypair = res.keypair || {
                 signSk: null,
@@ -506,7 +507,8 @@ angular.module('cesium.wallet.services', ['ngApi', 'ngFileSaver', 'cesium.bma.se
 
     // Must be call after loadCurrency() and loadRequirements()
     finishLoadRequirements = function(currency) {
-      data.requirements.needCertificationCount = (!data.requirements.needMembership && (data.requirements.certificationCount < currency.parameters.sigQty)) ?
+      currency = currency || csCurrency.data;
+      data.requirements.needCertificationCount = (!data.requirements.needMembership && (data.requirements.certificationCount < csCurrency.parameters.sigQty)) ?
           (currency.parameters.sigQty - data.requirements.certificationCount) : 0;
       data.requirements.willNeedCertificationCount = (!data.requirements.needMembership &&
           data.requirements.needCertificationCount === 0 && (data.requirements.certificationCount - data.requirements.willExpireCertificationCount) < currency.parameters.sigQty) ?
@@ -1234,7 +1236,7 @@ angular.module('cesium.wallet.services', ['ngApi', 'ngFileSaver', 'cesium.bma.se
         var nbCharSalt = Math.round(record.answer.length / 2);
         var salt = record.answer.substr(0, nbCharSalt);
         var pwd = record.answer.substr(nbCharSalt);
-        return CryptoUtils.connect(salt, pwd)
+        return CryptoUtils.scryptKeypair(salt, pwd)
           .then(function (keypair) {
             record.pubkey = CryptoUtils.util.encode_base58(keypair.signPk);
             record.keypair = keypair;