diff --git a/android/gradle.properties b/android/gradle.properties
index 65eed6426393974efb5a056ec44936d42b5ef2a1..4bb5439f682100f8ef4ba80a557fe4f2f0ab14c2 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.8
-app.versionCode=8
+app.versionName=0.0.9
+app.versionCode=9
diff --git a/fastlane/metadata/android/en-US/changelogs/9.txt b/fastlane/metadata/android/en-US/changelogs/9.txt
new file mode 100644
index 0000000000000000000000000000000000000000..b7b9c1839408f4e0b6fc06c3a989e053ad2f47d8
--- /dev/null
+++ b/fastlane/metadata/android/en-US/changelogs/9.txt
@@ -0,0 +1 @@
+Preload game images
diff --git a/fastlane/metadata/android/fr-FR/changelogs/9.txt b/fastlane/metadata/android/fr-FR/changelogs/9.txt
new file mode 100644
index 0000000000000000000000000000000000000000..c2d86552d8cd71a90bbef3b4ca3f427be47aea32
--- /dev/null
+++ b/fastlane/metadata/android/fr-FR/changelogs/9.txt
@@ -0,0 +1 @@
+Préchargement des images du jeu
diff --git a/lib/provider/data.dart b/lib/provider/data.dart
index 7f90cf37c447cf7f43fb143cf68474e29fbca2cd..8d16475abdb62bf8e6f9a7b7c159e6fe81557464 100644
--- a/lib/provider/data.dart
+++ b/lib/provider/data.dart
@@ -21,6 +21,7 @@ class Data extends ChangeNotifier {
   String _skinDefault = 'default';
 
   // Game data
+  bool _assetsPreloaded = false;
   bool _gameRunning = false;
   bool _isBoardMined = false;
   int _minesCount = 0;
@@ -117,6 +118,11 @@ class Data extends ChangeNotifier {
     notifyListeners();
   }
 
+  bool get assetsPreloaded => _assetsPreloaded;
+  void updateAssetsPreloaded(bool assetsPreloaded) {
+    _assetsPreloaded = assetsPreloaded;
+  }
+
   bool get gameRunning => _gameRunning;
   void updateGameRunning(bool gameRunning) {
     _gameRunning = gameRunning;
diff --git a/lib/screens/home.dart b/lib/screens/home.dart
index 6dbde15516c2030d8526ff4a92e1b7e1a98002bd..0b92834bdc4dd412e4502559cf088919417908bf 100644
--- a/lib/screens/home.dart
+++ b/lib/screens/home.dart
@@ -22,10 +22,61 @@ class _HomeState extends State<Home> {
     myProvider.initParametersValues();
   }
 
+  List getImagesAssets(Data myProvider) {
+    List assets = [];
+
+    List gameImages = [
+      'button_back',
+      'button_start',
+      'game_fail',
+      'game_win',
+    ];
+    myProvider.availableDifficultyLevels.forEach(
+      (difficulty) => gameImages.add('difficulty_' + difficulty)
+    );
+    myProvider.availableSizes.forEach(
+      (size) => gameImages.add('size_' + size)
+    );
+
+    gameImages.forEach(
+      (image) => assets.add('assets/icons/' + image + '.png')
+    );
+
+    List skinImages = [
+      'button_mark_mine_off',
+      'button_mark_mine_on',
+      'tile_flag_ko',
+      'tile_flag_ok',
+      'tile_flag',
+      'tile_mine_not_found',
+      'tile_mine',
+      'tile_unknown',
+    ];
+    for (int value = 0; value < 9; value++) {
+      skinImages.add('tile_' + value.toString());
+    }
+
+    skinImages.forEach(
+      (image) => assets.add('assets/skins/default_' + image + '.png')
+    );
+
+    assets.add('assets/skins/empty.png');
+
+    return assets;
+  }
+
   @override
   Widget build(BuildContext context) {
     Data myProvider = Provider.of<Data>(context);
 
+    if (!myProvider.assetsPreloaded) {
+      List assets = getImagesAssets(myProvider);
+      assets.forEach(
+        (asset) => precacheImage(AssetImage(asset), context)
+      );
+      myProvider.updateAssetsPreloaded(true);
+    }
+
     List<Widget> menuActions = [];
 
     if (myProvider.gameRunning) {