diff --git a/android/gradle.properties b/android/gradle.properties
index aa51064abebb79ba519e600afb7af23779154d4e..135006f9c1386c8757595c43e890e911f732f5a3 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.5
-app.versionCode=5
+app.versionName=0.0.6
+app.versionCode=6
diff --git a/fastlane/metadata/android/en-US/changelogs/6.txt b/fastlane/metadata/android/en-US/changelogs/6.txt
new file mode 100644
index 0000000000000000000000000000000000000000..ad7e4ddd3965aa5f2bfdc3c5dca2db9f3bc963fb
--- /dev/null
+++ b/fastlane/metadata/android/en-US/changelogs/6.txt
@@ -0,0 +1 @@
+Improve get new cell value, ponderate from sibling cells
diff --git a/fastlane/metadata/android/fr-FR/changelogs/6.txt b/fastlane/metadata/android/fr-FR/changelogs/6.txt
new file mode 100644
index 0000000000000000000000000000000000000000..6fe58ca185ed2391abcb6f5dafc8b80618ffa10a
--- /dev/null
+++ b/fastlane/metadata/android/fr-FR/changelogs/6.txt
@@ -0,0 +1 @@
+Amélioration de la sélection de la couleur d'une nouvelle case, pondération avec les couleurs voisines
diff --git a/lib/utils/board_utils.dart b/lib/utils/board_utils.dart
index f2707978a4278362d3b2e544f4c62ba1087d11c6..afe0c62acc2bd6722b9881925bd514b2797a73e0 100644
--- a/lib/utils/board_utils.dart
+++ b/lib/utils/board_utils.dart
@@ -153,12 +153,65 @@ class BoardUtils {
     return true;
   }
 
+  static bool isInBoard(Data myProvider, int row, int col) {
+    if (row > 0 &&
+        row < myProvider.sizeHorizontal &&
+        col > 0 &&
+        col < myProvider.sizeVertical) {
+      return true;
+    }
+    return false;
+  }
+
   static String getFillValue(Data myProvider, int row, int col) {
-    var rand = new Random();
+    // build a list of values to pick one
+    List<String> values = [];
+
+    // All eligible values
     int maxValue = myProvider.colorsCount;
-    int value = 1 + rand.nextInt(maxValue);
+    for (int i = 1; i <= maxValue; i++) {
+      values.add(i.toString());
+    }
+
+    // Add values of current col
+    for (int r = 0; r <= myProvider.sizeVertical; r++) {
+      if (isInBoard(myProvider, r, col)) {
+        String value = myProvider.getCellValue(r, col);
+        if (value != '0') {
+          values.add(value);
+        }
+      }
+    }
+
+    // Add values of sibling cols
+    for (int deltaCol = -1; deltaCol <= 1; deltaCol++) {
+      int c = col + deltaCol;
+      for (int r = 0; r < myProvider.sizeVertical; r++) {
+        if (isInBoard(myProvider, r, c)) {
+          String value = myProvider.getCellValue(r, c);
+          if (value != '0') {
+            values.add(value);
+          }
+        }
+      }
+    }
+
+    // Add values of sibling cells
+    for (int deltaCol = -2; deltaCol <= 2; deltaCol++) {
+      int c = col + deltaCol;
+      for (int deltaRow = -2; deltaRow <= 2; deltaRow++) {
+        int r = row + deltaRow;
+        if (isInBoard(myProvider, r, c)) {
+          String value = myProvider.getCellValue(r, c);
+          if (value != '0') {
+            values.add(value);
+          }
+        }
+      }
+    }
 
-    return value.toString();
+    // Pick random value from "ponderated" list
+    return values[Random().nextInt(values.length)];
   }
 
   static moveCellsDown(Data myProvider) {