diff --git a/android/gradle.properties b/android/gradle.properties
index 81949dfd2077495aaea8a6bc81ad9c75442f9ebb..957c40bc42f3a742d2266dc3a403ad014458ba3f 100644
--- a/android/gradle.properties
+++ b/android/gradle.properties
@@ -1,5 +1,5 @@
 org.gradle.jvmargs=-Xmx1536M
 android.useAndroidX=true
 android.enableJetifier=true
-app.versionName=0.0.14
-app.versionCode=14
+app.versionName=0.0.15
+app.versionCode=15
diff --git a/fastlane/metadata/android/en-US/changelogs/15.txt b/fastlane/metadata/android/en-US/changelogs/15.txt
new file mode 100644
index 0000000000000000000000000000000000000000..52f2179d505f14dcc88966038849680298d1df24
--- /dev/null
+++ b/fastlane/metadata/android/en-US/changelogs/15.txt
@@ -0,0 +1 @@
+Avoid print calls in production code.
diff --git a/fastlane/metadata/android/fr-FR/changelogs/15.txt b/fastlane/metadata/android/fr-FR/changelogs/15.txt
new file mode 100644
index 0000000000000000000000000000000000000000..8537dac9f8ac580dac7eee02b1a1c99a901fe7d2
--- /dev/null
+++ b/fastlane/metadata/android/fr-FR/changelogs/15.txt
@@ -0,0 +1 @@
+Supprime les appels à print dans le code de production.
diff --git a/lib/entities/tile.dart b/lib/entities/tile.dart
index 64227e6317941c23413b94f41929514ba469e8dc..c9d585dbd766be04de40247b75bfd1e903c786a3 100644
--- a/lib/entities/tile.dart
+++ b/lib/entities/tile.dart
@@ -46,7 +46,7 @@ class Tile {
       },
       onAcceptWithDetails: (DragTargetDetails<List<int>> source) {
         List<int> target = [currentCol, currentRow];
-        // print('(drag) Pick from ' + source.toString() + ' and drop on ' + target.toString());
+        // printlog('(drag) Pick from ' + source.toString() + ' and drop on ' + target.toString());
         if (GameUtils.isMoveAllowed(myProvider, source.data, target)) {
           GameUtils.move(myProvider, source.data, target);
         }
diff --git a/lib/utils/board_utils.dart b/lib/utils/board_utils.dart
index 53ae2eb3ed0dcdd781148f161e9e3a209388fe08..19754fb6a536c31587ff7118954b0c3e22f0c5b8 100644
--- a/lib/utils/board_utils.dart
+++ b/lib/utils/board_utils.dart
@@ -2,6 +2,7 @@ import 'dart:math';
 
 import 'package:solitaire_game/entities/tile.dart';
 import 'package:solitaire_game/provider/data.dart';
+import 'package:solitaire_game/utils/tools.dart';
 
 class BoardUtils {
   static printGrid(List cells) {
@@ -9,8 +10,8 @@ class BoardUtils {
     String textHole = '·';
     String textPeg = 'o';
 
-    print('');
-    print('-------');
+    printlog('');
+    printlog('-------');
     for (int rowIndex = 0; rowIndex < cells.length; rowIndex++) {
       String row = '';
       for (int colIndex = 0; colIndex < cells[rowIndex].length; colIndex++) {
@@ -21,10 +22,10 @@ class BoardUtils {
         }
         row += textCell;
       }
-      print(row);
+      printlog(row);
     }
-    print('-------');
-    print('');
+    printlog('-------');
+    printlog('');
   }
 
   static List<List<Tile?>> createBoardFromSavedState(Data myProvider, String savedBoard) {
diff --git a/lib/utils/game_utils.dart b/lib/utils/game_utils.dart
index 7b99a816ed6738d2c1924dd137c182e010f202d4..cd0c5ea7c309f56876771e558b54a1d8c7540670 100644
--- a/lib/utils/game_utils.dart
+++ b/lib/utils/game_utils.dart
@@ -1,6 +1,7 @@
 import 'package:solitaire_game/entities/tile.dart';
 import 'package:solitaire_game/provider/data.dart';
 import 'package:solitaire_game/utils/board_utils.dart';
+import 'package:solitaire_game/utils/tools.dart';
 
 class GameUtils {
   static Future<void> quitGame(Data myProvider) async {
@@ -13,7 +14,7 @@ class GameUtils {
   }
 
   static Future<void> startNewGame(Data myProvider) async {
-    print('Starting game');
+    printlog('Starting game');
 
     BoardUtils.createNewBoard(myProvider);
 
@@ -36,7 +37,7 @@ class GameUtils {
 
         myProvider.updateGameIsRunning(true);
       } catch (e) {
-        print('Failed to resume game. Will start new one instead.');
+        printlog('Failed to resume game. Will start new one instead.');
         myProvider.resetCurrentSavedState();
         myProvider.initParametersValues();
         startNewGame(myProvider);
@@ -49,7 +50,7 @@ class GameUtils {
   }
 
   static bool isMoveAllowed(Data myProvider, List<int> source, List<int> target) {
-    // print('(test) Pick from ' + source.toString() + ' and drop on ' + target.toString());
+    // printlog('(test) Pick from ' + source.toString() + ' and drop on ' + target.toString());
     List<List<Tile?>> board = myProvider.board;
     int sourceCol = source[0];
     int sourceRow = source[1];
@@ -61,39 +62,39 @@ class GameUtils {
         sourceRow > (myProvider.boardSize - 1) ||
         sourceCol < 0 ||
         sourceCol > (myProvider.boardSize - 1)) {
-      // print('move forbidden: source is out of board');
+      // printlog('move forbidden: source is out of board');
       return false;
     }
     if (targetRow < 0 ||
         targetRow > (myProvider.boardSize - 1) ||
         targetCol < 0 ||
         targetCol > (myProvider.boardSize - 1)) {
-      // print('move forbidden: target is out of board');
+      // printlog('move forbidden: target is out of board');
       return false;
     }
 
     // ensure source exists and has a peg
     if (board[sourceRow][sourceCol] == null || board[sourceRow][sourceCol]?.hasPeg == false) {
-      // print('move forbidden: source peg does not exist');
+      // printlog('move forbidden: source peg does not exist');
       return false;
     }
 
     // ensure target exists and is empty
     if (board[targetRow][targetCol] == null || board[targetRow][targetCol]?.hasPeg == true) {
-      // print('move forbidden: target does not exist or already with a peg');
+      // printlog('move forbidden: target does not exist or already with a peg');
       return false;
     }
 
     // ensure source and target are in the same line/column
     if ((targetCol != sourceCol) && (targetRow != sourceRow)) {
-      // print('move forbidden: source and target are not in the same line or column');
+      // printlog('move forbidden: source and target are not in the same line or column');
       return false;
     }
 
     // ensure source and target are separated by exactly one tile
     if (((targetCol == sourceCol) && ((targetRow - sourceRow).abs() != 2)) ||
         ((targetRow == sourceRow) && ((targetCol - sourceCol).abs() != 2))) {
-      // print('move forbidden: source and target must be separated by exactly one tile');
+      // printlog('move forbidden: source and target must be separated by exactly one tile');
       return false;
     }
 
@@ -101,7 +102,7 @@ class GameUtils {
     int middleRow = (sourceRow + ((targetRow - sourceRow) / 2)).round();
     int middleCol = (sourceCol + ((targetCol - sourceCol) / 2)).round();
     if (board[middleRow][middleCol] == null || board[middleRow][middleCol]?.hasPeg == false) {
-      // print('move forbidden: tile between source and target does not contain a peg');
+      // printlog('move forbidden: tile between source and target does not contain a peg');
       return false;
     }
 
@@ -110,7 +111,7 @@ class GameUtils {
   }
 
   static void move(Data myProvider, List<int> source, List<int> target) {
-    print('Move from $source to $target');
+    printlog('Move from $source to $target');
     int sourceCol = source[0];
     int sourceRow = source[1];
     int targetCol = target[0];
diff --git a/lib/utils/tools.dart b/lib/utils/tools.dart
new file mode 100644
index 0000000000000000000000000000000000000000..fd48b2b009b80b22248d6e7f08a63e96c4065bd7
--- /dev/null
+++ b/lib/utils/tools.dart
@@ -0,0 +1,7 @@
+import 'package:flutter/foundation.dart';
+
+void printlog(String message) {
+  if (!kReleaseMode) {
+    debugPrint(message);
+  }
+}
diff --git a/pubspec.lock b/pubspec.lock
index 394474ffa93627c54bc013d08e68346854cf7420..6b1fdfef808496ebd4ff8ce5bb9e51bfbc6469e8 100644
--- a/pubspec.lock
+++ b/pubspec.lock
@@ -151,10 +151,10 @@ packages:
     dependency: "direct main"
     description:
       name: provider
-      sha256: "9a96a0a19b594dbc5bf0f1f27d2bc67d5f95957359b461cd9feb44ed6ae75096"
+      sha256: c8a055ee5ce3fd98d6fc872478b03823ffdb448699c6ebdbbc71d59b596fd48c
       url: "https://pub.dev"
     source: hosted
-    version: "6.1.1"
+    version: "6.1.2"
   shared_preferences:
     dependency: "direct main"
     description:
diff --git a/pubspec.yaml b/pubspec.yaml
index ea8a53bf353b3520eefc08bbb8128dc07ba29840..c0d1f0f22e669a78044d696d569de8a46a7158ac 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -1,7 +1,7 @@
 name: solitaire_game
 description: Solitaire Game
 publish_to: 'none'
-version: 0.0.14+14
+version: 0.0.15+15
 
 environment:
   sdk: '^3.0.0'