diff --git a/release/docker/docker-entrypoint.sh b/release/docker/docker-entrypoint.sh
index 3e95b35bb9162234d640f5ad19091e927072c227..afa33d33a664a319a4025175bb4e457e64311fd1 100755
--- a/release/docker/docker-entrypoint.sh
+++ b/release/docker/docker-entrypoint.sh
@@ -2,7 +2,7 @@
 set -uo pipefail
 
 boolean () {
-  echo "$1" | sed -E 's/^(true|yes|1)$/true/i'
+  echo "$1" | sed -E 's/^(true|yes|1)$/true/i;/^true/!{s/^.*$/false/}'
 }
 big_fat_warning='\033[01;31m**WARNING**:\033[0m'
 
@@ -56,26 +56,90 @@ if [ "$manual_config" = true ]; then
   if ! diff -q "$profile_default/conf.json.orig.sorted" "$profile_default/conf.json.sorted"; then
     diff -u "$profile_default/conf.json.orig.sorted" "$profile_default/conf.json.sorted"
   fi
-fi
-
-# If conf.json doesn't exist and we have DUNITER_PEER_HOST, then initialise it with
-# the currency parameters
-host_regex='[a-zA-Z0-9](([a-zA-Z0-9]|-)*[a-zA-Z0-9]+)?(\.[a-zA-Z0-9](([a-zA-Z0-9]|-)*[a-zA-Z0-9]+)?)*'
-ipv6_regex='((([0–9A-Fa-f]{1,4}:){7}[0–9A-Fa-f]{1,4})|(([0–9A-Fa-f]{1,4}:){6}:[0–9A-Fa-f]{1,4})|(([0–9A-Fa-f]{1,4}:){5}:([0–9A-Fa-f]{1,4}:)?[0–9A-Fa-f]{1,4})|(([0–9A-Fa-f]{1,4}:){4}:([0–9A-Fa-f]{1,4}:){0,2}[0–9A-Fa-f]{1,4})|(([0–9A-Fa-f]{1,4}:){3}:([0–9A-Fa-f]{1,4}:){0,3}[0–9A-Fa-f]{1,4})|(([0–9A-Fa-f]{1,4}:){2}:([0–9A-Fa-f]{1,4}:){0,4}[0–9A-Fa-f]{1,4})|(([0–9A-Fa-f]{1,4}:){6}((b((25[0–5])|(1d{2})|(2[0–4]d)|(d{1,2}))b).){3}(b((25[0–5])|(1d{2})|(2[0–4]d)|(d{1,2}))b))|(([0–9A-Fa-f]{1,4}:){0,5}:((b((25[0–5])|(1d{2})|(2[0–4]d)|(d{1,2}))b).){3}(b((25[0–5])|(1d{2})|(2[0–4]d)|(d{1,2}))b))|(::([0–9A-Fa-f]{1,4}:){0,5}((b((25[0–5])|(1d{2})|(2[0–4]d)|(d{1,2}))b).){3}(b((25[0–5])|(1d{2})|(2[0–4]d)|(d{1,2}))b))|([0–9A-Fa-f]{1,4}::([0–9A-Fa-f]{1,4}:){0,5}[0–9A-Fa-f]{1,4})|(::([0–9A-Fa-f]{1,4}:){0,6}[0–9A-Fa-f]{1,4})|(([0–9A-Fa-f]{1,4}:){1,7}:))'
-
-if ! [ -f "$profile_default/conf.json" ] && echo "${DUNITER_PEER_HOST}" | grep -E "^($host_regex|$ipv6_regex)(:[0-9]+)?$"; then
-  echo "No config file - Initializing currency from '$DUNITER_PEER_HOST'..."
-  port="${DUNITER_PEER_HOST#*:}"
-  if [ "${port:-443}" = 443 ]; then
-    scheme=https://
+else
+  # If conf.json doesn't exist and we have DUNITER_PEER_HOST, then initialise it with
+  # the currency parameters
+  host_regex='[a-zA-Z0-9](([a-zA-Z0-9]|-)*[a-zA-Z0-9]+)?(\.[a-zA-Z0-9](([a-zA-Z0-9]|-)*[a-zA-Z0-9]+)?)*'
+  ipv6_regex='((([0–9A-Fa-f]{1,4}:){7}[0–9A-Fa-f]{1,4})|(([0–9A-Fa-f]{1,4}:){6}:[0–9A-Fa-f]{1,4})|(([0–9A-Fa-f]{1,4}:){5}:([0–9A-Fa-f]{1,4}:)?[0–9A-Fa-f]{1,4})|(([0–9A-Fa-f]{1,4}:){4}:([0–9A-Fa-f]{1,4}:){0,2}[0–9A-Fa-f]{1,4})|(([0–9A-Fa-f]{1,4}:){3}:([0–9A-Fa-f]{1,4}:){0,3}[0–9A-Fa-f]{1,4})|(([0–9A-Fa-f]{1,4}:){2}:([0–9A-Fa-f]{1,4}:){0,4}[0–9A-Fa-f]{1,4})|(([0–9A-Fa-f]{1,4}:){6}((b((25[0–5])|(1d{2})|(2[0–4]d)|(d{1,2}))b).){3}(b((25[0–5])|(1d{2})|(2[0–4]d)|(d{1,2}))b))|(([0–9A-Fa-f]{1,4}:){0,5}:((b((25[0–5])|(1d{2})|(2[0–4]d)|(d{1,2}))b).){3}(b((25[0–5])|(1d{2})|(2[0–4]d)|(d{1,2}))b))|(::([0–9A-Fa-f]{1,4}:){0,5}((b((25[0–5])|(1d{2})|(2[0–4]d)|(d{1,2}))b).){3}(b((25[0–5])|(1d{2})|(2[0–4]d)|(d{1,2}))b))|([0–9A-Fa-f]{1,4}::([0–9A-Fa-f]{1,4}:){0,5}[0–9A-Fa-f]{1,4})|(::([0–9A-Fa-f]{1,4}:){0,6}[0–9A-Fa-f]{1,4})|(([0–9A-Fa-f]{1,4}:){1,7}:))'
+  
+  if ! [ -f "$profile_default/conf.json" ] && echo "${DUNITER_PEER_HOST}" | grep -E "^($host_regex|$ipv6_regex)(:[0-9]+)?$"; then
+    echo "No config file - Initializing currency from '$DUNITER_PEER_HOST'..."
+    port="${DUNITER_PEER_HOST#*:}"
+    if [ "${port:-443}" = 443 ]; then
+      scheme=https://
+    else
+      scheme=http://
+    fi
+    if wget -q -O- "$scheme$DUNITER_PEER_HOST/blockchain/parameters" >"$profile_default/conf.json.new"; then
+      mv "$profile_default/conf.json.new" "$profile_default/conf.json"
+    else
+      echo -e "$big_fat_warning Failed."
+    fi
+  fi
+  
+  # BMA configuration
+  if [ "$(boolean "${DUNITER_BMA_ENABLED:-false}")" = true ]; then
+    DUNITER_BMA_IP4="${DUNITER_BMA_IP4:-0.0.0.0}"
+    DUNITER_BMA_PORT="${DUNITER_BMA_PORT:-10901}"
+    DUNITER_BMA_REMOTE_HOST="${DUNITER_BMA_REMOTE_HOST:-$(hostname)}"
+    DUNITER_BMA_REMOTE_PORT="${DUNITER_BMA_REMOTE_PORT:-$DUNITER_BMA_PORT}"
+    jq -r '
+      del(.nobma, .ipv4, .port, .remoteport, .remotehost) |
+      . += {
+        "nobma": false,
+        "ipv4": "'$DUNITER_BMA_IP4'",
+        "port": "'$DUNITER_BMA_PORT'",
+        "remotehost": "'$DUNITER_BMA_REMOTE_HOST'",
+        "remoteport": "'$DUNITER_BMA_REMOTE_PORT'"
+      }
+    ' "$profile_default/conf.json" >"$profile_default/conf.json.new"
   else
