diff --git a/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/android/app/src/main/res/mipmap-hdpi/ic_launcher.png
index fa60005e648a3b9ae8af4800405515664e224763..927d19d60ebc3d0093b6844e83ba37bf2ed1f6d4 100644
Binary files a/android/app/src/main/res/mipmap-hdpi/ic_launcher.png and b/android/app/src/main/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/android/app/src/main/res/mipmap-mdpi/ic_launcher.png
index f2b33186e29337a50dbc2f90b3f177a548536276..c2725b914ef1c099602d00d8e0c85fe4311b60a6 100644
Binary files a/android/app/src/main/res/mipmap-mdpi/ic_launcher.png and b/android/app/src/main/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png
index d74cf34a9bbe18dc178909cd5ea54f5b71f2b45e..59a7beaf752d18ecfcb4a4e38021513355bb5c16 100644
Binary files a/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png and b/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
index ecc13dde3b18c817ab9181a0717bc8eaa92b8340..d5515ab3b04e1fff2275ffffcd30f5a586864035 100644
Binary files a/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png and b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
index 9625f1c0861a6b0a41fda23b26ebfeae036233a2..68ed8339caa6a0a7350d71ef21217ad8d58e4454 100644
Binary files a/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png and b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/android/gradle.properties b/android/gradle.properties
index 62205f40150696555e74bed7fbf2f63d6f99f49b..0664a0bd52bb87641404da26292a8bbba0c4153b 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.41
-app.versionCode=41
+app.versionName=0.0.42
+app.versionCode=42
diff --git a/assets/icons/button_back.png b/assets/icons/button_back.png
index 2a802ff2d2bc0c90488a1c319288be9f28cdea5e..cc48ffb1dbb653d9a996f139dfbe02969724bfa5 100644
Binary files a/assets/icons/button_back.png and b/assets/icons/button_back.png differ
diff --git a/assets/icons/button_shuffle.png b/assets/icons/button_shuffle.png
index 6d2d89f0df0a4d884882d3b90eb6dc7177da5f07..b595b2639a1370921321719f1a4ff7017522b9f3 100644
Binary files a/assets/icons/button_shuffle.png and b/assets/icons/button_shuffle.png differ
diff --git a/assets/icons/difficulty_3x3.png b/assets/icons/difficulty_3x3.png
index 839097b79e955909bd1f387fc726c6c5c11e862e..9893a1c3d32dc5e9818d0b4da793268833e740ee 100644
Binary files a/assets/icons/difficulty_3x3.png and b/assets/icons/difficulty_3x3.png differ
diff --git a/assets/icons/difficulty_4x4.png b/assets/icons/difficulty_4x4.png
index 4c03069ee1d91aa37a5940b98b78d645189ceebb..57c99a774f4910ade3d46af33d7ce204b36562ac 100644
Binary files a/assets/icons/difficulty_4x4.png and b/assets/icons/difficulty_4x4.png differ
diff --git a/assets/icons/difficulty_5x5.png b/assets/icons/difficulty_5x5.png
index 8241401dba9843cfdae34b7a06aa939610204cae..11e087ec80f029539736637ddacbcd4ccb24ee72 100644
Binary files a/assets/icons/difficulty_5x5.png and b/assets/icons/difficulty_5x5.png differ
diff --git a/assets/icons/game_win.png b/assets/icons/game_win.png
index d73741df40e8cb97e2bf0eec929bba2e7859459a..876334279c1711b349a62131a33607eecf924eb6 100644
Binary files a/assets/icons/game_win.png and b/assets/icons/game_win.png differ
diff --git a/fastlane/metadata/android/en-US/changelogs/42.txt b/fastlane/metadata/android/en-US/changelogs/42.txt
new file mode 100644
index 0000000000000000000000000000000000000000..99279280fee17072740cca18003cb09ccc4c2960
--- /dev/null
+++ b/fastlane/metadata/android/en-US/changelogs/42.txt
@@ -0,0 +1 @@
+Improve app metadata, include fdroid metadata in repository
diff --git a/fastlane/metadata/android/en-US/images/featureGraphic.png b/fastlane/metadata/android/en-US/images/featureGraphic.png
new file mode 100644
index 0000000000000000000000000000000000000000..d94cd4c48e61c0b2a131b828585ef141878cbe03
Binary files /dev/null and b/fastlane/metadata/android/en-US/images/featureGraphic.png differ
diff --git a/fastlane/metadata/android/en-US/images/icon.png b/fastlane/metadata/android/en-US/images/icon.png
index ecea3fb7f0e2b78beaba7f2a25ecce5d057bab10..07ec1be90ac9c02ce0d15e437ea20a49b08acc76 100644
Binary files a/fastlane/metadata/android/en-US/images/icon.png and b/fastlane/metadata/android/en-US/images/icon.png differ
diff --git a/fastlane/metadata/android/fr-FR/changelogs/42.txt b/fastlane/metadata/android/fr-FR/changelogs/42.txt
new file mode 100644
index 0000000000000000000000000000000000000000..da1156453c759a53a1fccfcfa1f5a0c746f6c001
--- /dev/null
+++ b/fastlane/metadata/android/fr-FR/changelogs/42.txt
@@ -0,0 +1 @@
+Ajout des métadata fdroid dans le dépôt
diff --git a/fdroid_metadata.yml b/fdroid_metadata.yml
new file mode 100644
index 0000000000000000000000000000000000000000..3b995d92e36a0e5b48ea790d87ac8cba724ce64f
--- /dev/null
+++ b/fdroid_metadata.yml
@@ -0,0 +1,17 @@
+AuthorName:   'Benoît Harrault'
+Categories:
+  - Games
+Name:         Puzzle Game
+AutoName:     puzzlegame
+License:      GPL-3.0-only
+WebSite:      'https://git.harrault.fr/android/org.benoitharrault.puzzlegame'
+SourceCode:   https://git.harrault.fr/android/org.benoitharrault.puzzlegame
+IssueTracker: https://git.harrault.fr/android/org.benoitharrault.puzzlegame/issues
+Changelog:    https://git.harrault.fr/android/org.benoitharrault.puzzlegame/-/tags
+Summary:      ''
+
+Description:  |-
+    Puzzle game, simple and classic.
+
+RepoType:     git
+Repo:         'https://git.harrault.fr/android/org.benoitharrault.puzzlegame.git'
diff --git a/icons/build_application_icons.sh b/icons/build_application_icons.sh
index 569a16a50dd3015a45c291a93305ff0f67f77c72..7d5ebb61276b80b4034edfc0f4703c7e60c4f5fe 100755
--- a/icons/build_application_icons.sh
+++ b/icons/build_application_icons.sh
@@ -9,8 +9,18 @@ CURRENT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)"
 BASE_DIR="$(dirname "${CURRENT_DIR}")"
 
 SOURCE="${CURRENT_DIR}/icon.svg"
