diff --git a/.gitmodules b/.gitmodules
index eea022faf7a5579b914794e8fed7fd293f2fb200..41c9e6de1179efea291dbe69d96b1d839882f2ab 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -1,6 +1,6 @@
 [submodule "dist/desktop"]
 	path = dist/desktop
 	url = git@git.duniter.org:clients/cesium-grp/cesium-desktop.git
-[submodule "platforms/android"]
-	path = platforms/android
+[submodule "dist/android/sources"]
+	path = dist/android/sources
 	url = git@git.duniter.org:clients/cesium-grp/cesium-android.git
diff --git a/app/config.json b/app/config.json
index ae0671c9d152c7379fb228d7553cb5cb6eed8ddb..6a5dc3dd84a88e72b5488bb964aebbacf1a06e03 100644
--- a/app/config.json
+++ b/app/config.json
@@ -67,7 +67,7 @@
         "port": 443
       },
       {
-        "host": "g1v1.p2P.legal",
+        "host": "g1v1.p2p.legal",
         "port": 443
       }
     ],
diff --git a/dist/android/sources b/dist/android/sources
new file mode 160000
index 0000000000000000000000000000000000000000..bd92e40dd32fbf30d3d3428c7b2ef469098ed66f
--- /dev/null
+++ b/dist/android/sources
@@ -0,0 +1 @@
+Subproject commit bd92e40dd32fbf30d3d3428c7b2ef469098ed66f
diff --git a/dist/desktop b/dist/desktop
index e5b6b4baad35456b9a0a39cd9f875e308fb9bad7..ae5f10132376fdd9789db506baa634864b89a19e 160000
--- a/dist/desktop
+++ b/dist/desktop
@@ -1 +1 @@
-Subproject commit e5b6b4baad35456b9a0a39cd9f875e308fb9bad7
+Subproject commit ae5f10132376fdd9789db506baa634864b89a19e
diff --git a/scripts/env-global.sh b/scripts/env-global.sh
index 4da919fdf5668ae67f73604918ec2153c335b61d..c66c6aebaefb307ee4b8b786b7c3f6b2f41cfd6e 100755
--- a/scripts/env-global.sh
+++ b/scripts/env-global.sh
@@ -39,7 +39,8 @@ ANDROID_OUTPUT_MIN_SDK_VERSION=22 # Used by release-android-sign.sh
 ANDROID_OUTPUT_MAX_SDK_VERSION=34 # Used by release-android-sign.sh
 
 DIST_WEB=${PROJECT_DIR}/dist/web/build
-DIST_ANDROID=${PROJECT_DIR}/dist/android
+DIST_ANDROID=${PROJECT_DIR}/dist/android/build # Where APK are stored
+SOURCES_ANDROID=${PROJECT_DIR}/dist/android/sources # Where git cesium-android is checkout
 
 # Addons Mozilla Web extension ID
 WEB_EXT_ID=${WEB_EXT_ID:-"{6f9922f7-a054-4609-94ce-d269993246a5}"}
diff --git a/scripts/release-android-sign.sh b/scripts/release-android-sign.sh
index e21efa9e66c20e6c92b91d58976c7f10a293f2e0..7ea9f22602595ee7e269c793fe35b46b4bddcf54 100755
--- a/scripts/release-android-sign.sh
+++ b/scripts/release-android-sign.sh
@@ -16,9 +16,9 @@ KEYSTORE_PWD=
 . ${PROJECT_DIR}/scripts/env-android.sh
 [[ $? -ne 0 ]] && exit 1
 
-APK_SIGNED_FILE=${ANDROID_OUTPUT_APK_RELEASE}/${ANDROID_OUTPUT_APK_PREFIX}-release-signed.apk
+APK_SIGNED_FILE=${APK_SIGNED_FILE:-"${ANDROID_OUTPUT_APK_RELEASE}/${ANDROID_OUTPUT_APK_PREFIX}-release-signed.apk"}
 APK_UNSIGNED_FILE=${ANDROID_OUTPUT_APK_RELEASE}/${ANDROID_OUTPUT_APK_PREFIX}-release-unsigned.apk
