diff --git a/README.rst b/README.rst
index 4c17082e6562dd94bc6ec25ac6043a9acdbcca9d..c4774c0700d251a516d16b085d3ded3ff18ee254 100644
--- a/README.rst
+++ b/README.rst
@@ -49,7 +49,7 @@ be lost on update).
 
 The examples below will assume an unmodified profile in a system location (unless noted otherwise).
 
-It is advised to check the help information of the **mkarchiso**:
+It is advised to consult the help output of **mkarchiso**:
 
   .. code:: bash
 
@@ -60,7 +60,7 @@ Create images with packaged archiso
 
   .. code:: bash
 
-    mkarchiso -B path/to/profile -w path/to/work_dir -o path/to/out_dir build_profile
+    mkarchiso -w path/to/work_dir -o path/to/out_dir path/to/profile
 
 Create images with local clone
 ------------------------------
@@ -69,13 +69,13 @@ Clone this repository and run:
 
   .. code:: bash
 
-    ./archiso/mkarchiso -B path/to/profile -w path/to/work_dir -o path/to/out_dir build_profile
+    ./archiso/mkarchiso -w path/to/work_dir -o path/to/out_dir path/to/profile
 
 Testing
 =======
 
 The convenience script **run_archiso** is provided to boot into the medium using qemu.
-It is advised to read its help information:
+It is advised to consult its help output:
 
   .. code:: bash
 
@@ -91,7 +91,7 @@ Run the following to boot the iso using UEFI:
 
   .. code:: bash
 
-    run_archiso -i path/to/an/arch.iso -u
+    run_archiso -u -i path/to/an/arch.iso
 
 The script can of course also be executed from this repository:
 
diff --git a/archiso/mkarchiso b/archiso/mkarchiso
index 2ccf7f0db08f031c597ca1974b8b5aa57965aa23..0318aa688ed6bb3969238a540e5bd9c6d5eb4c05 100755
--- a/archiso/mkarchiso
+++ b/archiso/mkarchiso
@@ -20,17 +20,22 @@ img_name="${app_name}.iso"
 sfs_mode="sfs"
 sfs_comp="xz"
 gpg_key=""
+override_gpg_key=""
 
 # profile defaults
 profile=""
 iso_name="${app_name}"
 iso_label="${app_name^^}"
+override_iso_label=""
 iso_publisher="${app_name}"
+override_iso_publisher=""
 iso_application="${app_name} iso"
+override_iso_application=""
 iso_version=""
 install_dir="${app_name}"
 arch="$(uname -m)"
 pacman_conf="/etc/pacman.conf"
+override_pacman_conf=""
 bootmodes=()
 
 
