diff --git a/functions/global.sh b/functions/global.sh
index 9bfa04e8..954acdda 100644
--- a/functions/global.sh
+++ b/functions/global.sh
@@ -103,6 +103,11 @@ primehackqtconf="/var/config/primehack/Qt.ini"
 rpcs3conf="/var/config/rpcs3/config.yml"
 rpcs3vfsconf="/var/config/rpcs3/vfs.yml"
 
+# Vita3k config files
+
+vita3kconf="/var/data/Vita3K/config.yml"
+vita3kusrconfdir="$bios_folder/Vita3K/Vita3K"
+
 # We moved the lockfile in /var/config/retrodeck in order to solve issue #53 - Remove in a few versions
 if [ -f "$HOME/retrodeck/.lock" ]
 then
diff --git a/functions/patching.sh b/functions/patching.sh
index 0ed8a7b2..c732163c 100644
--- a/functions/patching.sh
+++ b/functions/patching.sh
@@ -37,7 +37,7 @@ set_setting_value() {
       fi
       ;;
 
-    "rpcs3" ) # This does not currently work for settings with a $ in them
+    "rpcs3" | "vita3k" ) # This does not currently work for settings with a $ in them
       if [[ -z $current_section_name ]]; then
         sed -i 's^\^'"$setting_name_to_change"': .*^'"$setting_name_to_change"': '"$setting_value_to_change"'^' "$1"
       else
@@ -72,7 +72,7 @@ get_setting_name() {
     echo ''"$current_setting_line"'' | grep -o -P '(?<=name\=\").*(?=\" value)'
     ;;
 
-  "rpcs3" )
+  "rpcs3" | "vita3k" )
     echo "$current_setting_line" | grep -o -P "^\s*?.*?(?=\s?:\s?)" | sed -e 's/^[ \t]*//;s^\\ ^ ^g'
     ;;
 
@@ -116,7 +116,7 @@ get_setting_value() {
     fi
   ;;
 
-  "rpcs3" ) # For files with this syntax - setting_name: setting_value
+  "rpcs3" | "vita3k" ) # For files with this syntax - setting_name: setting_value
     if [[ -z $current_section_name ]]; then
       echo $(grep -o -P "(?<=$current_setting_name: ).*" "$1")
     else