-APK_FILE_ALTERNATIVE=${ANDROID_OUTPUT_APK_RELEASE}/${ANDROID_OUTPUT_APK_PREFIX}-release.apk
+APK_UNSIGNED_FILE_ALTERNATIVE=${ANDROID_OUTPUT_APK_RELEASE}/${ANDROID_OUTPUT_APK_PREFIX}-release.apk
 
 cd ${PROJECT_DIR}
 
@@ -30,11 +30,11 @@ if [[ ! -f "${KEYSTORE_FILE}" ]]; then
 fi
 if [[ ! -f "${APK_UNSIGNED_FILE}" ]]; then
   # Check in an alternative path (e.g. Android default signed file)
-  if [[ ! -f "${APK_FILE_ALTERNATIVE}" ]]; then
+  if [[ ! -f "${APK_UNSIGNED_FILE_ALTERNATIVE}" ]]; then
     echo "ERROR: Unsigned APK file not found: ${APK_UNSIGNED_FILE}"
     exit 1
   fi
-  APK_UNSIGNED_FILE=${APK_FILE_ALTERNATIVE}
+  APK_UNSIGNED_FILE=${APK_UNSIGNED_FILE_ALTERNATIVE}
 fi
 
 echo "--- Signing Android APK..."
@@ -78,5 +78,4 @@ echo ""
 
 export APK_SIGNED_FILE
 echo "--- Successfully generated signed APK at: ${APK_SIGNED_FILE}"
-echo ""
 exit 0
diff --git a/scripts/release-android-sources.sh b/scripts/release-android-sources.sh
index db3ec392b2bd3a1b51aa6d0b68403c8b52ff5f9e..d72de2bf7f49abb5a32893292c76fb2edc81ed83 100755
--- a/scripts/release-android-sources.sh
+++ b/scripts/release-android-sources.sh
@@ -7,22 +7,58 @@ if [[ "_" == "_${PROJECT_DIR}" ]]; then
   export PROJECT_DIR
 fi;
 
+
+### Get version to release
 cd ${PROJECT_DIR}
+current=$(grep -m1 -P "version\": \"\d+.\d+.\d+(-\w+[-0-9]*)?\"" package.json | grep -oP "\d+.\d+.\d+(-\w+[-0-9]*)?")
+if [[ "_$current" == "_" ]]; then
+  echo " - Make sure the file 'package.json' exists and is readable."
+  echo " - Check version format is: x.y.z (x and y should be an integer)"
+  exit 1
+fi
 
 # Preparing the environment
 source ${PROJECT_DIR}/scripts/env-global.sh
 [[ $? -ne 0 ]] && exit 1
 
-# Commit android project
-cd ${PROJECT_DIR}/platforms/android || exit 1
-git reset HEAD
-git add -A
-git commit -m "v$1"
-git tag -f -a "v$1" -m "Release v$1"
-# Push the tag
-git push -f origin "v$1"
-# Push the master branch
-git push -f origin
-if [[ $? -ne 0 ]]; then
-  echo "ERROR: cannot push platform/android project ! Continue anyway..."
+# Make sure to checkout the source project
+if ! test -d "${SOURCES_ANDROID}"; then
+  echo "-- Checkout submodules (dist/android/sources) ..."
+  cd "${PROJECT_DIR}"
+  git submodule init && git submodule sync && git submodule update --remote --merge
+  if ! test $? == 0; then
+    echo "ERROR: Unable to sync git submodule. Will not be able commit android sources !"
+    #exit 1
+  else
+    echo "-- Checkout submodules (dist/android/sources) [OK]"
+  fi
+fi
+
+if test -d "${SOURCES_ANDROID}"; then
+
+  # Revert changes in the Android sources project
+  cd ${SOURCES_ANDROID} || exit 1
+  git fetch && git reset --hard --merge HEAD
+
+  # Update sources, from platforms/android
+  echo "--- Copy Android sources from 'platforms/android' to '${SOURCES_ANDROID}' ..."
+  rsync -rlptgocq --exclude=.* --exclude=build --exclude=release-signing.* --exclude=*.keystore --delete --force "${PROJECT_DIR}/platforms/android/" "${SOURCES_ANDROID}/"
+
+  echo "--- Copy Android sources [OK] ..."
+  echo ""
+
+  echo "--- Git push Android sources, and tag as 'v$current'..."
+  cd ${SOURCES_ANDROID} || exit 1
+  git add -A
+  git commit -a -m "v$current"
+  git tag -f -a "v$current" -m "Release v$current"
+  # Push the tag
+  git push -f origin "v$current"
+  # Push the master branch
+  git push -f origin
+  if [[ $? -ne 0 ]]; then
+    echo "ERROR: cannot push Android sources at '${SOURCES_ANDROID}' ! Continue anyway..."
+  else
+    echo "--- Git push Android sources, and tag [OK]"
+  fi
 fi
