diff --git a/indra/newview/llenvironment.cpp b/indra/newview/llenvironment.cpp
index 7cd9503e4d992dfe6e9b614329ceac7583442453..0e1c4f943468441151193def0616499d121d1831 100644
--- a/indra/newview/llenvironment.cpp
+++ b/indra/newview/llenvironment.cpp
@@ -851,8 +851,6 @@ void LLEnvironment::initSingleton()
     }
 
     LLEventPumps::instance().obtain(PUMP_EXPERIENCE).listen(LISTENER_NAME, [this](LLSD message) { listenExperiencePump(message); return false; });
-
-    loadFromSettings();
 }
 
 void LLEnvironment::cleanupSingleton()
diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp
index 8093a3a589e244d3d29a1d69fcafcf1d52222e34..a1d1e85492b167f92f1a4b2345e73935af26fd59 100644
--- a/indra/newview/llstartup.cpp
+++ b/indra/newview/llstartup.cpp
@@ -1878,7 +1878,11 @@ bool idle_startup()
 		}
 
 		display_startup();
-        
+
+        // Load stored local environment if needed. Only should be done once at least
+        // initial region data got loaded to avoid race condition with region's environment
+        LLEnvironment::instance().loadFromSettings();
+
         // *TODO : Uncomment that line once the whole grid migrated to SLM and suppress it from LLAgent::handleTeleportFinished() (llagent.cpp)
         //check_merchant_status();