-    scheme=http://
+    jq -r '
+      del(.nobma, .ipv4, .port, .remoteport, .remotehost) |
+      . += {
+        "nobma": true,
+      }
+    ' "$profile_default/conf.json" >"$profile_default/conf.json.new"
   fi
-  if wget -q -O- "$scheme$DUNITER_PEER_HOST/blockchain/parameters" >"$profile_default/conf.json.new"; then
-    mv "$profile_default/conf.json.new" "$profile_default/conf.json"
+  mv "$profile_default/conf.json.new" "$profile_default/conf.json"
+  
+  # WS2P configuration
+  if [ -n "${DUNITER_WS2P_HOST:-}" ]; then
+    DUNITER_WS2P_PORT="${DUNITER_WS2P_PORT:-20901}"
+    DUNITER_WS2P_PUBLIC="${DUNITER_WS2P_PUBLIC:-false}"
+    DUNITER_WS2P_REMOTE_HOST="${DUNITER_WS2P_REMOTE_HOST:-$(hostname)}"
+    DUNITER_WS2P_REMOTE_PORT="${DUNITER_WS2P_REMOTE_PORT:-$DUNITER_WS2P_PORT}"
+    DUNITER_WS2P_REMOTE_PATH="${DUNITER_WS2P_REMOTE_PATH:-}"
+    jq -r '
+      del(.ws2p.host, .ws2p.port, .ws2p.publicAccess, .ws2p.remoteport, .ws2p.remotehost, .ws2p.remotepath) |
+      .ws2p += {
+        "host": "'$DUNITER_WS2P_HOST'",
+        "port": "'$DUNITER_WS2P_PORT'",
+        "publicAccess": '$DUNITER_WS2P_PUBLIC',
+        "remotehost": "'$DUNITER_WS2P_REMOTE_HOST'",
+        "remoteport": "'$DUNITER_WS2P_REMOTE_PORT'",
+        "remotepath": "'$DUNITER_WS2P_REMOTE_PATH'",
+      }
+    ' "$profile_default/conf.json" >"$profile_default/conf.json.new"
   else
-    echo -e "$big_fat_warning Failed."
+    jq -r '
+      del(.ws2p.host, .ws2p.port, .ws2p.publicAccess, .ws2p.remoteport, .ws2p.remotehost, .ws2p.remotepath)
+    ' "$profile_default/conf.json" >"$profile_default/conf.json.new"
   fi
+  mv "$profile_default/conf.json.new" "$profile_default/conf.json"
+  
+  # UPNP
+  DUNITER_UPNP="$(boolean "${DUNITER_UPNP:-true}")"
+  jq -r '
+    del(.upnp, .ws2p.upnp) |
+    . += {
+      "upnp": '$DUNITER_UPNP',
+    } |
+    .ws2p += {
+      "upnp": '$DUNITER_UPNP',
+    }
+  ' "$profile_default/conf.json" >"$profile_default/conf.json.new"
+  mv "$profile_default/conf.json.new" "$profile_default/conf.json"
 
   # If peers.db is missing and DUNITER_PEER_HOST is set, bootstrap it using
   # 'sync --only-peers'
@@ -93,7 +157,7 @@ if ! [ -f "$profile_default/conf.json" ] && echo "${DUNITER_PEER_HOST}" | grep -
     )
     rm -fr /tmp/duniter-bootstrap
   fi
-fi
+fi # manual_config
 
 # Auto start synchronization when enabled and starting from scratch
 if [ "$auto_sync" = true ]; then