diff --git a/scripts/release-android.sh b/scripts/release-android.sh
index c75b88845c23400efec6c402737e56c7630769cd..f4a0cc4c46f18ae411605054ac318361baa0b5fd 100755
--- a/scripts/release-android.sh
+++ b/scripts/release-android.sh
@@ -37,6 +37,19 @@ echo ""
 # Sign APK file
 cd ${PROJECT_DIR}/scripts
 ./release-android-sign.sh
-[[ $? -ne 0 ]] && exit 1
 
-cd ${PROJECT_DIR}
+# Check signed APK exists
+if [[ ! -f "${APK_SIGNED_FILE}" ]]; then
+  echo "Missing signed APK file at: ${APK_SIGNED_FILE}"
+  exit 1
+fi
+
+# Copy signed APK to 'dist/android/build'
+echo ""
+echo "--- Copying Android APK to '${DIST_ANDROID}'..."
+APK_BASENAME="${PROJECT_NAME}-v${current}-android.apk"
+APK_FINAL_FILE="${DIST_ANDROID}/${APK_BASENAME}"
+mkdir -p ${DIST_ANDROID}
+cp -f "${APK_SIGNED_FILE}" "${DIST_ANDROID}/${APK_BASENAME}"
+echo "--- Copying Android APK [OK]"
+echo ""
diff --git a/scripts/release-desktop.sh b/scripts/release-desktop.sh
index 2b5732a435fb4c765cdb9b8e59b78160fbaea26a..1d251b9bacda19b0bf892423217a2bf353d0bdf5 100755
--- a/scripts/release-desktop.sh
+++ b/scripts/release-desktop.sh
@@ -22,7 +22,7 @@ then
 fi
 
 ### Get version to release
-current=$(grep -P "version\": \"\d+.\d+.\d+(-?\w*)" package.json | grep -m 1 -oP "\d+.\d+.\d+(-?\w*)")
+current=$(grep -P "version\": \"\d+.\d+.\d+(-\w+[-0-9]*)?\"" package.json | grep -m 1 -oP "\d+.\d+.\d+(-\w+[-0-9]*)?")
 if [[ "_$current" == "_" ]]; then
   echo "Unable to read the current version in 'package.json'. Please check version format is: x.y.z (x and y should be an integer)."
   exit 1;
diff --git a/scripts/release-sign-extension.sh b/scripts/release-sign-extension.sh
index 8b6bb42e20cca3e6450f3e45515f39a3f1723e79..b46535da2cdc542e10765b5a5c843a0a2a453e6d 100755
--- a/scripts/release-sign-extension.sh
+++ b/scripts/release-sign-extension.sh
@@ -20,7 +20,7 @@ then
 fi
 
 ### Get version to release
-current=$(grep -m 1 -oP "version\": \"\d+.\d+.\d+(-\w+[0-9]*)?" package.json | grep -m 1 -oP "\d+.\d+.\d+(-\w+[0-9]*)?")
+current=$(grep -m 1 -oP "version\": \"\d+.\d+.\d+(-\w+[-0-9]*)?\"" package.json | grep -m 1 -oP "\d+.\d+.\d+(-\w+[-0-9]*)?")
 if [[ "_$current" == "_" ]]; then
   echo "Unable to read the current version in 'package.json'. Please check version format is: x.y.z (x and y should be an integer)."
   exit 1;