diff --git a/functions/prepare_emulator.sh b/functions/prepare_emulator.sh
index 5d0bc692..82eb252d 100644
--- a/functions/prepare_emulator.sh
+++ b/functions/prepare_emulator.sh
@@ -668,22 +668,25 @@ prepare_emulator() {
   fi
 
   if [[ "$emulator" =~ ^(vita3k|Vita3K|all)$ ]]; then
-    # TODO: do a proper script
-    # This is just a placeholder script to test the emulator's flow
+    if [[ "$action" == "reset" ]]; then # Run reset-only commands
     echo "----------------------"
     echo "Initializing Vita3K"
     echo "----------------------"
-
-    # copying config file
-    cp -fvr "$emuconfigs/vita3k/config.yml" "/var/config/Vita3K"
-    # TODO: this step is to be done properly: Replacing RETRODECKHOMEDIR placeholder
-    sed -i 's#RETRODECKHOMEDIR#'$rdhome'#g' "/var/config/Vita3K/config.yml"
-
-    # copying vita user config
-    cp -fvr "$emuconfigs/vita3k/ux0" "$bios_folder/Vita3K/Vita3K"
-
-    # prep saves folder
-    dir_prep "$saves_folder/psvita/vita3k" "$bios_folder/Vita3K/Vita3K/ux0/user/00/savedata"
+    if [[ $multi_user_mode == "true" ]]; then # Multi-user actions
+      echo "Figure out what Vita3k needs for multi-user"
+    else # Single-user actions
+      # NOTE: the emulator is writing in "." so it must be placed in the rw filesystem. A symlink of the binary is already placed in /app/bin/Vita3K
+      rm -rf "/var/data/Vita3K"
+      mkdir -p "/var/data/Vita3K"
+      unzip "/app/retrodeck/vita3k.zip" -d "/var/data/Vita3K"
+      chmod +x "/var/data/Vita3K/Vita3K"
+      rm -f "/var/data/Vita3K/update-vita3k.sh"
+      cp -fvr "$emuconfigs/vita3k/config.yml" "/var/data/Vita3K" # Emulator config
+      cp -fvr "$emuconfigs/vita3k/ux0" "$bios_folder/Vita3K/Vita3K" # User config
+      set_setting_value "$vita3kconf" "pref-path" "$rdhome/bios/Vita3K/Vita3K/" "vita3k"
+    fi
+    # Shared actions
+    dir_prep "$saves_folder/psvita/vita3k" "$bios_folder/Vita3K/Vita3K/ux0/user/00/savedata" # Multi-user safe?
 
     # Installing firmware
     # TODO: at the moment this is here instead of a tool because it seems like it cannot run without Firmware
@@ -691,7 +694,10 @@ prepare_emulator() {
     curl "http://dus01.psp2.update.playstation.net/update/psp2/image/2019_0924/sd_8b5f60b56c3da8365b973dba570c53a5/PSP2UPDAT.PUP?dest=us" -po /tmp/PSP2UPDAT.PUP
     Vita3K --firmware /tmp/PSVUPDAT.PUP
     Vita3K --firmware /tmp/PSP2UPDAT.PUP
-
+    if [[ "$action" == "postmove" ]]; then # Run only post-move commands
+      dir_prep "$saves_folder/psvita/vita3k" "$bios_folder/Vita3K/Vita3K/ux0/user/00/savedata" # Multi-user safe?
+      set_setting_value "$vita3kconf" "pref-path" "$rdhome/bios/Vita3K/Vita3K/" "vita3k"
+    fi
   fi
 
   if [[ "$emulator" =~ ^(mame|MAME|all)$ ]]; then
diff --git a/tools/configurator.sh b/tools/configurator.sh
index 2a28ee33..81e2b8e6 100644
--- a/tools/configurator.sh
+++ b/tools/configurator.sh
@@ -79,6 +79,7 @@ source /app/libexec/global.sh
 #           - Reset Primehack
 #           - Reset RPCS3
 #           - Reset Ryujinx
+#           - Reset Vita3k
 #           - Reset XEMU
 #           - Reset Yuzu
 #         - Reset All Emulators
@@ -1009,17 +1010,23 @@ configurator_reset_dialog() {
     "Primehack" "Reset the Metroid Prime emulator Primehack to default settings" \
     "RPCS3" "Reset the PS3 emulator RPCS3 to default settings" \
     "Ryujinx" "Reset the Switch emulator Ryujinx to default settings" \
+    "Vita3k" "Reset the PS Vita emulator Vita3k to default settings" \
     "XEMU" "Reset the XBOX emulator XEMU to default settings" \
     "Yuzu" "Reset the Switch emulator Yuzu to default settings" )
 
     case $emulator_to_reset in
 
-    "RetroArch" | "XEMU" ) # Emulators that require network access
-      if [[ $(configurator_reset_confirmation_dialog "$emulator_to_reset" "Are you sure you want to reset the $emulator_to_reset emulator to default settings?\n\nThis process cannot be undone.") == "true" ]]; then
-        prepare_emulator "reset" "$emulator_to_reset" "configurator"
-        configurator_process_complete_dialog "resetting $emulator_to_reset"
+    "RetroArch" | "Vita3k" | "XEMU" ) # Emulators that require network access
+      if [[ $(check_network_connectivity) == "true" ]]; then
+        if [[ $(configurator_reset_confirmation_dialog "$emulator_to_reset" "Are you sure you want to reset the $emulator_to_reset emulator to default settings?\n\nThis process cannot be undone.") == "true" ]]; then
+          prepare_emulator "reset" "$emulator_to_reset" "configurator"
+          configurator_process_complete_dialog "resetting $emulator_to_reset"
+        else
+          configurator_generic_dialog "RetroDeck Configurator - RetroDECK: Reset" "Reset process cancelled."
+          configurator_reset_dialog
+        fi
       else
-        configurator_generic_dialog "RetroDeck Configurator - RetroDECK: Reset" "Reset process cancelled."
+        configurator_generic_dialog "RetroDeck Configurator - RetroDECK: Reset" "Resetting this emulator requires active network access.\nPlease try again when you are connected to an Internet-capable network.\n\nReset process cancelled."
         configurator_reset_dialog
       fi
     ;;
@@ -1042,17 +1049,22 @@ configurator_reset_dialog() {
   ;;
 
 "Reset All Emulators" )
-  if [[ $(configurator_reset_confirmation_dialog "all emulators" "Are you sure you want to reset all emulators to default settings?\n\nThis process cannot be undone.") == "true" ]]; then
-    (
-    prepare_emulator "reset" "all"
-    ) |
-    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 Finishing Initialization" \
-    --text="RetroDECK is finishing the reset process, please wait."
-    configurator_process_complete_dialog "resetting all emulators"
+  if [[ $(check_network_connectivity) == "true" ]]; then
+    if [[ $(configurator_reset_confirmation_dialog "all emulators" "Are you sure you want to reset all emulators to default settings?\n\nThis process cannot be undone.") == "true" ]]; then
+      (
+      prepare_emulator "reset" "all"
+      ) |
+      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 Finishing Initialization" \
+      --text="RetroDECK is finishing the reset process, please wait."
+      configurator_process_complete_dialog "resetting all emulators"
+    else
+      configurator_generic_dialog "RetroDeck Configurator - RetroDECK: Reset" "Reset process cancelled."
+      configurator_reset_dialog
+    fi
   else
-    configurator_generic_dialog "RetroDeck Configurator - RetroDECK: Reset" "Reset process cancelled."
+    configurator_generic_dialog "RetroDeck Configurator - RetroDECK: Reset" "Resetting all emulators requires active network access.\nPlease try again when you are connected to an Internet-capable network.\n\nReset process cancelled."
     configurator_reset_dialog
   fi
 ;;