@@ -105,36 +110,52 @@ _umount_efibootimg() {
 # $1: exit status number.
 _usage() {
     IFS='' read -r -d '' usagetext <<ENDUSAGETEXT || true
-usage ${app_name} [options] command <command options>
- general options:
-    -B <profile_dir> Directory of the archiso profile to build
-    -p PACKAGE(S)    Package(s) to install, can be used multiple times
-    -C <file>        pacman configuration file.
-                     Default: '${pacman_conf}'
-    -L <label>       Set the ISO volume label
-                     Default: '${iso_label}'
-    -P <publisher>   Set a ISO publisher
-                     Default: '${iso_publisher}'
-    -A <application> Set an application name for the ISO
-                     Default: '${iso_application}'
-    -D <install_dir> Set an install_dir. All files will by located here.
-                     Default: '${install_dir}'
-                     NOTE: Max 8 characters, use only [a-z0-9]
-    -w <work_dir>    Set the working directory
-                     Default: '${work_dir}'
-    -o <out_dir>     Set the output directory
-                     Default: '${out_dir}'
-    -s <sfs_mode>    Set SquashFS image mode (img or sfs)
-                     img: prepare airootfs.sfs for dm-snapshot usage
-                     sfs: prepare airootfs.sfs for overlayfs usage
-                     Default: '${sfs_mode}'
-    -c <comp_type>   Set SquashFS compression type (gzip, lzma, lzo, xz, zstd)
-                     Default: '${sfs_comp}'
-    -v               Enable verbose output
-    -h               This message
- commands:
-   build_profile
-      build an iso image from a profile
+usage ${app_name} [options] <profile_dir or legacy_command>
+  options:
+     -A <application> Set an application name for the ISO
+                      Default: '${iso_application}'
+     -C <file>        pacman configuration file.
+                      Default: '${pacman_conf}'
+     -D <install_dir> Set an install_dir. All files will by located here.
+                      Default: '${install_dir}'
+                      NOTE: Max 8 characters, use only [a-z0-9]
+     -L <label>       Set the ISO volume label
+                      Default: '${iso_label}'
+     -P <publisher>   Set the ISO publisher
+                      Default: '${iso_publisher}'
+     -c <comp_type>   Set SquashFS compression type (gzip, lzma, lzo, xz, zstd)
+                      Default: '${sfs_comp}'
+     -g <gpg_key>     Set the GPG key to be used for signing the sqashfs image
+     -h               This message
+     -o <out_dir>     Set the output directory
+                      Default: '${out_dir}'
+     -p PACKAGE(S)    Package(s) to install, can be used multiple times
+     -r <run_cmd>     Set a command to be run in chroot (only relevant for for command_run)
+                      NOTE: Deprecated, will be removed with archiso v49
+     -s <sfs_mode>    Set SquashFS image mode (img or sfs)
+                      img: prepare airootfs.sfs for dm-snapshot usage
+                      sfs: prepare airootfs.sfs for overlayfs usage
+                      Default: '${sfs_mode}'
+     -v               Enable verbose output
+     -w <work_dir>    Set the working directory
+                      Default: '${work_dir}'
+
+  profile_dir:        Directory of the archiso profile to build
+
+  legacy_command:     Legacy build.sh command
+                      NOTE: Deprecated, will be removed with archiso v49
+    command_init
+        initialize a chroot for building
+    command_install
+        install packages to the chroot
+    command_run
+        run a command in the chroot
+    command_prepare
+        cleanup and prepare the airootfs
+    command_pkglist
+        create a list of packages installed on the medium
+    command_iso
+        create the ISO
 ENDUSAGETEXT
     printf '%s' "${usagetext}"
     exit "${1}"
@@ -652,6 +673,29 @@ _read_profile() {
     fi
 }
 
+# set overrides from mkarchiso option parameters, if present
+_set_overrides() {
+    if [[ -n "$override_iso_label" ]]; then
+        iso_label="$override_iso_label"
+    fi
+    if [[ -n "$override_iso_publisher" ]]; then
+        iso_publisher="$override_iso_publisher"
+    fi
+    if [[ -n "$override_iso_application" ]]; then
+        iso_application="$override_iso_application"
+    fi
+    if [[ -n "$override_install_dir" ]]; then
+        install_dir="$override_install_dir"
+    fi
+    if [[ -n "$override_pacman_conf" ]]; then
+        pacman_conf="$override_pacman_conf"
+    fi
+    if [[ -n "$override_gpg_key" ]]; then
+        gpg_key="$override_gpg_key"
+    fi
+}
+
+
 _export_gpg_publickey() {
     if [[ -n "${gpg_key}" ]]; then
         gpg --batch --output "${work_dir}/pubkey.gpg" --export "${gpg_key}"
@@ -743,27 +787,23 @@ command_build_profile() {
     _run_once _make_iso
 }
 
-while getopts 'B:p:r:C:L:P:A:D:w:o:s:c:g:vh:?' arg; do
+while getopts 'p:r:C:L:P:A:D:w:o:s:c:g:vh?' arg; do
     case "${arg}" in
-        B)
-            profile="$(realpath -- "${OPTARG}")"
-            _read_profile
-            ;;
         p)
             read -r -a opt_pkg_list <<< "${OPTARG}"
             pkg_list+=("${opt_pkg_list[@]}")
             ;;
         r) run_cmd="${OPTARG}" ;;