diff --git a/scripts/release-to-github.sh b/scripts/release-to-github.sh
index a007963318f2232ae9b3bf93e8993f7fbe3769ee..40f3d1f4479c657a4df2622668d1f755200ef42a 100755
--- a/scripts/release-to-github.sh
+++ b/scripts/release-to-github.sh
@@ -20,7 +20,7 @@ then
 fi
 
 ### Get version to release
-current=$(grep -m1 -P "version\": \"\d+.\d+.\d+(-\w+[0-9]*)?" package.json | grep -oP "\d+.\d+.\d+(-\w+[0-9]*)?")
+current=$(grep -m1 -P "version\": \"\d+.\d+.\d+(-\w+[-0-9]*)?\"" package.json | grep -oP "\d+.\d+.\d+(-\w+[-0-9]*)?")
 if [[ "_$current" == "_" ]]; then
   echo " - Make sure the file 'package.json' exists and is readable."
   echo " - Check version format is: x.y.z (x and y should be an integer)"
@@ -160,18 +160,14 @@ fi
 
 # Upload Android APK file
 APK_BASENAME="${PROJECT_NAME}-v${current}-android.apk"
-APK_SIGNED_FILE="${ANDROID_OUTPUT_APK_RELEASE}/${ANDROID_OUTPUT_APK_PREFIX}-release-signed.apk"
-if [[ -f "${APK_SIGNED_FILE}" ]]; then
-  # Copy to dist/android
-  mkdir -p ${DIST_ANDROID}
-  cp -f "${APK_SIGNED_FILE}" "${DIST_ANDROID}/${APK_BASENAME}"
-
-  result=$(curl -s -H ''"$GITHUT_AUTH"'' -H 'Content-Type: application/vnd.android.package-archive' -T "${APK_SIGNED_FILE}" "${upload_url}?name=${APK_BASENAME}")
+APK_FILE="${DIST_ANDROID}/${APK_BASENAME}"
+if [[ -f "${APK_FILE}" ]]; then
+  result=$(curl -s -H ''"$GITHUT_AUTH"'' -H 'Content-Type: application/vnd.android.package-archive' -T "${APK_FILE}" "${upload_url}?name=${APK_BASENAME}")
   browser_download_url=$(echo "$result" | grep -P "\"browser_download_url\":[ ]?\"[^\"]+" | grep -oP "\"browser_download_url\":[ ]?\"[^\"]+"  | grep -oP "https://[A-Za-z0-9/.-]+")
-  APK_SHA256=$(sha256sum "${APK_SIGNED_FILE}" | sed 's/ /\n/gi' | head -n 1)
+  APK_SHA256=$(sha256sum "${APK_FILE}" | sed 's/ /\n/gi' | head -n 1)
   echo " - ${browser_download_url}  | SHA256 Checksum: ${APK_SHA256}"
-  echo "${APK_SHA256}  ${APK_BASENAME}" > "${APK_SIGNED_FILE}.sha256"
-  result=$(curl -s -H ''"$GITHUT_AUTH"'' -H 'Content-Type: text/plain' -T "${APK_SIGNED_FILE}.sha256" "${upload_url}?name=${APK_BASENAME}.sha256")
+  echo "${APK_SHA256}  ${APK_BASENAME}" > "${APK_FILE}.sha256"
+  result=$(curl -s -H ''"$GITHUT_AUTH"'' -H 'Content-Type: text/plain' -T "${APK_FILE}.sha256" "${upload_url}?name=${APK_BASENAME}.sha256")
 else
   echo "- ERROR: Android release (APK) not found! Skipping."
   missing_file=true
diff --git a/scripts/release.sh b/scripts/release.sh
index 47c202e11e6ddfb3722d4f5ec9a11ea00cb80a4f..eccc9d01f4650b07284ef5659e8f1cde7643e463 100755
--- a/scripts/release.sh
+++ b/scripts/release.sh
@@ -18,7 +18,7 @@ then
 fi
 
 ### Get current version (package.json)