+SOURCE_FASTLANE="${CURRENT_DIR}/featureGraphic.svg"
+
 OPTIPNG_OPTIONS="-preserve -quiet -o7"
 
+if [ ! -f "${SOURCE}" ]; then
+  echo "Missing file: ${SOURCE}"
+fi
+
+if [ ! -f "${SOURCE_FASTLANE}" ]; then
+  echo "Missing file: ${SOURCE_FASTLANE}"
+fi
+
 # optimize svg
 cp ${SOURCE} ${SOURCE}.tmp
 scour \
@@ -19,6 +29,7 @@ scour \
     --enable-viewboxing \
     --enable-comment-stripping \
     --nindent=4 \
+    --quiet \
     -i ${SOURCE}.tmp \
     -o ${SOURCE}
 rm ${SOURCE}.tmp
@@ -28,6 +39,8 @@ function build_icon() {
   ICON_SIZE="$1"
   TARGET="$2"
 
+  echo "Building ${TARGET}"
+
   TARGET_PNG="${TARGET}.png"
 
   inkscape \
@@ -39,6 +52,36 @@ function build_icon() {
   optipng ${OPTIPNG_OPTIONS} ${TARGET_PNG}
 }
 
+# build fastlane image
+function build_fastlane_image() {
+  WIDTH="$1"
+  HEIGHT="$2"
+  TARGET="$3"
+
+  echo "Building ${TARGET}"
+
+  cp ${SOURCE_FASTLANE} ${SOURCE_FASTLANE}.tmp
+  scour \
+      --remove-descriptive-elements \
+      --enable-id-stripping \
+      --enable-viewboxing \
+      --enable-comment-stripping \
+      --nindent=4 \
+      --quiet \
+      -i ${SOURCE_FASTLANE}.tmp \
+      -o ${SOURCE_FASTLANE}
+  rm ${SOURCE_FASTLANE}.tmp
+
+  TARGET_PNG="${TARGET}.png"
+
+  inkscape \
+      --export-width=${WIDTH} \
+      --export-height=${HEIGHT} \
+      --export-filename=${TARGET_PNG} \
+      ${SOURCE_FASTLANE}
+
+  optipng ${OPTIPNG_OPTIONS} ${TARGET_PNG}
+}
 
 build_icon  72 ${BASE_DIR}/android/app/src/main/res/mipmap-hdpi/ic_launcher
 build_icon  48 ${BASE_DIR}/android/app/src/main/res/mipmap-mdpi/ic_launcher
@@ -46,3 +89,5 @@ build_icon  96 ${BASE_DIR}/android/app/src/main/res/mipmap-xhdpi/ic_launcher
 build_icon 144 ${BASE_DIR}/android/app/src/main/res/mipmap-xxhdpi/ic_launcher
 build_icon 192 ${BASE_DIR}/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher
 build_icon 512 ${BASE_DIR}/fastlane/metadata/android/en-US/images/icon
+
+build_fastlane_image 1024 500 ${BASE_DIR}/fastlane/metadata/android/en-US/images/featureGraphic
diff --git a/icons/build_game_icons.sh b/icons/build_game_icons.sh
index ce27005fbca807d836d7cf13cf97a7faa77240b8..45d6b64ded67c281b1c217ecc19ba71423345bce 100755
--- a/icons/build_game_icons.sh
+++ b/icons/build_game_icons.sh
@@ -7,8 +7,26 @@ command -v optipng >/dev/null 2>&1 || { echo >&2 "I require optipng but it's not
 
 CURRENT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)"
 BASE_DIR="$(dirname "${CURRENT_DIR}")"
+ASSETS_DIR="${BASE_DIR}/assets"
 
 OPTIPNG_OPTIONS="-preserve -quiet -o7"
+ICON_SIZE=192
+
+#######################################################
+
+# Game images
+AVAILABLE_GAME_IMAGES="
+  button_back
+  button_shuffle
+  game_win
+"
+
+# Settings images
+AVAILABLES_GAME_SETTINGS="
+  difficulty:3x3,4x4,5x5
+"
+
+#######################################################
 
 # optimize svg
 function optimize_svg() {
@@ -21,6 +39,7 @@ function optimize_svg() {
       --enable-viewboxing \
       --enable-comment-stripping \
       --nindent=4 \
+      --quiet \
       -i ${SOURCE}.tmp \
       -o ${SOURCE}
   rm ${SOURCE}.tmp
@@ -28,10 +47,16 @@ function optimize_svg() {
 
 # build icons
 function build_icon() {
-  ICON_SIZE=192
   SOURCE="$1"
   TARGET="$2"
 
+  echo "Building ${TARGET}"
+
+  if [ ! -f "${SOURCE}" ]; then
+    echo "Missing file: ${SOURCE}"
+    exit 1
+  fi
+
   optimize_svg "${SOURCE}"
 
   inkscape \
@@ -43,10 +68,35 @@ function build_icon() {
   optipng ${OPTIPNG_OPTIONS} ${TARGET}
 }
 
-# Game icons
-build_icon ${CURRENT_DIR}/button_back.svg ${BASE_DIR}/assets/icons/button_back.png
-build_icon ${CURRENT_DIR}/button_shuffle.svg ${BASE_DIR}/assets/icons/button_shuffle.png
-build_icon ${CURRENT_DIR}/game_win.svg ${BASE_DIR}/assets/icons/game_win.png
-build_icon ${CURRENT_DIR}/difficulty_3x3.svg ${BASE_DIR}/assets/icons/difficulty_3x3.png
-build_icon ${CURRENT_DIR}/difficulty_4x4.svg ${BASE_DIR}/assets/icons/difficulty_4x4.png
-build_icon ${CURRENT_DIR}/difficulty_5x5.svg ${BASE_DIR}/assets/icons/difficulty_5x5.png
+function build_settings_icons() {
+  INPUT_STRING="$1"
+
+  SETTING_NAME="$(echo "${INPUT_STRING}" | cut -d":" -f1)"
+  SETTING_VALUES="$(echo "${INPUT_STRING}" | cut -d":" -f2 | tr "," " ")"
+
+  for SETTING_VALUE in ${SETTING_VALUES}
+  do
+    SETTING_CODE="${SETTING_NAME}_${SETTING_VALUE}"
+    build_icon ${CURRENT_DIR}/${SETTING_CODE}.svg ${ASSETS_DIR}/icons/${SETTING_CODE}.png
+  done
+}
+
+#######################################################
+
+# Create output folders
+mkdir -p ${ASSETS_DIR}/icons
+
+# Delete existing generated images
+find ${ASSETS_DIR}/icons -type f -name "*.png" -delete
+
+# build game images
+for GAME_IMAGE in ${AVAILABLE_GAME_IMAGES}
+do
+  build_icon ${CURRENT_DIR}/${GAME_IMAGE}.svg ${ASSETS_DIR}/icons/${GAME_IMAGE}.png
+done
+
+# build settings images
+for GAME_SETTING in ${AVAILABLES_GAME_SETTINGS}
+do
+  build_settings_icons "${GAME_SETTING}"
+done
diff --git a/icons/featureGraphic.svg b/icons/featureGraphic.svg
new file mode 100644
index 0000000000000000000000000000000000000000..2033f317c082bce27115e88ca068d358b08318d0
--- /dev/null
+++ b/icons/featureGraphic.svg
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg enable-background="new 0 0 100 100" version="1.1" viewBox="0 0 1024 500" xml:space="preserve" xmlns="http://www.w3.org/2000/svg"><rect width="1024" height="500" rx="0" ry="0" fill="#977cff"/></svg>