diff --git a/recipes/Dockerfile b/recipes/Dockerfile
index 888d13d745fe52a9830f7532d24eced14090237f..12b2fe2ef771e9c7e71c53d93b05af1c6c28c627 100644
--- a/recipes/Dockerfile
+++ b/recipes/Dockerfile
@@ -1,4 +1,4 @@
-FROM julia:1.8.5-bullseye AS base
+FROM julia:1.9.0-bullseye AS base
 
 ARG PROJECT_DIR=/app
 ARG BRANCH=main
@@ -35,12 +35,12 @@ RUN apt-get update \
 FROM prebuild AS backend
 
 ARG PROJECT_DIR=/app
-ARG BRANCH=main
+ARG TAGGINGBACKENDS_BRANCH=$BRANCH
 ARG BACKEND
 
 RUN if [ "$BACKEND" = "MaggotUBA/20221005-1" ]; then \
     cd $PROJECT_DIR \
- && julia -e "using Pkg; Pkg.add(url=\"https://gitlab.pasteur.fr/nyx/TaggingBackends\", rev=\"$BRANCH\")" \
+ && julia -e "using Pkg; Pkg.add(url=\"https://gitlab.pasteur.fr/nyx/TaggingBackends\", rev=\"$TAGGINGBACKENDS_BRANCH\")" \
  && git clone --depth 1 --no-tags --single-branch -b 20221005 https://gitlab.pasteur.fr/nyx/MaggotUBA-adapter MaggotUBA \
  && cd MaggotUBA \
  && rm -rf .git \
@@ -50,7 +50,7 @@ RUN if [ "$BACKEND" = "MaggotUBA/20221005-1" ]; then \
  && rm -rf ~/.cache; \
     elif [ "$BACKEND" = "MaggotUBA/20221228" ]; then \
     cd $PROJECT_DIR \
- && julia -e "using Pkg; Pkg.add(url=\"https://gitlab.pasteur.fr/nyx/TaggingBackends\", rev=\"$BRANCH\")" \
+ && julia -e "using Pkg; Pkg.add(url=\"https://gitlab.pasteur.fr/nyx/TaggingBackends\", rev=\"$TAGGINGBACKENDS_BRANCH\")" \
  && git clone --depth 1 --no-tags --single-branch -b dev https://gitlab.pasteur.fr/nyx/MaggotUBA-adapter MaggotUBA \
  && cd MaggotUBA \
  && rm -rf .git \
