diff --git a/src/core/hle/service/cfg/cfg.cpp b/src/core/hle/service/cfg/cfg.cpp
index e7b7c4476..d37fbb242 100644
--- a/src/core/hle/service/cfg/cfg.cpp
+++ b/src/core/hle/service/cfg/cfg.cpp
@@ -40,6 +40,7 @@ void Module::serialize(Archive& ar, const unsigned int) {
     ar& cfg_config_file_buffer;
     ar& cfg_system_save_data_archive;
     ar& preferred_region_code;
+    ar& preferred_region_chosen;
 }
 SERIALIZE_IMPL(Module)
 
@@ -656,9 +657,10 @@ static std::tuple<u32 /*region*/, SystemLanguage> AdjustLanguageInfoBlock(
 }
 
 void Module::UpdatePreferredRegionCode() {
-    if (!system.IsPoweredOn()) {
+    if (preferred_region_chosen || !system.IsPoweredOn()) {
         return;
     }
+    preferred_region_chosen = true;
 
     const auto preferred_regions = system.GetAppLoader().GetPreferredRegions();
     if (preferred_regions.empty()) {
diff --git a/src/core/hle/service/cfg/cfg.h b/src/core/hle/service/cfg/cfg.h
index 4ac9b3e14..16edf7746 100644
--- a/src/core/hle/service/cfg/cfg.h
+++ b/src/core/hle/service/cfg/cfg.h
@@ -591,6 +591,7 @@ private:
     std::array<u8, CONFIG_SAVEFILE_SIZE> cfg_config_file_buffer;
     std::unique_ptr<FileSys::ArchiveBackend> cfg_system_save_data_archive;
     u32 preferred_region_code = 0;
+    bool preferred_region_chosen = false;
     MCUData mcu_data{};
 
     template <class Archive>