diff --git a/lib/providers/my_wallets.dart b/lib/providers/my_wallets.dart
index 367f80f3929444708a5a20b3cd1bdad4f8c72658..98a9381093e51a1481c93bd345952f7d5a4cdd84 100644
--- a/lib/providers/my_wallets.dart
+++ b/lib/providers/my_wallets.dart
@@ -6,6 +6,7 @@ import 'dart:async';
 import 'package:gecko/globals.dart';
 import 'package:gecko/models/wallet_data.dart';
 import 'package:gecko/providers/substrate_sdk.dart';
+import 'package:gecko/screens/myWallets/unlocking_wallet.dart';
 import 'package:gecko/widgets/commons/common_elements.dart';
 import 'package:path_provider/path_provider.dart';
 import 'package:provider/provider.dart';
@@ -76,6 +77,20 @@ class MyWalletsProvider with ChangeNotifier {
     return targetedWallet;
   }
 
+  Future<bool> askPinCode() async {
+    final defaultWallet = getDefaultWallet();
+
+    if (pinCode.isEmpty) {
+      await Navigator.push(
+        homeContext,
+        MaterialPageRoute(
+          builder: (homeContext) => UnlockingWallet(wallet: defaultWallet),
+        ),
+      );
+    }
+    return pinCode.isNotEmpty;
+  }
+
   WalletData? getWalletDataByAddress(String address) {
     WalletData? targetedWallet;
 
diff --git a/lib/providers/substrate_sdk.dart b/lib/providers/substrate_sdk.dart
index 54f2c5eab5d1fbb59e38d150163683103a0a04db..520c54ec2d94457807d8e772079835b73b54977f 100644
--- a/lib/providers/substrate_sdk.dart
+++ b/lib/providers/substrate_sdk.dart
@@ -183,12 +183,12 @@ class SubstrateSdk with ChangeNotifier {
   }
 
   Future<String> signDatapod(String document, String address) async {
-    final myWallets =
+    final myWalletProvider =
         Provider.of<MyWalletsProvider>(homeContext, listen: false);
     final messageToSign = Uint8List.fromList(document.codeUnits);
 
     final signatureString =
-        await _signMessage(messageToSign, address, myWallets.pinCode);
+        await _signMessage(messageToSign, address, myWalletProvider.pinCode);
     final signatureInt = HEX.decode(signatureString.substring(2));
     final signature64 = base64Encode(signatureInt);
 
diff --git a/lib/providers/v2s_datapod.dart b/lib/providers/v2s_datapod.dart
index e2e3829982a6de292068b0f8bfbc027497ff4b3a..21a844394306d1eabac9516d725dbc9c27218349 100644
--- a/lib/providers/v2s_datapod.dart
+++ b/lib/providers/v2s_datapod.dart
@@ -5,6 +5,7 @@ import 'package:flutter/material.dart';
 import 'package:gecko/globals.dart';
 import 'package:gecko/models/queries_datapod.dart';
 import 'package:gecko/models/scale_functions.dart';
+import 'package:gecko/providers/my_wallets.dart';
 import 'package:gecko/providers/substrate_sdk.dart';
 import 'package:graphql_flutter/graphql_flutter.dart';
 import 'package:provider/provider.dart';
@@ -15,9 +16,13 @@ class V2sDatapodProvider with ChangeNotifier {
 
   Future<Map<String, dynamic>> _setSignedVariables(
       String address, Map<String, dynamic> messageToSign) async {
+    final myWalletProvider =
+        Provider.of<MyWalletsProvider>(homeContext, listen: false);
+
     final sub = Provider.of<SubstrateSdk>(homeContext, listen: false);
     final hashDocBytes = utf8.encode(jsonEncode(messageToSign));
     final hashDoc = sha256.convert(hashDocBytes).toString().toUpperCase();
+    if (!await myWalletProvider.askPinCode()) return {};
     final signature = await sub.signDatapod(hashDoc, address);
 
     return <String, dynamic>{
@@ -53,6 +58,7 @@ class V2sDatapodProvider with ChangeNotifier {
       'socials': socials
     };
     final variables = await _setSignedVariables(address, messageToSign);
+    if (variables.isEmpty) return false;
 
     final result = await _execQuery(updateProfileQ, variables);
     if (result.hasException) {
@@ -66,6 +72,7 @@ class V2sDatapodProvider with ChangeNotifier {
   Future<bool> deleteProfile({required String address}) async {
     final messageToSign = {'address': address};
     final variables = await _setSignedVariables(address, messageToSign);
+    if (variables.isEmpty) return false;
 
     final result = await _execQuery(deleteProfileQ, variables);
     if (result.hasException) {
@@ -80,6 +87,7 @@ class V2sDatapodProvider with ChangeNotifier {
       {required String addressOld, required String addressNew}) async {
     final messageToSign = {'addressOld': addressOld, 'addressNew': addressNew};
     final variables = await _setSignedVariables(addressOld, messageToSign);
+    if (variables.isEmpty) return false;
 
     final result = await _execQuery(migrateProfileQ, variables);
     if (result.hasException) {
@@ -101,6 +109,7 @@ class V2sDatapodProvider with ChangeNotifier {
       'comment': comment,
     };
     final variables = await _setSignedVariables(issuer, messageToSign);
+    if (variables.isEmpty) return false;
 
     final result = await _execQuery(addTransactionCommentQ, variables);
     if (result.hasException) {
diff --git a/lib/providers/wallet_options.dart b/lib/providers/wallet_options.dart
index ebb1fd22a30501d78f3f4a3a7cacf19adc1cb0bc..adf8b11e1afedf9f409e7348bfffb787a7bfb8d3 100644
--- a/lib/providers/wallet_options.dart
+++ b/lib/providers/wallet_options.dart
@@ -13,7 +13,6 @@ import 'package:gecko/models/wallet_data.dart';
 import 'package:gecko/providers/substrate_sdk.dart';
 import 'package:gecko/providers/v2s_datapod.dart';
 import 'package:gecko/widgets/commons/common_elements.dart';
-import 'package:gecko/screens/myWallets/unlocking_wallet.dart';
 import 'package:gecko/screens/transaction_in_progress.dart';
 import 'package:image_picker/image_picker.dart';
 import 'package:provider/provider.dart';
@@ -224,21 +223,7 @@ class WalletOptionsProvider with ChangeNotifier {
                               return;
                             }
 
-                            WalletData? defaultWallet =
-                                myWalletProvider.getDefaultWallet();
-
-                            if (myWalletProvider.pinCode == '') {
-                              await Navigator.push(
-                                context,
-                                MaterialPageRoute(
-                                  builder: (homeContext) {
-                                    return UnlockingWallet(
-                                        wallet: defaultWallet);
-                                  },
-                                ),
-                              );
-                            }
-                            if (myWalletProvider.pinCode == '') return;
+                            if (!await myWalletProvider.askPinCode()) return;
 
                             final wallet = myWalletProvider
                                 .getWalletDataByAddress(address.text);
diff --git a/lib/screens/myWallets/change_pin.dart b/lib/screens/myWallets/change_pin.dart
index 349f5a5e6850a8de84f6627047c4a7e01610b31c..f44d243008401ce16944c6e46873fa3d475576ef 100644
--- a/lib/screens/myWallets/change_pin.dart
+++ b/lib/screens/myWallets/change_pin.dart
@@ -4,10 +4,8 @@ import 'package:easy_localization/easy_localization.dart';
 import 'package:flutter/material.dart';
 import 'package:durt/durt.dart';
 import 'package:gecko/globals.dart';
-import 'package:gecko/models/wallet_data.dart';
 import 'package:gecko/providers/my_wallets.dart';
 import 'package:gecko/providers/substrate_sdk.dart';
-import 'package:gecko/screens/myWallets/unlocking_wallet.dart';
 import 'package:gecko/widgets/commons/top_appbar.dart';
 import 'package:provider/provider.dart';
 
@@ -92,20 +90,9 @@ class _ChangePinScreenState extends State<ChangePinScreen> {
                     backgroundColor: Colors.green[400],
                   ),
                   onPressed: () async {
-                    WalletData defaultWallet =
-                        myWalletProvider.getDefaultWallet();
+                    final defaultWallet = myWalletProvider.getDefaultWallet();
 
-                    if (myWalletProvider.pinCode == '') {
-                      await Navigator.push(
-                        context,
-                        MaterialPageRoute(
-                          builder: (homeContext) {
-                            return UnlockingWallet(wallet: defaultWallet);
-                          },
-                        ),
-                      );
-                    }
-                    if (myWalletProvider.pinCode == '') return;
+                    if (!await myWalletProvider.askPinCode()) return;
 
                     await sub.changePassword(context, defaultWallet.address,
                         widget.walletProvider.pinCode, newPin.text);
diff --git a/lib/screens/myWallets/chest_options.dart b/lib/screens/myWallets/chest_options.dart
index 4a8f58170da3ab56b890d58350448df67eace044..73055537af8a255bb2d4fc23c46e20a61c8110f1 100644
--- a/lib/screens/myWallets/chest_options.dart
+++ b/lib/screens/myWallets/chest_options.dart
@@ -5,14 +5,12 @@ import 'package:flutter/material.dart';
 import 'package:gecko/globals.dart';
 import 'package:gecko/models/chest_data.dart';
 import 'package:gecko/models/scale_functions.dart';
-import 'package:gecko/models/wallet_data.dart';
 import 'package:gecko/models/widgets_keys.dart';
 import 'package:gecko/providers/chest_provider.dart';
 import 'package:gecko/providers/my_wallets.dart';
 import 'package:gecko/providers/substrate_sdk.dart';
 import 'package:gecko/screens/myWallets/custom_derivations.dart';
 import 'package:gecko/screens/myWallets/show_seed.dart';
-import 'package:gecko/screens/myWallets/unlocking_wallet.dart';
 import 'package:gecko/widgets/bottom_app_bar.dart';
 import 'package:gecko/widgets/commons/offline_info.dart';
 import 'package:gecko/widgets/commons/top_appbar.dart';
@@ -44,18 +42,8 @@ class ChestOptions extends StatelessWidget {
                 onTap: () async {
                   final myWalletProvider =
                       Provider.of<MyWalletsProvider>(context, listen: false);
-                  WalletData? defaultWallet =
-                      myWalletProvider.getDefaultWallet();
-                  final String? pin = await Navigator.push(
-                    context,
-                    MaterialPageRoute(
-                      builder: (homeContext) {
-                        return UnlockingWallet(wallet: defaultWallet);
-                      },
-                    ),
-                  );
+                  if (!await myWalletProvider.askPinCode()) return;
 
-                  if (pin == null) return;
                   Navigator.push(
                     context,
                     MaterialPageRoute(builder: (context) {
diff --git a/lib/screens/myWallets/choose_chest.dart b/lib/screens/myWallets/choose_chest.dart
index 0285e1226971f3fbcb3ae220e29bdb17247fce83..264817bbb71664e39471ee79cf5ff295ddae97c4 100644
--- a/lib/screens/myWallets/choose_chest.dart
+++ b/lib/screens/myWallets/choose_chest.dart
@@ -5,10 +5,8 @@ import 'package:gecko/globals.dart';
 import 'package:gecko/models/scale_functions.dart';
 import 'package:gecko/models/widgets_keys.dart';
 import 'package:gecko/providers/my_wallets.dart';
-import 'package:gecko/models/wallet_data.dart';
 import 'package:flutter/material.dart';
 import 'package:gecko/screens/myWallets/restore_chest.dart';
-import 'package:gecko/screens/myWallets/unlocking_wallet.dart';
 import 'package:carousel_slider/carousel_slider.dart';
 import 'package:gecko/screens/onBoarding/5.dart';
 import 'package:provider/provider.dart';
@@ -110,25 +108,13 @@ class _ChooseChestState extends State<ChooseChest> {
                 onPressed: () async {
                   await configBox.put('currentChest', currentChest);
                   myWalletProvider.pinCode = '';
-                  WalletData? defaultWallet =
-                      myWalletProvider.getDefaultWallet();
-                  myWalletProvider.reload();
+                  if (!await myWalletProvider.askPinCode()) return;
 
-                  await Navigator.push(
-                    context,
-                    MaterialPageRoute(
-                      builder: (homeContext) {
-                        return UnlockingWallet(wallet: defaultWallet);
-                      },
-                    ),
-                  );
                   Navigator.popUntil(
                     context,
                     ModalRoute.withName('/'),
                   );
-                  if (myWalletProvider.pinCode != '') {
-                    Navigator.pushNamed(context, '/mywallets');
-                  }
+                  Navigator.pushNamed(context, '/mywallets');
                 },
                 child: Text(
                   'openThisChest'.tr(),
diff --git a/lib/screens/myWallets/custom_derivations.dart b/lib/screens/myWallets/custom_derivations.dart
index 76e288567c5b6867f12f392897e487155dc2aac6..a6ec14f0a8249757d7ad998b2993728e7e1f3ea6 100644
--- a/lib/screens/myWallets/custom_derivations.dart
+++ b/lib/screens/myWallets/custom_derivations.dart
@@ -6,7 +6,6 @@ import 'package:flutter/material.dart';
 import 'package:gecko/models/scale_functions.dart';
 import 'package:gecko/models/wallet_data.dart';
 import 'package:gecko/providers/my_wallets.dart';
-import 'package:gecko/screens/myWallets/unlocking_wallet.dart';
 import 'package:gecko/widgets/commons/top_appbar.dart';
 import 'package:provider/provider.dart';
 
@@ -109,20 +108,7 @@ class _CustomDerivationState extends State<CustomDerivation> {
                   backgroundColor: orangeC,
                 ),
                 onPressed: () async {
-                  WalletData? defaultWallet =
-                      myWalletProvider.getDefaultWallet();
-                  if (myWalletProvider.pinCode == '') {
-                    await Navigator.push(
-                      context,
-                      MaterialPageRoute(
-                        builder: (homeContext) {
-                          return UnlockingWallet(wallet: defaultWallet);
-                        },
-                      ),
-                    );
-                  }
-
-                  if (myWalletProvider.pinCode == '') return;
+                  if (!await myWalletProvider.askPinCode()) return;
                   String newDerivationName =
                       '${'wallet'.tr()} ${myWalletProvider.listWallets.last.number! + 2}';
                   if (dropdownValue == 'root') {
diff --git a/lib/screens/myWallets/manage_membership.dart b/lib/screens/myWallets/manage_membership.dart
index 03f3c36cee37d871e1134b92891bf2e7698e3f4b..33e85c1a29354b439af4a82f931fcfd04228ff0c 100644
--- a/lib/screens/myWallets/manage_membership.dart
+++ b/lib/screens/myWallets/manage_membership.dart
@@ -4,13 +4,11 @@ import 'package:easy_localization/easy_localization.dart';
 import 'package:gecko/globals.dart';
 import 'package:flutter/material.dart';
 import 'package:gecko/models/scale_functions.dart';
-import 'package:gecko/models/wallet_data.dart';
 import 'package:gecko/models/widgets_keys.dart';
 import 'package:gecko/providers/my_wallets.dart';
 import 'package:gecko/providers/substrate_sdk.dart';
 import 'package:gecko/widgets/commons/common_elements.dart';
 import 'package:gecko/screens/myWallets/migrate_identity.dart';
-import 'package:gecko/screens/myWallets/unlocking_wallet.dart';
 import 'package:gecko/screens/transaction_in_progress.dart';
 import 'package:gecko/widgets/commons/top_appbar.dart';
 import 'package:provider/provider.dart';
@@ -113,20 +111,7 @@ class ManageMembership extends StatelessWidget {
             Provider.of<MyWalletsProvider>(context, listen: false);
         final sub = Provider.of<SubstrateSdk>(context, listen: false);
 
-        WalletData? defaultWallet = myWalletProvider.getDefaultWallet();
-        String? pin;
-        if (myWalletProvider.pinCode == '') {
-          pin = await Navigator.push(
-            context,
-            MaterialPageRoute(
-              builder: (homeContext) {
-                return UnlockingWallet(wallet: defaultWallet);
-              },
-            ),
-          );
-        }
-
-        if (pin == null || myWalletProvider.pinCode == '') return;
+        if (!await myWalletProvider.askPinCode()) return;
 
         final transactionId =
             await sub.revokeIdentity(address, myWalletProvider.pinCode);
diff --git a/lib/screens/myWallets/migrate_identity.dart b/lib/screens/myWallets/migrate_identity.dart
index dc44cc3e39b1798079aa8c139bbb7bd51c0ed8e5..8e778325d9f62cf2b459090c73ec51d98f3b8645 100644
--- a/lib/screens/myWallets/migrate_identity.dart
+++ b/lib/screens/myWallets/migrate_identity.dart
@@ -6,7 +6,6 @@ import 'package:gecko/globals.dart';
 import 'package:flutter/material.dart';
 import 'package:gecko/models/migrate_wallet_checks.dart';
 import 'package:gecko/models/scale_functions.dart';
-import 'package:gecko/models/wallet_data.dart';
 import 'package:gecko/models/widgets_keys.dart';
 import 'package:gecko/providers/duniter_indexer.dart';
 import 'package:gecko/providers/generate_wallets.dart';
@@ -14,7 +13,6 @@ import 'package:gecko/providers/my_wallets.dart';
 import 'package:gecko/providers/substrate_sdk.dart';
 import 'package:gecko/providers/wallet_options.dart';
 import 'package:gecko/providers/wallets_profiles.dart';
-import 'package:gecko/screens/myWallets/unlocking_wallet.dart';
 import 'package:gecko/screens/transaction_in_progress.dart';
 import 'package:gecko/widgets/commons/top_appbar.dart';
 import 'package:polkawallet_sdk/api/apiKeyring.dart';
@@ -189,21 +187,7 @@ class MigrateIdentityScreen extends StatelessWidget {
                 ),
                 onPressed: statusData.canValidate && mnemonicIsValid
                     ? () async {
-                        WalletData? defaultWallet =
-                            myWalletProvider.getDefaultWallet();
-
-                        String? pin;
-                        if (myWalletProvider.pinCode == '') {
-                          pin = await Navigator.push(
-                            context,
-                            MaterialPageRoute(
-                              builder: (homeContext) {
-                                return UnlockingWallet(wallet: defaultWallet);
-                              },
-                            ),
-                          );
-                        }
-                        if (myWalletProvider.pinCode == '') return;
+                        if (!await myWalletProvider.askPinCode()) return;
 
                         await sub.importAccount(
                             mnemonic: newMnemonicSentence.text,
@@ -215,7 +199,7 @@ class MigrateIdentityScreen extends StatelessWidget {
                         final transactionId = await sub.migrateIdentity(
                             fromAddress: fromAddress,
                             destAddress: newWalletAddress.text,
-                            fromPassword: pin ?? myWalletProvider.pinCode,
+                            fromPassword: myWalletProvider.pinCode,
                             destPassword: 'password',
                             withBalance: true,
                             fromBalance: statusData.balance);
diff --git a/lib/widgets/bottom_app_bar.dart b/lib/widgets/bottom_app_bar.dart
index 7f8af2349870d704c18ddadc5ba7520aa8e3a79a..c7bc459a728f892e8f4709a06296071f445f4cf1 100644
--- a/lib/widgets/bottom_app_bar.dart
+++ b/lib/widgets/bottom_app_bar.dart
@@ -4,12 +4,10 @@ import 'dart:io';
 import 'package:flutter/material.dart';
 import 'package:gecko/globals.dart';
 import 'package:gecko/models/scale_functions.dart';
-import 'package:gecko/models/wallet_data.dart';
 import 'package:gecko/models/widgets_keys.dart';
 import 'package:gecko/providers/my_wallets.dart';
 import 'package:gecko/providers/search.dart';
 import 'package:gecko/providers/wallets_profiles.dart';
-import 'package:gecko/screens/myWallets/unlocking_wallet.dart';
 import 'package:provider/provider.dart';
 
 class GeckoBottomAppBar extends StatelessWidget {
@@ -93,20 +91,8 @@ class GeckoBottomAppBar extends StatelessWidget {
                   onPressed: lockAction
                       ? null
                       : () async {
-                          WalletData? defaultWallet =
-                              myWalletProvider.getDefaultWallet();
-                          if (myWalletProvider.pinCode == '') {
-                            await Navigator.push(
-                              context,
-                              MaterialPageRoute(
-                                builder: (homeContext) {
-                                  return UnlockingWallet(wallet: defaultWallet);
-                                },
-                              ),
-                            );
-                          }
+                          if (!await myWalletProvider.askPinCode()) return;
 
-                          if (myWalletProvider.pinCode == '') return;
                           Navigator.popUntil(context, ModalRoute.withName('/'));
                           //FIXME: Should not have to wait 300 milliseconds when /mywallets exist in navigator...
                           sleep(const Duration(milliseconds: 300));
diff --git a/lib/widgets/buttons/add_new_derivation_button.dart b/lib/widgets/buttons/add_new_derivation_button.dart
index b2c5f3e0c24654f4ca75f3cc15da8727a69e9617..7ddb37474a9da9f3818dfcae14350c59785a9f61 100644
--- a/lib/widgets/buttons/add_new_derivation_button.dart
+++ b/lib/widgets/buttons/add_new_derivation_button.dart
@@ -4,10 +4,8 @@ import 'package:easy_localization/easy_localization.dart';
 import 'package:flutter/material.dart';
 import 'package:gecko/globals.dart';
 import 'package:gecko/models/scale_functions.dart';
-import 'package:gecko/models/wallet_data.dart';
 import 'package:gecko/models/widgets_keys.dart';
 import 'package:gecko/providers/my_wallets.dart';
-import 'package:gecko/screens/myWallets/unlocking_wallet.dart';
 import 'package:provider/provider.dart';
 
 class AddNewDerivationButton extends StatelessWidget {
@@ -31,19 +29,8 @@ class AddNewDerivationButton extends StatelessWidget {
                 key: keyAddDerivation,
                 onTap: () async {
                   if (!myWalletProvider.isNewDerivationLoading) {
-                    WalletData? defaultWallet =
-                        myWalletProvider.getDefaultWallet();
-                    if (myWalletProvider.pinCode == '') {
-                      await Navigator.push(
-                        context,
-                        MaterialPageRoute(
-                          builder: (homeContext) {
-                            return UnlockingWallet(wallet: defaultWallet);
-                          },
-                        ),
-                      );
-                    }
-                    if (myWalletProvider.pinCode == '') return;
+                    if (!await myWalletProvider.askPinCode()) return;
+
                     await myWalletProvider.generateNewDerivation(
                         context, newDerivationName);
                   }
diff --git a/lib/widgets/payment_popup.dart b/lib/widgets/payment_popup.dart
index 268d8a91591fc0feaa56c2c79897e8d64b2331c3..2037b242ceaafe70e982056502015384a899a62a 100644
--- a/lib/widgets/payment_popup.dart
+++ b/lib/widgets/payment_popup.dart
@@ -12,7 +12,6 @@ import 'package:gecko/providers/substrate_sdk.dart';
 import 'package:gecko/providers/wallet_options.dart';
 import 'package:gecko/providers/wallets_profiles.dart';
 import 'package:gecko/screens/activity.dart';
-import 'package:gecko/screens/myWallets/unlocking_wallet.dart';
 import 'package:gecko/screens/transaction_in_progress.dart';
 import 'package:gecko/widgets/balance.dart';
 import 'package:gecko/widgets/name_by_address.dart';
@@ -34,17 +33,8 @@ void paymentPopup(BuildContext context, String toAddress, String? username) {
   walletViewProvider.payAmount.text = '';
 
   Future executeTransfert() async {
-    if (myWalletProvider.pinCode == '') {
-      await Navigator.push(
-        context,
-        MaterialPageRoute(
-          builder: (homeContext) {
-            return UnlockingWallet(wallet: defaultWallet);
-          },
-        ),
-      );
-    }
-    if (myWalletProvider.pinCode == '') return;
+    if (!await myWalletProvider.askPinCode()) return;
+
     // Payment workflow !
     final sub = Provider.of<SubstrateSdk>(context, listen: false);
     final acc = sub.getCurrentWallet();