diff --git a/.github/workflows/cooker-selfhosted-persistent.yml b/.github/workflows/cooker-selfhosted-persistent.yml
index dced323f..b2403330 100644
--- a/.github/workflows/cooker-selfhosted-persistent.yml
+++ b/.github/workflows/cooker-selfhosted-persistent.yml
@@ -113,16 +113,27 @@ jobs:
       # if it's a feature branch it will not marked as "latest" cooker version
       - name: "Set makeLatest (cooker only)"
         run: |
-          if [[ "$BRANCH_NAME" == 'feat/'* ]]; then
+          if [[ "$BRANCH_NAME" == 'feat/'* || "$BRANCH_NAME" == 'ref/'* ]]; then
             echo "MAKE_LATEST=false" >> $GITHUB_ENV
           else
             echo "MAKE_LATEST=true" >> $GITHUB_ENV
           fi
 
+      # if the branch is coming from a PR the tag should be manually built
+      - name: "Generate version tag"
+        run: |
+          if [[ "$BRANCH_NAME" == 'ref/'* ]]; then
+            pr_number=$(echo ${{env.BRANCH_NAME}} | awk -F'/' '{print $3}')
+            original_branch=$(git ls-remote --heads origin "refs/pull/$pr_number/head" | cut -d'/' -f3)
+            echo "TAG=PR-$pr_number-$original_branch-${{ env.buildid }}" >> $GITHUB_ENV
+          else
+            echo "TAG=${{env.BRANCH_NAME}}-${{ env.buildid }}" >> $GITHUB_ENV
+          fi
+
       - name: Publish the flatpak in a new cooker release
         uses: ncipollo/release-action@v1
         with:
-          tag: "${{env.BRANCH_NAME}}-${{ env.buildid }}"
+          tag: "${{env.TAG}}"
           body: |
             # Release Notes (Cooker)
             This is a cooker snapshot based on the commit: ${{ github.event.repository.full_name }}@${{github.sha}}.
diff --git a/emu-configs/defaults/retrodeck/retrodeck.cfg b/emu-configs/defaults/retrodeck/retrodeck.cfg
index da64517f..5cf0a8f2 100644
--- a/emu-configs/defaults/retrodeck/retrodeck.cfg
+++ b/emu-configs/defaults/retrodeck/retrodeck.cfg
@@ -21,6 +21,7 @@ desktop_mode_warning=true
 low_space_warning=true
 update_check=false
 update_repo=RetroDECK
+branch=
 update_ignore=
 cloud_saves=false
 multi_user_mode=false
diff --git a/emu-configs/mame/mame.ini b/emu-configs/mame/mame.ini
index 99812b94..f47c2062 100644
--- a/emu-configs/mame/mame.ini
+++ b/emu-configs/mame/mame.ini
@@ -7,31 +7,31 @@ writeconfig               0
 #
 # CORE SEARCH PATH OPTIONS
 #
-homepath                  /var/config/mame
-rompath                   RETRODECKROMSDIR
-hashpath                  /app/share/mame/hash
-samplepath                /app/share/mame/samples
-artpath                   RETRODECKHOMEDIR/downloaded_media/arcade/screenshots/
-ctrlrpath                 /app/share/mame/ctrlr
-inipath                   /var/config/mame
-fontpath                  /app/bin/
-cheatpath                 /app/share/mame/cheat
-crosshairpath             /app/share/mame/crosshair
-pluginspath               /app/share/mame/plugins
-languagepath              /app/share/mame/language
-swpath                    /app/share/mame/software
+homepath                  /var/data/mame/plugin-data
+rompath                   RETRODECKROMSDIR/mame/;RETRODECKROMSDIR/arcade/;RETRODECKROMSDIR/bbcmicro/
+hashpath                  /var/data/mame/hash
+samplepath                /var/data/mame/assets/samples
+artpath                   /var/data/mame/assets/artwork
+ctrlrpath                 /var/config/ctrlr
+inipath                   /var/config/mame/ini
+fontpath                  /var/data/mame/assets/fonts
+cheatpath                 /var/data/mame/cheat
+crosshairpath             /var/data/mame/assets/crosshair
+pluginspath               /var/data/mame/plugins
+languagepath              /var/data/mame/assets/language
+swpath                    /var/data/mame/assets/software
 
 #
 # CORE OUTPUT DIRECTORY OPTIONS
 #
 cfg_directory             /var/config/mame/cfg
