diff --git a/lib/data/models/node_list_cubit.dart b/lib/data/models/node_list_cubit.dart
index fddb303b4daf749579f43c17b607c7086e07a52b..2e517e31c67de579022e249a5ea610b000aa2345 100644
--- a/lib/data/models/node_list_cubit.dart
+++ b/lib/data/models/node_list_cubit.dart
@@ -7,21 +7,55 @@ import 'node_type.dart';
 class NodeListCubit extends HydratedCubit<NodeListState> {
   NodeListCubit() : super(NodeListState());
 
-  void shuffle(NodeType type) {
+  void shuffle(NodeType type, bool withPenalty) {
     switch (type) {
       case NodeType.duniter:
-        emit(state.copyWith(duniterNodes: shuffleFirstN(state.duniterNodes)));
+        if (withPenalty) {
+          emit(state.copyWith(
+              duniterNodes: shuffleFirstNWithPenalty(state.duniterNodes)));
+        } else {
+          emit(state.copyWith(duniterNodes: shuffleFirstN(state.duniterNodes)));
+        }
         break;
       case NodeType.cesiumPlus:
-        emit(state.copyWith(
-            cesiumPlusNodes: shuffleFirstN(state.cesiumPlusNodes)));
+        if (withPenalty) {
+          emit(state.copyWith(
+              cesiumPlusNodes: shuffleFirstNWithPenalty(
+                  state.cesiumPlusNodes)));
+        } else {
+          emit(state.copyWith(
+              cesiumPlusNodes: shuffleFirstN(state.cesiumPlusNodes)));
+        }
         break;
       case NodeType.gva:
-        emit(state.copyWith(gvaNodes: shuffleFirstN(state.gvaNodes)));
+        if (withPenalty) {
+          emit(state.copyWith(
+              gvaNodes: shuffleFirstNWithPenalty(state.gvaNodes)));
+        } else {
+          emit(state.copyWith(gvaNodes: shuffleFirstN(state.gvaNodes)));
+        }
         break;
     }
   }
 
+  // shuffle first n nodes, keeping the first node last
+  List<Node> shuffleFirstNWithPenalty(List<Node> list, [int n = 5]) {
+    if (list.length <= n) {
+      final Node firstElement = list.removeAt(0);
+      list.shuffle();
+      list.add(firstElement);
+    } else {
+      final List<Node> subList = list.sublist(0, n);
+      final Node firstElement = subList.removeAt(0);
+      subList.shuffle();
+      subList.add(firstElement);
+      for (int i = 0; i < n; i++) {
+        list[i] = subList[i];
+      }
+    }
+    return list;
+  }
+
   // shuffle fist n nodes
   List<Node> shuffleFirstN(List<Node> list, [int n = 5]) {
     if (list.length <= n) {
diff --git a/lib/ui/widgets/fifth_screen/node_info.dart b/lib/ui/widgets/fifth_screen/node_info.dart
index 0356c6d6a26f51b3cc4d3c4a9b21769ea0b88924..16d4095d0a6ef0a4bbd44e27339271e245866c68 100644
--- a/lib/ui/widgets/fifth_screen/node_info.dart
+++ b/lib/ui/widgets/fifth_screen/node_info.dart
@@ -26,7 +26,7 @@ class NodeInfoCard extends StatelessWidget {
               : state.gvaNodes;
       return GestureDetector(
           onTap: () {
-            context.read<NodeListCubit>().shuffle(type);
+            context.read<NodeListCubit>().shuffle(type, true);
             ScaffoldMessenger.of(context).showSnackBar(
               SnackBar(
                 content: Text(tr('long_press_to_refresh')),