@@ -64,28 +64,10 @@ RUN if [ "$BACKEND" = "MaggotUBA/20221005-1" ]; then \
  && apt-get autoremove -y wget \
  && rm -rf /var/lib/apt/lists/* \
  && rm -rf ~/.cache; \
-    elif [ "$BACKEND" = "MaggotUBA/20230111" ]; then \
-    cd $PROJECT_DIR \
- && julia -e "using Pkg; Pkg.add(url=\"https://gitlab.pasteur.fr/nyx/TaggingBackends\", rev=\"$BRANCH\")" \
- && git clone --depth 1 --no-tags --single-branch -b 20230111 https://gitlab.pasteur.fr/nyx/MaggotUBA-adapter MaggotUBA \
- && cd MaggotUBA \
- && rm -rf .git \
- && poetry install --only main \
- && poetry add "pynvml==11.4.1" \
- && rm -rf ~/.cache; \
-    elif [ "$BACKEND" = "MaggotUBA/20230129" ]; then \
-    cd $PROJECT_DIR \
- && julia -e "using Pkg; Pkg.add(url=\"https://gitlab.pasteur.fr/nyx/TaggingBackends\", rev=\"$BRANCH\")" \
- && git clone --depth 1 --no-tags --single-branch -b 20230129 https://gitlab.pasteur.fr/nyx/MaggotUBA-adapter MaggotUBA \
- && cd MaggotUBA \
- && rm -rf .git \
- && poetry install --only main \
- && poetry add "pynvml==11.4.1" \
- && rm -rf ~/.cache; \
-    elif [ "$BACKEND" = "MaggotUBA/20230311" ]; then \
+    elif [ "$(echo $BACKEND | cut -d/ -f1)" = "MaggotUBA" ]; then \
     cd $PROJECT_DIR \
- && julia -e "using Pkg; Pkg.add(url=\"https://gitlab.pasteur.fr/nyx/TaggingBackends\", rev=\"$BRANCH\")" \
- && git clone --depth 1 --no-tags --single-branch -b 20230311 https://gitlab.pasteur.fr/nyx/MaggotUBA-adapter MaggotUBA \
+ && julia -e "using Pkg; Pkg.add(url=\"https://gitlab.pasteur.fr/nyx/TaggingBackends\", rev=\"$TAGGINGBACKENDS_BRANCH\")" \
+ && git clone --depth 1 --no-tags --single-branch -b $(echo $BACKEND | cut -d/ -f2) https://gitlab.pasteur.fr/nyx/MaggotUBA-adapter MaggotUBA \
  && cd MaggotUBA \
  && rm -rf .git \
  && poetry install --only main \
diff --git a/scripts/larvatagger.sh b/scripts/larvatagger.sh
index 1fa78bcf2e55189fe2bd72013f105821493769d8..847b5bbcd7dfd03830072d858ae9cb15b8d11a33 100755
--- a/scripts/larvatagger.sh
+++ b/scripts/larvatagger.sh
@@ -1,9 +1,25 @@
 #!/bin/bash
 
-cmd=$1; shift
+if [ -z "$docker" ]; then
+  docker=docker
+fi
+
+for _ in $(seq $#); do
+  case $1 in
+    build|open|import|merge|train|predict|-V|--version|-h|--help|--more-help|--upgrade)
+      cmd=$1
+      shift
+      break
+      ;;
+    *)
+      # note: if DOCKER_ARGS is externally defined, it must end with an explicit space
+      DOCKER_ARGS="${DOCKER_ARGS}$1 "
+      shift
+  esac
+done
 
 if [ -z "$LARVATAGGER_IMAGE" ]; then
-if [ "$cmd" = "build" -o -n "$(docker images | grep '^larvatagger ')" ]; then
+if [ "$cmd" = "build" -o -n "$($docker images | grep '^larvatagger ')" ]; then
 LARVATAGGER_IMAGE=larvatagger
 else
 LARVATAGGER_IMAGE=flaur/larvatagger
@@ -36,6 +52,7 @@ elif [ "${1:0:15}" = "--with-backend=" ]; then
 DOCKER_ARGS="--build-arg BACKEND=${1:15} $DOCKER_ARGS"; shift
 TARGET=backend
 elif [ "$1" = "--no-cache" ]; then
+echo "Deprecation warning: argument $1 should now be passed before build"
 DOCKER_ARGS="--no-cache $DOCKER_ARGS"; shift
 else
 echo "argument not supported: $1"; shift
@@ -47,24 +64,34 @@ if [ "$BUILD" == "--dev" ]; then
 if ! [[ "$LARVATAGGER_IMAGE" == *:* ]]; then LARVATAGGER_IMAGE="${LARVATAGGER_IMAGE}:dev"; fi
 PROJECT_ROOT=$(basename $(pwd))
 cd ..
-DOCKER_BUILDKIT=1 docker build -t "$LARVATAGGER_IMAGE" -f "$PROJECT_ROOT/recipes/Dockerfile.local" ${DOCKER_ARGS}.
+DOCKER_BUILDKIT=1 $docker build -t "$LARVATAGGER_IMAGE" -f "$PROJECT_ROOT/recipes/Dockerfile.local" ${DOCKER_ARGS}.
 elif [ "$BUILD" == "--stable" ]; then
 if ! [[ "$LARVATAGGER_IMAGE" == *:* ]]; then LARVATAGGER_IMAGE="${LARVATAGGER_IMAGE}:stable"; fi
-docker build -t "$LARVATAGGER_IMAGE" -f recipes/Dockerfile ${DOCKER_ARGS}.
+$docker build -t "$LARVATAGGER_IMAGE" -f recipes/Dockerfile ${DOCKER_ARGS}.
 else
 if ! [[ "$LARVATAGGER_IMAGE" == *:* ]]; then LARVATAGGER_IMAGE="${LARVATAGGER_IMAGE}:latest"; fi
-if [ -z "$LARVATAGGER_DEFAULT_BRANCH" ]; then LARVATAGGER_DEFAULT_BRANCH=dev; fi
-docker build -t "$LARVATAGGER_IMAGE" -f recipes/Dockerfile ${DOCKER_ARGS}--build-arg BRANCH=$LARVATAGGER_DEFAULT_BRANCH .
+if [ -z "$LARVATAGGER_BRANCH" ]; then
+  if [ -z "$LARVATAGGER_DEFAULT_BRANCH" ]; then
+    LARVATAGGER_BRANCH=dev;
+  else
+    echo "Deprecation notice: LARVATAGGER_DEFAULT_BRANCH has been renamed LARVATAGGER_BRANCH"
+    LARVATAGGER_BRANCH=$LARVATAGGER_DEFAULT_BRANCH
+  fi
+fi
+if [ -n "$TAGGINGBACKENDS_BRANCH" ]; then
+  DOCKER_ARGS="--build-arg TAGGINGBACKENDS_BRANCH=$TAGGINGBACKENDS_BRANCH $DOCKER_ARGS"
+fi
+$docker build -t "$LARVATAGGER_IMAGE" -f recipes/Dockerfile ${DOCKER_ARGS}--build-arg BRANCH=$LARVATAGGER_BRANCH .
 fi
 ;;
 
 	open)
 
 if [ -z "$LARVATAGGER_PORT" -o "$LARVATAGGER_PORT" == "9284" ]; then
-DOCKER_ARGS="-p 9284:9284"
+DOCKER_ARGS="-p 9284:9284 $DOCKER_ARGS"
 TAGGER_ARGS=
 else
-DOCKER_ARGS="-p $LARVATAGGER_PORT:$LARVATAGGER_PORT"
+DOCKER_ARGS="-p $LARVATAGGER_PORT:$LARVATAGGER_PORT $DOCKER_ARGS"
 TAGGER_ARGS="--port=$LARVATAGGER_PORT"
 fi
 
@@ -85,7 +112,7 @@ fi
 RUN_ARGS="$RUN_ARGS --mount type=bind,src=\"$(realpath $instance)\",dst=/app/$backend/models/$(basename $instance)"
 done
 
-eval "exec docker run $RUN_ARGS -i $DOCKER_ARGS \"$LARVATAGGER_IMAGE\" open \"/data/$file\" $TAGGER_ARGS $@"
+eval "exec $docker run $RUN_ARGS -i ${DOCKER_ARGS}\"$LARVATAGGER_IMAGE\" open \"/data/$file\" $TAGGER_ARGS $@"
 ;;
 
 	import | merge)
@@ -95,7 +122,7 @@ file=$(basename "$1"); shift
 
 RUN_ARGS="$RUN_ARGS -v \"$parentdir\":/data"
 
-eval "docker run $RUN_ARGS \"$LARVATAGGER_IMAGE\" $cmd \"/data/$file\" $@"
+eval "$docker run $DOCKER_ARGS$RUN_ARGS \"$LARVATAGGER_IMAGE\" $cmd \"/data/$file\" $@"
 ;;
 
 	train)
@@ -121,8 +148,10 @@ backend=$2; shift 2
 elif [ "${1:0:10}" = "--backend=" ]; then
 backend="${1:10}"; shift
 elif [ "$1" = "--gpus" -o "$1" == "--cpus" -o "$1" = "-m" -o "$1" = "--memory" ]; then
+echo "Deprecation warning: argument $1 should now be passed before train"
 RUN_ARGS="$RUN_ARGS $1 $2"; shift 2
 elif [ "$1" = "--rm" -o "${1:0:7}" = "--gpus=" -o "${1:0:7}" = "--cpus=" -o "${1:0:9}" = "--memory=" ]; then
+echo "Deprecation warning: arguments --rm|--cpus|--gpus|--memory should now be passed before train"
 RUN_ARGS="$RUN_ARGS $1"; shift
 else
 break
@@ -135,7 +164,7 @@ src=$(cd "$external_models_dir"; pwd -P)
 RUN_ARGS="$RUN_ARGS --mount type=bind,src=\"$src\",dst=/app/$backend/models"
 fi
 
-DOCKER_RUN="docker run $RUN_ARGS \"$LARVATAGGER_IMAGE\" train \"/app/$backend\" \"/data/$data_repository\" \"$tagger\" $@"
+DOCKER_RUN="$docker run $DOCKER_ARGS$RUN_ARGS \"$LARVATAGGER_IMAGE\" train \"/app/$backend\" \"/data/$data_repository\" \"$tagger\" $@"
 echo $DOCKER_RUN
 eval $DOCKER_RUN
 ;;
@@ -168,8 +197,10 @@ backend=$2; shift 2
 elif [ "${1:0:10}" = "--backend=" ]; then
 backend="${1:10}"; shift
 elif [ "$1" = "--gpus" -o "$1" == "--cpus" -o "$1" = "-m" -o "$1" = "--memory" ]; then
+echo "Deprecation warning: argument $1 should now be passed before predict"
 RUN_ARGS="$RUN_ARGS $1 $2"; shift 2
 elif [ "$1" = "--rm" -o "${1:0:7}" = "--gpus=" -o "${1:0:7}" = "--cpus=" -o "${1:0:9}" = "--memory=" ]; then
+echo "Deprecation warning: arguments --rm|--cpus|--gpus|--memory should now be passed before predict"
 RUN_ARGS="$RUN_ARGS $1"; shift
 else
 break
@@ -185,7 +216,7 @@ fi
 RUN_ARGS="$RUN_ARGS --mount type=bind,src=\"$(realpath $tagger_path)\",dst=/app/$backend/models/$tagger"
 fi
 
-DOCKER_RUN="docker run $RUN_ARGS \"$LARVATAGGER_IMAGE\" predict \"/app/$backend\" \"$tagger\" \"/data/$data_file\" $@"
+DOCKER_RUN="$docker run $DOCKER_ARGS$RUN_ARGS \"$LARVATAGGER_IMAGE\" predict \"/app/$backend\" \"$tagger\" \"/data/$data_file\" $@"
 echo $DOCKER_RUN
 eval $DOCKER_RUN
 ;;
@@ -197,35 +228,36 @@ echo 'larvatagger.jl extra arguments must come after larvatagger.sh arguments.'
 echo 'Printing larvatagger.jl --help...'
 echo
 
-docker run "$LARVATAGGER_IMAGE" --help
+$docker run ${DOCKER_ARGS}"$LARVATAGGER_IMAGE" --help
 ;;
 
 	-V|--version)
 
-docker run "$LARVATAGGER_IMAGE" --version
+$docker run ${DOCKER_ARGS}"$LARVATAGGER_IMAGE" --version
 ;;
 
 	--update)
 
-if [ -n "$(docker images | grep '^larvatagger         latest ')" ]; then
-docker rmi -f larvatagger:latest
+if [ -n "$($docker images | grep '^larvatagger         latest ')" ]; then
+$docker rmi ${DOCKER_ARGS}-f larvatagger:latest
 fi
-docker pull flaur/larvatagger:latest
+$docker pull ${DOCKER_ARGS}flaur/larvatagger:latest
 ;;
 
 	*)
 
-echo "usage: $0 build [--stable] [--with-default-backend]"
-echo "       $0 open <filepath>"
-echo "       $0 import <filepath> [<outputfilename>] [--id=<runid>] [--framerate=<fps>]"
-echo "       $0 train <datarepository> <taggername> [--backend <name>]"
-echo "                              [--rm] [--cpus <c>] [--gpus <g>] [--memory <m>]"
-echo "       $0 predict <datafile> [--backend <name>] [--model-instance <taggername>]"
-echo "                              [--rm] [--cpus <c>] [--gpus <g>] [--memory <m>]"
-echo "       $0 merge <filepath> [<outputfilename>]"
-echo "       $0 --more-help"
-echo "       $0 --version"
-echo "       $0 --update"
+cat << EOT
+Usage: $0 build [--stable] [--with-default-backend] [--with-backend <backend>]
+       $0 open <filepath> [...]
+       $0 import <filepath> [<outputfilename>] [...]
+       $0 train <datarepository> <taggername> [--backend <name>] [...]
+       $0 predict <datafile> [--backend <name>] [--model-instance <taggername>] [...]
+       $0 merge <filepath> [<outputfilename>] [...]
+       $0 --more-help
+       $0 --version
+       $0 --update
+See --more-help for more information about additional options [...] to larvatagger.jl
+EOT
 ;;
 
 esac