diff --git a/src/core/file_sys/program_metadata.cpp b/src/core/file_sys/program_metadata.cpp
index f00479bd3..8e291ff67 100644
--- a/src/core/file_sys/program_metadata.cpp
+++ b/src/core/file_sys/program_metadata.cpp
@@ -5,6 +5,7 @@
 #include <vector>
 
 #include "common/logging/log.h"
+#include "common/scope_exit.h"
 #include "core/file_sys/program_metadata.h"
 #include "core/file_sys/vfs.h"
 #include "core/loader/loader.h"
@@ -95,6 +96,13 @@ Loader::ResultStatus ProgramMetadata::Load(VirtualFile file) {
     return Loader::ResultStatus::Success;
 }
 
+Loader::ResultStatus ProgramMetadata::Reload(VirtualFile file) {
+    const u64 original_program_id = aci_header.title_id;
+    SCOPE_EXIT({ aci_header.title_id = original_program_id; });
+
+    return this->Load(file);
+}
+
 /*static*/ ProgramMetadata ProgramMetadata::GetDefault() {
     // Allow use of cores 0~3 and thread priorities 1~63.
     constexpr u32 default_thread_info_capability = 0x30007F7;
diff --git a/src/core/file_sys/program_metadata.h b/src/core/file_sys/program_metadata.h
index 2e8960b07..9f8e74b13 100644
--- a/src/core/file_sys/program_metadata.h
+++ b/src/core/file_sys/program_metadata.h
@@ -56,6 +56,7 @@ public:
     static ProgramMetadata GetDefault();
 
     Loader::ResultStatus Load(VirtualFile file);
+    Loader::ResultStatus Reload(VirtualFile file);
 
     /// Load from parameters instead of NPDM file, used for KIP
     void LoadManual(bool is_64_bit, ProgramAddressSpaceType address_space, s32 main_thread_prio,
diff --git a/src/core/loader/deconstructed_rom_directory.cpp b/src/core/loader/deconstructed_rom_directory.cpp
index 5a42dea48..5c36b71e5 100644
--- a/src/core/loader/deconstructed_rom_directory.cpp
+++ b/src/core/loader/deconstructed_rom_directory.cpp
@@ -118,7 +118,7 @@ AppLoader_DeconstructedRomDirectory::LoadResult AppLoader_DeconstructedRomDirect
         return {ResultStatus::ErrorMissingNPDM, {}};
     }
 
-    const ResultStatus result2 = metadata.Load(npdm);
+    const ResultStatus result2 = metadata.Reload(npdm);
     if (result2 != ResultStatus::Success) {
         return {result2, {}};
     }