diff --git a/integration_test/app_test.dart b/integration_test/app_test.dart
index b0257be44a6708c778f90bfb7ada3cf9dc62e3c9..a30b1e0a42ffbc9c5efdcbf067468f2f185c754d 100644
--- a/integration_test/app_test.dart
+++ b/integration_test/app_test.dart
@@ -1,10 +1,9 @@
+import 'package:flutter/material.dart';
 import 'package:flutter/services.dart';
 import 'package:flutter_test/flutter_test.dart';
 import 'package:gecko/models/widgets_keys.dart';
 import 'package:integration_test/integration_test.dart';
-
 import 'package:gecko/main.dart' as app;
-
 import 'tests_utility.dart';
 
 void main() {
@@ -15,22 +14,27 @@ void main() {
       app.main();
       await tester.pumpAndSettle(const Duration(seconds: 1));
 
-      // await deleteAllWallets(tester);
+      // Delete all existing chests
+      await deleteAllWallets(tester);
+
+      // Restore a chest
       await restoreChest(tester);
-    });
-    testWidgets('Send 10 ĞD to ChristCosmic', (tester) async {
-      // await goKey(tester, buttonKey);
+
+      // Execute a transaction to ChristCosmic
+      await payChrist(tester);
     });
   });
 }
 
 // Customs actions
 Future deleteAllWallets(WidgetTester tester) async {
-  await goKey(tester, keyDrawerMenu);
-  await goKey(tester, keyParameters);
-  await goKey(tester, keyDeleteAllWallets);
-  await goKey(tester, keyConfirm);
-  await tester.pumpAndSettle();
+  if (await isPresent(tester, 'Rechercher')) {
+    await goKey(tester, keyDrawerMenu);
+    await goKey(tester, keyParameters);
+    await goKey(tester, keyDeleteAllWallets);
+    await goKey(tester, keyConfirm);
+    await tester.pumpAndSettle();
+  }
 }
 
 Future restoreChest(WidgetTester tester) async {
@@ -45,7 +49,8 @@ Future restoreChest(WidgetTester tester) async {
   await goKey(tester, keyGoNext);
   await goKey(tester, keyGoNext);
   await goKey(tester, keyGoNext);
-  await goKey(tester, keyCachePassword);
+  final isCached = await isIconPresent(tester, Icons.check_box);
+  if (!isCached) await goKey(tester, keyCachePassword);
   await enterText(tester, keyPinForm, 'AAAAA');
   await waitFor(tester, 'Accéder à mon coffre');
   await goKey(tester, keyGoWalletsHome);
@@ -53,3 +58,21 @@ Future restoreChest(WidgetTester tester) async {
   await goBack(tester);
   await waitFor(tester, "y'a pas de lézard");
 }
+
+Future payChrist(WidgetTester tester) async {
+  await waitFor(tester, 'Rechercher');
+  await goKey(tester, keyOpenSearch);
+  await enterText(tester, keySearchField, 'ChristCosmic');
+  await goKey(tester, keyConfirmSearch);
+  await waitFor(tester, 'XuiQeB');
+  await goKey(tester,
+      keyIndexerResult('5CJKhFCpdSpumgWjSZ3TQmejJuHV6iELJrtdrfs38SXuiQeB'));
+  await waitFor(tester, 'XuiQeB');
+  await waitFor(tester, 'ĞD');
+  await goKey(tester, keyPay);
+  await enterText(tester, keyAmountField, '2.14');
+  await goKey(tester, keyConfirmPayment);
+  await waitFor(tester, 'validé !', timeout: const Duration(seconds: 12));
+  await goKey(tester, keyCloseTransactionScreen);
+  await waitFor(tester, 'XuiQeB');
+}
diff --git a/integration_test/tests_utility.dart b/integration_test/tests_utility.dart
index 30bd14dcc8d0cbbfde1b1895c5a8836933ce0f49..cc5c58219f8d58bed3fac4f1830c8b926dcfc5b7 100644
--- a/integration_test/tests_utility.dart
+++ b/integration_test/tests_utility.dart
@@ -46,6 +46,26 @@ Future<void> waitFor(
   } while (finder.evaluate().isEmpty);
 }
 
+// Test if text is visible on screen, return a boolean
+Future<bool> isPresent(WidgetTester tester, String text,
+    {Duration timeout = const Duration(seconds: 1)}) async {
+  try {
+    await waitFor(tester, text, timeout: timeout);
+    return true;
+  } catch (exception) {
+    return false;
+  }
+}
+
+// Test if widget exist on screen, return a boolean
+Future<bool> isIconPresent(WidgetTester tester, IconData icon,
+    {Duration timeout = const Duration(seconds: 1)}) async {
+  await tester.pumpAndSettle();
+  final finder = find.byIcon(icon);
+  log.d('tatatatatatata: ${finder.evaluate()}');
+  return finder.evaluate().isEmpty ? false : true;
+}
+
 extension Truncate on String {
   String truncate({required int max, String suffix = ''}) {
     return length < max
diff --git a/lib/models/widgets_keys.dart b/lib/models/widgets_keys.dart
index e83e29d5f5e51be8293f1480601a76c957a2da5d..31a0db149495faf24d7f2d22f6ab6eeae5769b8e 100644
--- a/lib/models/widgets_keys.dart
+++ b/lib/models/widgets_keys.dart
@@ -10,7 +10,8 @@ const keyConfirm = Key('keyConfirm');
 const keyParameters = Key('keyParameters');
 const keyContacts = Key('keyContacts');
 const keyDrawerMenu = Key('keyDrawerMenu');
-const keyManageWallets = Key('keyManageWallets');
+const keyOpenWalletsHomme = Key('keyOpenWalletsHomme');
+const keyOpenSearch = Key('keyOpenSearch');
 const keyRestoreChest = Key('keyRestoreChest');
 
 // Wallets home
@@ -46,6 +47,9 @@ const keyImportChest = Key('keyImportChest');
 const keyViewActivity = Key('keyViewActivity');
 const keyCertify = Key('keyCertify');
 const keyPay = Key('keyPay');
+const keyAmountField = Key('keyAmountField');
+const keyConfirmPayment = Key('keyConfirmPayment');
+const keyCloseTransactionScreen = Key('keyCloseTransactionScreen');
 
 // Activity view
 const keyListTransactions = Key('keyListTransactions');
@@ -67,8 +71,12 @@ const keyInputWord = Key('keyInputWord');
 const keyGeneratedPin = Key('keyGeneratedPin');
 const keyGoWalletsHome = Key('keyGoWalletsHome');
 
+// Search
+const keySearchField = Key('keySearchField');
+const keyConfirmSearch = Key('keyConfirmSearch');
+
 // Unit keys
 Key keyMnemonicWord(String word) => Key('keyMnemonicWord$word');
-Key keyIndexerResult(int keyId) => Key('keyIndexerResult$keyId');
+Key keyIndexerResult(String keyId) => Key('keyIndexerResult$keyId');
 Key keyTransaction(int keyId) => Key('keyTransaction$keyId');
-Key keySearchResult(int keyId) => Key('keySearchResult$keyId');
+Key keySearchResult(String keyId) => Key('keySearchResult$keyId');
diff --git a/lib/providers/duniter_indexer.dart b/lib/providers/duniter_indexer.dart
index a4570fbe896bf3aaef0dc0f3608dbf1d7ebe96be..e0417b7793460d7141e226ea68068dd6d17773d1 100644
--- a/lib/providers/duniter_indexer.dart
+++ b/lib/providers/duniter_indexer.dart
@@ -294,7 +294,6 @@ class DuniterIndexer with ChangeNotifier {
               return Text('noResult'.tr());
             }
 
-            int keyID = 0;
             double avatarSize = 55;
             return Expanded(
               child: ListView(children: <Widget>[
@@ -302,7 +301,7 @@ class DuniterIndexer with ChangeNotifier {
                   Padding(
                     padding: const EdgeInsets.symmetric(horizontal: 5),
                     child: ListTile(
-                        key: keyIndexerResult(keyID++),
+                        key: keyIndexerResult(profile['id']),
                         horizontalTitleGap: 40,
                         contentPadding: const EdgeInsets.all(5),
                         leading: cesiumPlusProvider.defaultAvatar(avatarSize),
diff --git a/lib/screens/home.dart b/lib/screens/home.dart
index ddff84c796b32ec2446a7035df69ebe8cf202815..071289a74ead221cd1aaf96caa31a037c50883a7 100644
--- a/lib/screens/home.dart
+++ b/lib/screens/home.dart
@@ -282,6 +282,7 @@ Widget geckHome(context) {
                     child: Material(
                       color: orangeC, // button color
                       child: InkWell(
+                          key: keyOpenSearch,
                           child: Padding(
                             padding: const EdgeInsets.all(18),
                             child: Image(
@@ -324,7 +325,7 @@ Widget geckHome(context) {
                     ],
                   ),
                   child: ClipOval(
-                    key: keyManageWallets,
+                    key: keyOpenWalletsHomme,
                     child: Material(
                       color: orangeC, // button color
                       child: InkWell(
diff --git a/lib/screens/my_contacts.dart b/lib/screens/my_contacts.dart
index abe9fc07af3bc69f863cbaac140e97ba70d26d51..3307e356c52aa07f7927837949b11a2dedb3c1e5 100644
--- a/lib/screens/my_contacts.dart
+++ b/lib/screens/my_contacts.dart
@@ -29,7 +29,6 @@ class ContactsScreen extends StatelessWidget {
     DuniterIndexer duniterIndexer =
         Provider.of<DuniterIndexer>(context, listen: false);
 
-    int keyID = 0;
     double avatarSize = 55;
 
     final myContacts = contactsBox.toMap().values.toList();
@@ -72,7 +71,7 @@ class ContactsScreen extends StatelessWidget {
                           Padding(
                             padding: const EdgeInsets.symmetric(horizontal: 5),
                             child: ListTile(
-                                key: keySearchResult(keyID++),
+                                key: keySearchResult('keyID++'),
                                 horizontalTitleGap: 40,
                                 contentPadding: const EdgeInsets.all(5),
                                 leading: cesiumPlusProvider
diff --git a/lib/screens/search.dart b/lib/screens/search.dart
index 5ab523efc48ba8028946ae384ce25aff22ae9a64..ff3c6d79cf1c9b76ebb3cdd9079c64682ce50123 100644
--- a/lib/screens/search.dart
+++ b/lib/screens/search.dart
@@ -2,6 +2,7 @@ import 'package:easy_localization/easy_localization.dart';
 import 'package:flutter/services.dart';
 import 'package:gecko/globals.dart';
 import 'package:flutter/material.dart';
+import 'package:gecko/models/widgets_keys.dart';
 // import 'package:gecko/providers/home.dart';
 import 'package:gecko/providers/search.dart';
 import 'package:gecko/screens/common_elements.dart';
@@ -51,6 +52,7 @@ class SearchScreen extends StatelessWidget {
               Padding(
                 padding: const EdgeInsets.symmetric(horizontal: 17),
                 child: TextField(
+                  key: keySearchField,
                   controller: searchProvider.searchController,
                   autofocus: true,
                   maxLines: 1,
@@ -91,6 +93,7 @@ class SearchScreen extends StatelessWidget {
                 width: 410,
                 height: 70,
                 child: ElevatedButton(
+                  key: keyConfirmSearch,
                   style: ElevatedButton.styleFrom(
                     elevation: 4,
                     primary: orangeC, // background
diff --git a/lib/screens/search_result.dart b/lib/screens/search_result.dart
index 89ccc0588c6f3a6f7916fd76ccc15c3db986bb3e..c1ca7f0346874cae3bc9059731ccee99180b9fbe 100644
--- a/lib/screens/search_result.dart
+++ b/lib/screens/search_result.dart
@@ -32,7 +32,6 @@ class SearchResultScreen extends StatelessWidget {
     DuniterIndexer duniterIndexer =
         Provider.of<DuniterIndexer>(context, listen: false);
 
-    int keyID = 0;
     double avatarSize = 55;
 
     return Scaffold(
@@ -95,7 +94,7 @@ class SearchResultScreen extends StatelessWidget {
                                   padding:
                                       const EdgeInsets.symmetric(horizontal: 5),
                                   child: ListTile(
-                                      key: keySearchResult(keyID++),
+                                      key: keySearchResult(g1Wallet.pubkey!),
                                       horizontalTitleGap: 40,
                                       contentPadding: const EdgeInsets.all(5),
                                       leading: cesiumPlusProvider
diff --git a/lib/screens/transaction_in_progress.dart b/lib/screens/transaction_in_progress.dart
index dafd381a51da1d7a0100dc78f65f13472e6445bc..b00c8056a99e4afa201e15e37bcd655c48d3af88 100644
--- a/lib/screens/transaction_in_progress.dart
+++ b/lib/screens/transaction_in_progress.dart
@@ -2,6 +2,7 @@ import 'package:easy_localization/easy_localization.dart';
 import 'package:flutter/services.dart';
 import 'package:gecko/globals.dart';
 import 'package:flutter/material.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/providers/wallets_profiles.dart';
@@ -263,6 +264,7 @@ class TransactionInProgress extends StatelessWidget {
                         width: 380 * ratio,
                         height: 60 * ratio,
                         child: ElevatedButton(
+                          key: keyCloseTransactionScreen,
                           style: ElevatedButton.styleFrom(
                             elevation: 4,
                             primary: orangeC, // background
diff --git a/lib/screens/wallet_view.dart b/lib/screens/wallet_view.dart
index c606cc90a9f6d218a3c40f1724b84a7aae657e54..45db562e255effa154b071b00c1147e4eaa10430 100644
--- a/lib/screens/wallet_view.dart
+++ b/lib/screens/wallet_view.dart
@@ -573,6 +573,7 @@ class WalletViewScreen extends StatelessWidget {
                         ),
                         const SizedBox(height: 10),
                         TextField(
+                          key: keyAmountField,
                           controller: walletViewProvider.payAmount,
                           autofocus: true,
                           maxLines: 1,
@@ -618,6 +619,7 @@ class WalletViewScreen extends StatelessWidget {
                           width: double.infinity,
                           height: 60,
                           child: ElevatedButton(
+                            key: keyConfirmPayment,
                             style: ElevatedButton.styleFrom(
                               elevation: 4,
                               primary: orangeC, // background