diff --git a/r5dev/gameui/IBrowser.cpp b/r5dev/gameui/IBrowser.cpp
index 2620d3eb..971f6972 100644
--- a/r5dev/gameui/IBrowser.cpp
+++ b/r5dev/gameui/IBrowser.cpp
@@ -43,9 +43,6 @@ CBrowser::CBrowser(void)
 {
     memset(m_szServerAddressBuffer, '\0', sizeof(m_szServerAddressBuffer));
 
-    std::thread refresh(&CBrowser::RefreshServerList, this);
-    refresh.detach();
-
     m_pszBrowserTitle = "Server Browser";
     m_rLockedIconBlob = GetModuleResource(IDB_PNG2);
 }
@@ -136,6 +133,21 @@ void CBrowser::RunTask()
         UpdateHostingStatus();
         timer.Start();
     }
+
+    if (m_bActivate)
+    {
+        if (m_bQueryListNonRecursive)
+        {
+            std::thread refresh(&CBrowser::RefreshServerList, g_pBrowser);
+            refresh.detach();
+
+            m_bQueryListNonRecursive = false;
+        }
+    }
+    else // Refresh server list the next time 'm_bActivate' evaluates to true.
+    {
+        m_bQueryListNonRecursive = true;
+    }
 }
 
 //-----------------------------------------------------------------------------
diff --git a/r5dev/gameui/IBrowser.h b/r5dev/gameui/IBrowser.h
index b906a243..917c3de8 100644
--- a/r5dev/gameui/IBrowser.h
+++ b/r5dev/gameui/IBrowser.h
@@ -42,6 +42,7 @@ public:
 
 private:
     bool m_bInitialized  = false;
+    bool m_bQueryListNonRecursive = false; // When set, refreshes the server list once the next frame.
     char m_szServerAddressBuffer[256] = { '\0' };
     char m_szServerEncKeyBuffer[30]   = { '\0' };
     float m_flFadeAlpha               = 0.f;