diff --git a/src/core/core.cpp b/src/core/core.cpp
index 92ba42fb9c1576cbbba6765d162b9f1f136a2a4d..75a7ffb9737ae0102dab17d299e32a2690882dfb 100644
--- a/src/core/core.cpp
+++ b/src/core/core.cpp
@@ -339,6 +339,7 @@ struct System::Impl {
 
     std::unique_ptr<Memory::CheatEngine> cheat_engine;
     std::unique_ptr<Tools::Freezer> memory_freezer;
+    std::array<u8, 0x20> build_id{};
 
     /// Frontend applets
     Service::AM::Applets::AppletManager applet_manager;
@@ -640,6 +641,14 @@ bool System::GetExitLock() const {
     return impl->exit_lock;
 }
 
+void System::SetCurrentProcessBuildID(std::array<u8, 32> id) {
+    impl->build_id = id;
+}
+
+const std::array<u8, 32>& System::GetCurrentProcessBuildID() const {
+    return impl->build_id;
+}
+
 System::ResultStatus System::Init(Frontend::EmuWindow& emu_window) {
     return impl->Init(*this, emu_window);
 }
diff --git a/src/core/core.h b/src/core/core.h
index ff10ebe12bcbd1e0fd200e9d44e44d60baf817a7..f49b7fbf9f4fe993622a6bb631af8a6e79b4292b 100644
--- a/src/core/core.h
+++ b/src/core/core.h
@@ -330,6 +330,10 @@ public:
 
     bool GetExitLock() const;
 
+    void SetCurrentProcessBuildID(std::array<u8, 0x20> id);
+
+    const std::array<u8, 0x20>& GetCurrentProcessBuildID() const;
+
 private:
     System();
 
diff --git a/src/core/loader/nso.cpp b/src/core/loader/nso.cpp
index e75c700ad1125c0f2f5740c1a0976d2f2a0ec0b8..f629892aeaad7e7bc5944d9d792bdcec100adc44 100644
--- a/src/core/loader/nso.cpp
+++ b/src/core/loader/nso.cpp
@@ -150,6 +150,7 @@ std::optional<VAddr> AppLoader_NSO::LoadModule(Kernel::Process& process,
     // Apply cheats if they exist and the program has a valid title ID
     if (pm) {
         auto& system = Core::System::GetInstance();
+        system.SetCurrentProcessBuildID(nso_header.build_id);
         const auto cheats = pm->CreateCheatList(system, nso_header.build_id);
         if (!cheats.empty()) {
             system.RegisterCheatList(cheats, nso_header.build_id, load_base, image_size);