-nvram_directory           /var/config/mame/nvram
+nvram_directory           RETRODECKSAVESDIR/mame-sa/nvram
 input_directory           /var/config/mame/inp
-state_directory           RETRODECKSAVESDIR/mame-sa/states
-snapshot_directory        RETRODECKHOMEDIR/screenshots
-diff_directory            /var/config/mame/diff
-comment_directory         /var/config/mame/comments
-share_directory           /var/config/mame/share
+state_directory           RETRODECKSTATESDIR/mame-sa
+snapshot_directory        RETRODECKHOMEDIR/screenshots/mame-sa
+diff_directory            RETRODECKSAVESDIR/mame-sa/diff
+comment_directory         /var/data/mame/assets/comments
+share_directory           /var/data/mame/assets/share
 
 #
 # CORE STATE/PLAYBACK OPTIONS
@@ -234,7 +234,7 @@ output                    auto
 keyboardprovider          auto
 mouseprovider             auto
 lightgunprovider          auto
-joystickprovider          auto
+joystickprovider          sdljoy
 
 #
 # OSD DEBUGGING OPTIONS
@@ -353,7 +353,7 @@ networkprovider           auto
 #
 # BGFX POST-PROCESSING OPTIONS
 #
-bgfx_path                 bgfx
+bgfx_path                 /app/share/mame/bgfx
 bgfx_backend              auto
 bgfx_debug                0
 bgfx_screen_chains        
diff --git a/emu-configs/mame/ui.ini b/emu-configs/mame/ui.ini
index 5955d68a..d616b1a4 100644
--- a/emu-configs/mame/ui.ini
+++ b/emu-configs/mame/ui.ini
@@ -1,26 +1,26 @@
 #
 # UI SEARCH PATH OPTIONS
 #
-historypath               history;dats;.
-categorypath              folders
-cabinets_directory        cabinets;cabdevs
-cpanels_directory         cpanel
-pcbs_directory            pcb
-flyers_directory          flyers
-titles_directory          titles
-ends_directory            ends
-marquees_directory        marquees;RETRODECKHOMEDIR/downloaded_media/arcade/marquees
-artwork_preview_directory "artwork preview;artpreview"
-bosses_directory          bosses
-logos_directory           logo
-scores_directory          scores
-versus_directory          versus
-gameover_directory        gameover
-howto_directory           howto
-select_directory          select
-icons_directory           icons
-covers_directory          covers;RETRODECKHOMEDIR/downloaded_media/arcade/covers
-ui_path                   ui
+historypath               /var/data/mame/dats
+categorypath              /var/data/mame/folders
+cabinets_directory        /var/data/mame/assets/cabinets
+cpanels_directory         /var/data/mame/assets/cpanel
+pcbs_directory            /var/data/mame/assets/pcb
+flyers_directory          /var/data/mame/assets/flyers
+titles_directory          /var/data/mame/assets/titles
+ends_directory            /var/data/mame/assets/ends
+marquees_directory        /var/data/mame/assets/marquees
+artwork_preview_directory /var/data/mame/assets/artwork-preview
+bosses_directory          /var/data/mame/assets/bosses
+logos_directory           /var/data/mame/assets/logo
+scores_directory          /var/data/mame/assets/scores
+versus_directory          /var/data/mame/assets/versus
+gameover_directory        /var/data/mame/assets/gameover
+howto_directory           /var/data/mame/assets/howto
+select_directory          /var/data/mame/assets/select
+icons_directory           /var/data/mame/assets/icons
+covers_directory          /var/data/mame/assets/covers
+ui_path                   /var/data/mame/assets/ui
 
 #
 # UI MISC OPTIONS
@@ -62,7 +62,7 @@ remember_last             0
 last_used_filter          Available
 system_right_panel        image
 software_right_panel      image
-system_right_image        cover
+system_right_image        snap
 software_right_image      snap
 enlarge_snaps             1
 forced4x3                 1
