diff --git a/android/gradle.properties b/android/gradle.properties
index 4d8dcd2635bb8701e212029096d53cf5dc060e45..62205f40150696555e74bed7fbf2f63d6f99f49b 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.40
-app.versionCode=40
+app.versionName=0.0.41
+app.versionCode=41
diff --git a/fastlane/metadata/android/en-US/changelogs/41.txt b/fastlane/metadata/android/en-US/changelogs/41.txt
new file mode 100644
index 0000000000000000000000000000000000000000..b53e3011b9fc61e2d02bc98dca60811639cda8e5
--- /dev/null
+++ b/fastlane/metadata/android/en-US/changelogs/41.txt
@@ -0,0 +1 @@
+Improve randomization of values for images skin themes
diff --git a/fastlane/metadata/android/fr-FR/changelogs/41.txt b/fastlane/metadata/android/fr-FR/changelogs/41.txt
new file mode 100644
index 0000000000000000000000000000000000000000..45176cab0cf2da6acd22c4ebe01f9d5470328817
--- /dev/null
+++ b/fastlane/metadata/android/fr-FR/changelogs/41.txt
@@ -0,0 +1 @@
+Mélange les valeurs parmi toutes les images des thèmes avec images
diff --git a/lib/entities/cell.dart b/lib/entities/cell.dart
index a42ad6f559925e9a31c8bf30f3207aee6af7b9a1..0cb2f971d29843e1b2216983b0ade63b76fb350e 100644
--- a/lib/entities/cell.dart
+++ b/lib/entities/cell.dart
@@ -20,7 +20,8 @@ class Cell {
   Container widget(Data myProvider, Border borders, int row, int col) {
     String imageAsset = 'assets/skins/empty.png';
     if (this.value > 0) {
-      imageAsset = 'assets/skins/' + myProvider.skin + '_' + this.value.toString() + '.png';
+      int cellValue = myProvider.getTranslatedValueForDisplay(this.value);
+      imageAsset = 'assets/skins/' + myProvider.skin + '_' + cellValue.toString() + '.png';
     }
 
     return Container(
@@ -86,7 +87,8 @@ class Cell {
 
     String imageAsset = 'assets/skins/empty.png';
     if (this.value > 0) {
-      imageAsset = 'assets/skins/' + myProvider.skin + '_' + this.value.toString() + '.png';
+      int cellValue = myProvider.getTranslatedValueForDisplay(this.value);
+      imageAsset = 'assets/skins/' + myProvider.skin + '_' + cellValue.toString() + '.png';
     }
 
     Color backgroundColor = Colors.grey[200];
diff --git a/lib/provider/data.dart b/lib/provider/data.dart
index 7889fcfe5cbcf79617dfc35972109bb8e74ce882..77e1bed1df38640c094364719d7af501910f3863 100644
--- a/lib/provider/data.dart
+++ b/lib/provider/data.dart
@@ -7,6 +7,7 @@ class Data extends ChangeNotifier {
   List _availableDifficultyLevels = ['easy', 'medium', 'hard', 'nightmare'];
   List _availableSizes = ['2x2', '3x2', '3x3', '4x4'];
   List _availableSkins = ['default', 'food', 'nature', 'monsters'];
+  List _shufflableSkins = ['food', 'nature', 'monsters'];
 
   List get availableDifficultyLevels => _availableDifficultyLevels;
   List get availableSizes => _availableSizes;
@@ -31,6 +32,7 @@ class Data extends ChangeNotifier {
   int _currentCellRow = null;
   int _currentCellValue = null;
   int _givenTipsCount = 0;
+  List _shuffledCellValues = [];
 
   String get level => _level;
   set updateLevel(String level) {
@@ -113,6 +115,21 @@ class Data extends ChangeNotifier {
     _cellsSolved = cells;
   }
 
+  void shuffleCellValues() {
+    int maxCellValue = 16;
+    List values = new List<int>.generate(maxCellValue, (i) => i + 1);
+
+    if (_shufflableSkins.contains(_skin)) {
+      values.shuffle();
+      print('Shuffled tiles values: ' + values.toString());
+    }
+
+    _shuffledCellValues = values;
+  }
+  int getTranslatedValueForDisplay(int originalValue) {
+    return _shuffledCellValues[originalValue - 1];
+  }
+
   int get currentCellCol => _currentCellCol;
   set updateCurrentCellCol(int currentCellCol) {
     _currentCellCol = currentCellCol;
diff --git a/lib/utils/game_utils.dart b/lib/utils/game_utils.dart
index 5b703a33d798fa0194b12d1b46f292ed10d1e081..508c3d621d5aca7d9990efe8448aa046d9b2424e 100644
--- a/lib/utils/game_utils.dart
+++ b/lib/utils/game_utils.dart
@@ -12,6 +12,7 @@ class GameUtils {
     myProvider.updateSize = myProvider.size;
     myProvider.updateStateRunning = true;
     myProvider.resetGivenTipsCount();
+    myProvider.shuffleCellValues();
     myProvider.updateCells = BoardUtils.createEmptyBoard(myProvider.blockSizeHorizontal * myProvider.blockSizeVertical);
     BoardUtils.pickGrid(myProvider);
   }