-current=$(grep -m1 -P "version\": \"\d+.\d+.\d+(-\w+[0-9]*)?" package.json | grep -oP "\d+.\d+.\d+(-\w+[0-9]*)?")
+current=$(grep -m1 -P "version\": \"\d+.\d+.\d+(-\w+[-0-9]*)?\"" package.json | grep -oP "\d+.\d+.\d+(-\w+[-0-9]*)?")
 if [[ "_$current" == "_" ]]; then
   echo "Unable to read the current version in 'package.json'. Please check version format is: x.y.z (x and y should be an integer)."
   exit 1;
@@ -34,7 +34,7 @@ fi
 echo "Current Android version: $currentAndroid"
 
 # Check version format
-if [[ ! $2 =~ ^[0-9]+.[0-9]+.[0-9]+(-(alpha|beta|rc)[-0-9]*)?$ || ! $3 =~ ^[0-9]+$ ]]; then
+if [[ ! $2 =~ ^[0-9]+.[0-9]+.[0-9]+(-[a-z]+[-0-9]*)?$ || ! $3 =~ ^[0-9]+$ ]]; then
   echo "Wrong version format"
   echo "Usage:"
   echo " > ./release.sh [pre|rel] <version>  <android-version> <release_description>"
@@ -53,16 +53,16 @@ case "$1" in
   rel|pre)
     # Change the version in files: 'package.json' and 'config.xml'
     sed -i "s/version\": \"$current\"/version\": \"$2\"/g" package.json
-    currentConfigXmlVersion=$(grep -m 1 -oP "version=\"\d+.\d+.\d+(-\w+[0-9]*)?\"" config.xml | grep -oP "\d+.\d+.\d+(-\w+[0-9]*)?")
+    currentConfigXmlVersion=$(grep -m 1 -oP "version=\"\d+.\d+.\d+(-\w+[-0-9]*)?\"" config.xml | grep -oP "\d+.\d+.\d+(-\w+[-0-9]*)?")
     sed -i "s/ version=\"$currentConfigXmlVersion\"/ version=\"$2\"/g" config.xml
     sed -i "s/ android-versionCode=\"$currentAndroid\"/ android-versionCode=\"$3\"/g" config.xml
 
     # Change version in file: 'www/manifest.json'
-    currentManifestJsonVersion=$(grep -m 1 -oP "version\": \"\d+.\d+.\d+(-\w+[0-9]*)?\"" www/manifest.json | grep -oP "\d+.\d+.\d+(-\w+[0-9]*)?")
+    currentManifestJsonVersion=$(grep -m 1 -oP "version\": \"\d+.\d+.\d+(-\w+[-0-9]*)?\"" www/manifest.json | grep -oP "\d+.\d+.\d+(-\w+[-0-9]*)?")
     sed -i "s/version\": \"$currentManifestJsonVersion\"/version\": \"$2\"/g" www/manifest.json
 
     # Change version in file: 'resources/web-ext/manifest.json'
-    currentExtManifestJsonVersion=$(grep -m 1 -oP "version\": \"\d+.\d+.\d+(-\w+[0-9]*)?\"" resources/web-ext/manifest.json | grep -oP "\d+.\d+.\d+(-\w+[0-9]*)?")
+    currentExtManifestJsonVersion=$(grep -m 1 -oP "version\": \"\d+.\d+.\d+(-\w+[-0-9]*)?\"" resources/web-ext/manifest.json | grep -oP "\d+.\d+.\d+(-\w+[-0-9]*)?")
     sed -i "s/version\": \"$currentExtManifestJsonVersion\"/version\": \"$2\"/g" resources/web-ext/manifest.json
 
     # Bump the install.sh
@@ -92,11 +92,7 @@ echo "----------------------------------"
 cd ${PROJECT_DIR}/scripts || exit 1
 ./release-android.sh
 #[[ $? -ne 0 ]] && exit 1
-APK_SIGNED_FILE="${ANDROID_OUTPUT_APK_RELEASE}/${ANDROID_OUTPUT_APK_PREFIX}-release-signed.apk"
-if [[ ! -f "${APK_SIGNED_FILE}" ]]; then
-  echo "Missing signed APK file at: ${APK_SIGNED_FILE}"
-  exit 1
-fi
+
 
 echo "----------------------------------"
 echo "- Building web and extension artifacts..."