diff --git a/functions/checks.sh b/functions/checks.sh
index bb93b322..7b76d82f 100644
--- a/functions/checks.sh
+++ b/functions/checks.sh
@@ -59,6 +59,7 @@ check_for_version_update() {
         #   configurator_generic_dialog "RetroDECK Online Update" "The update process is now complete!\n\nPlease restart RetroDECK to keep the fun going."
         #   exit 1
         # fi
+        # TODO: add the logic to check and update the branch from the configuration file
         choice=$(zenity --icon-name=net.retrodeck.retrodeck --info --no-wrap --ok-label="OK" --extra-button="Ignore this version" \
         --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
         --title "RetroDECK Update Available" \
diff --git a/functions/functions.sh b/functions/functions.sh
index b5bf389d..6ac742f3 100644
--- a/functions/functions.sh
+++ b/functions/functions.sh
@@ -562,6 +562,66 @@ easter_eggs() {
   cp -f "$new_splash_file" "$current_splash_file" # Deploy assigned splash screen
 }
 
+# TODO: this function is not yet used
+branch_selector() {
+    # Fetch branches from GitHub API excluding "main"
+    branches=$(curl -s https://api.github.com/repos/XargonWan/RetroDECK/branches | grep '"name":' | awk -F '"' '$4 != "main" {print $4}')
+    # TODO: logging - Fetching branches from GitHub API
+
+    # Create an array to store branch names
+    branch_array=()
+
+    # Loop through each branch and add it to the array
+    while IFS= read -r branch; do
+        branch_array+=("$branch")
+    done <<< "$branches"
+    # TODO: logging - Creating array of branch names
+
+    # Display branches in a Zenity list dialog
+    selected_branch=$(
+      zenity --list \
+        --icon-name=net.retrodeck.retrodeck \
+        --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
+        --title "RetroDECK Configurator Cooker Branch - Select Branch" \
+        --column="Branch" --width=1280 --height=800 "${branch_array[@]}"
+    )
+    # TODO: logging - Displaying branches in Zenity list dialog
+
+    # Display warning message
+    if [ $selected_branch ]; then
+        zenity --question --icon-name=net.retrodeck.retrodeck --no-wrap \
+          --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
+          --title "RetroDECK Configurator Cooker Branch - Switch Branch" \
+          --text="Are you sure you want to move to \"$selected_branch\" branch?"
+        # Output selected branch
+        echo "Selected branch: $selected_branch" # TODO: logging - Outputting selected branch
+        set_setting_value "$rd_conf" "branch" "$selected_branch" "retrodeck" "options"
+        branch="feat/sftp"
+        # Get the latest release for the specified branch
+        latest_release=$(curl -s "https://api.github.com/repos/XargonWan/RetroDECK-cooker/releases" | jq ".[] | select(.target_commitish == \"$branch_name\") | .tag_name" | head -n 1)
+        # TODO: this will fail because the builds coming from the PRs are not published yet, we should fix them
+        # TODO: form a proper url: $flatpak_file_url
+        configurator_generic_dialog "RetroDECK Online Update" "The update process may take several minutes.\n\nAfter the update is complete, RetroDECK will close. When you run it again you will be using the latest version."
+          (
+          local desired_flatpak_file=$(curl --silent $flatpak_file_url | grep '"browser_download_url":' | sed -E 's/.*"([^"]+)".*/\1/')
+          mkdir -p "$rdhome/RetroDECK_Updates"
+          wget -P "$rdhome/RetroDECK_Updates" $desired_flatpak_file
+          flatpak-spawn --host flatpak remove --noninteractive -y net.retrodeck.retrodeck # Remove current version before installing new one, to avoid duplicates
+          flatpak-spawn --host flatpak install --user --bundle --noninteractive -y "$rdhome/RetroDECK_Updates/RetroDECK-cooker.flatpak"
+          rm -rf "$rdhome/RetroDECK_Updates" # Cleanup old bundles to save space
+          ) |
+          zenity --icon-name=net.retrodeck.retrodeck --progress --no-cancel --pulsate --auto-close \
+          --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
+          --title "RetroDECK Updater" \
+          --text="RetroDECK is updating to the latest \"$selected_branch\" version, please wait."
+          configurator_generic_dialog "RetroDECK Online Update" "The update process is now complete!\n\nPlease restart RetroDECK to keep the fun going."
+          exit 1
+    else
+        configurator_generic_dialog "No branch selected, exiting."
+        # TODO: logging
+    fi
+}
+
 quit_retrodeck() {
   pkill -f retrodeck
   pkill -f es-de
diff --git a/functions/prepare_component.sh b/functions/prepare_component.sh
index e09258d2..95b1d0ac 100644
--- a/functions/prepare_component.sh
+++ b/functions/prepare_component.sh
@@ -712,11 +712,11 @@ prepare_component() {
     mkdir -p $saves_folder/mame-sa
     mkdir -p "/var/config/mame"
     dir_prep "$saves_folder/mame-sa/hiscore" "/var/config/mame/hiscore"
-    cp -fvr "$emuconfigs/mame/**" "/var/config/mame"
+    cp -fvr "$emuconfigs/mame/"** "/var/config/mame"
     sed -i 's#RETRODECKROMSDIR#'$roms_folder'#g' "/var/config/mame/*.ini"
     sed -i 's#RETRODECKHOMESDIR#'$rdhome'#g' "/var/config/mame/*.ini"
     sed -i 's#RETRODECKSAVESDIR#'$rdhome'#g' "/var/config/mame/*.ini"
-
+    sed -i 's#RETRODECKSTATESDIR#'$rdhome'#g' "/var/config/mame/*.ini"
   fi
 
   if [[ "$component" =~ ^(gzdoom|GZDOOM|all)$ ]]; then
diff --git a/res/binding_icons/rd-pc-call.png b/res/binding_icons/rd-pc-call.png
new file mode 100644
index 00000000..66e10697
Binary files /dev/null and b/res/binding_icons/rd-pc-call.png differ
diff --git a/res/binding_icons/rd-pc-close.png b/res/binding_icons/rd-pc-close.png
new file mode 100644
index 00000000..10582266
Binary files /dev/null and b/res/binding_icons/rd-pc-close.png differ
diff --git a/res/binding_icons/rd-pc-fight.png b/res/binding_icons/rd-pc-fight.png
new file mode 100644
index 00000000..4b5e5c78
Binary files /dev/null and b/res/binding_icons/rd-pc-fight.png differ
diff --git a/res/binding_icons/rd-pc-give.png b/res/binding_icons/rd-pc-give.png
new file mode 100644
index 00000000..a9f327c4
Binary files /dev/null and b/res/binding_icons/rd-pc-give.png differ
diff --git a/res/binding_icons/rd-pc-look.png b/res/binding_icons/rd-pc-look.png
new file mode 100644
index 00000000..fa94baee
Binary files /dev/null and b/res/binding_icons/rd-pc-look.png differ
diff --git a/res/binding_icons/rd-pc-move.png b/res/binding_icons/rd-pc-move.png
new file mode 100644
index 00000000..8a9635b9
Binary files /dev/null and b/res/binding_icons/rd-pc-move.png differ
diff --git a/res/binding_icons/rd-pc-open.png b/res/binding_icons/rd-pc-open.png
new file mode 100644
index 00000000..c5db7d36
Binary files /dev/null and b/res/binding_icons/rd-pc-open.png differ
diff --git a/res/binding_icons/rd-pc-pickup.png b/res/binding_icons/rd-pc-pickup.png
new file mode 100644
index 00000000..74192543
Binary files /dev/null and b/res/binding_icons/rd-pc-pickup.png differ
diff --git a/res/binding_icons/rd-pc-pull.png b/res/binding_icons/rd-pc-pull.png
new file mode 100644
index 00000000..892d0748
Binary files /dev/null and b/res/binding_icons/rd-pc-pull.png differ
diff --git a/res/binding_icons/rd-pc-push.png b/res/binding_icons/rd-pc-push.png
new file mode 100644
index 00000000..1eec6137
Binary files /dev/null and b/res/binding_icons/rd-pc-push.png differ
diff --git a/res/binding_icons/rd-pc-read.png b/res/binding_icons/rd-pc-read.png
new file mode 100644
index 00000000..d9880d85
Binary files /dev/null and b/res/binding_icons/rd-pc-read.png differ
diff --git a/res/binding_icons/rd-pc-talk.png b/res/binding_icons/rd-pc-talk.png
new file mode 100644
index 00000000..7894fc6b
Binary files /dev/null and b/res/binding_icons/rd-pc-talk.png differ
diff --git a/res/binding_icons/rd-pc-use.png b/res/binding_icons/rd-pc-use.png
new file mode 100644
index 00000000..3234426b
Binary files /dev/null and b/res/binding_icons/rd-pc-use.png differ