-        C) pacman_conf="$(realpath -- "${OPTARG}")" ;;
-        L) iso_label="${OPTARG}" ;;
-        P) iso_publisher="${OPTARG}" ;;
-        A) iso_application="${OPTARG}" ;;
-        D) install_dir="${OPTARG}" ;;
+        C) override_pacman_conf="$(realpath -- "${OPTARG}")" ;;
+        L) override_iso_label="${OPTARG}" ;;
+        P) override_iso_publisher="${OPTARG}" ;;
+        A) override_iso_application="${OPTARG}" ;;
+        D) override_install_dir="${OPTARG}" ;;
         w) work_dir="$(realpath -- "${OPTARG}")" ;;
         o) out_dir="$(realpath -- "${OPTARG}")" ;;
         s) sfs_mode="${OPTARG}" ;;
         c) sfs_comp="${OPTARG}" ;;
-        g) gpg_key="${OPTARG}" ;;
+        g) override_gpg_key="${OPTARG}" ;;
         v) quiet="n" ;;
         h|?) _usage 0 ;;
         *)
@@ -791,40 +831,46 @@ isofs_dir="${work_dir}/iso"
 
 case "${command_name}" in
     init)
-        _msg_warning "The '${command_name}' command is deprecated!"
+        _msg_warning "The '${command_name}' command is deprecated! It will be removed with archiso v49."
+        _set_overrides
         command_init
         ;;
     install)
-        _msg_warning "The '${command_name}' command is deprecated!"
+        _msg_warning "The '${command_name}' command is deprecated! It will be removed with archiso v49."
+        _set_overrides
         command_install
         ;;
     run)
-        _msg_warning "The '${command_name}' command is deprecated!"
+        _msg_warning "The '${command_name}' command is deprecated! It will be removed with archiso v49."
         command_run
         ;;
     prepare)
-        _msg_warning "The '${command_name}' command is deprecated!"
+        _msg_warning "The '${command_name}' command is deprecated! It will be removed with archiso v49."
+        _set_overrides
         command_prepare
         ;;
     pkglist)
-        _msg_warning "The '${command_name}' command is deprecated!"
+        _msg_warning "The '${command_name}' command is deprecated! It will be removed with archiso v49."
         command_pkglist
         ;;
     iso)
-        _msg_warning "The '${command_name}' command is deprecated!"
+        _msg_warning "The '${command_name}' command is deprecated! It will be removed with archiso v49."
         if (( $# < 2 )); then
             _msg_error "No image specified" 0
             _usage 1
         fi
         img_name="${2}"
+        _set_overrides
         command_iso
         ;;
-    build_profile)
-        command_build_profile
-        ;;
     *)
-        _msg_error "Invalid command name '${command_name}'" 0
-        _usage 1
+        # NOTE: we call read_profile here, assuming that the first non-option parameter is a profile directory
+        # This way we can retain backwards compatibility with legacy build.sh scripts until we deprecate the old way of
+        # calling mkarchiso with named parameters in v49
+        profile="$(realpath -- "${command_name}")"
+        _read_profile
+        _set_overrides
+        command_build_profile
         ;;
 esac
 
diff --git a/configs/baseline/build.sh b/configs/baseline/build.sh
index 734ae26e5191496ea90991e7ee2f66fbc02a5dc9..0573599994c4260702e54498ae61628fe342e2e3 100755
--- a/configs/baseline/build.sh
+++ b/configs/baseline/build.sh
@@ -4,4 +4,4 @@
 
 printf '\n[%s] WARNING: %s\n\n' "mkarchiso" "build.sh scripts are deprecated! Please use mkarchiso directly." >&2
 _buildsh_path="$(realpath -- "$0")"
-exec mkarchiso "$@" -B "${_buildsh_path%/*}" build_profile
+exec mkarchiso "$@" "${_buildsh_path%/*}"
diff --git a/configs/releng/build.sh b/configs/releng/build.sh
index 734ae26e5191496ea90991e7ee2f66fbc02a5dc9..0573599994c4260702e54498ae61628fe342e2e3 100755
--- a/configs/releng/build.sh
+++ b/configs/releng/build.sh
@@ -4,4 +4,4 @@
 
 printf '\n[%s] WARNING: %s\n\n' "mkarchiso" "build.sh scripts are deprecated! Please use mkarchiso directly." >&2
 _buildsh_path="$(realpath -- "$0")"
-exec mkarchiso "$@" -B "${_buildsh_path%/*}" build_profile
+exec mkarchiso "$@" "${_buildsh_path%/*}"