diff --git a/r5dev/common/global.cpp b/r5dev/common/global.cpp
index d8f72b7e..6a5c48fc 100644
--- a/r5dev/common/global.cpp
+++ b/r5dev/common/global.cpp
@@ -202,7 +202,6 @@ ConVar* con_max_history                    = nullptr;
 ConVar* con_suggestion_limit               = nullptr;
 ConVar* con_suggestion_showhelptext        = nullptr;
 ConVar* con_suggestion_showflags           = nullptr;
-ConVar* con_suggestion_flags_realtime      = nullptr;
 
 ConVar* origin_disconnectWhenOffline       = nullptr;
 
@@ -394,7 +393,6 @@ void ConVar_StaticInit(void)
 	con_suggestion_limit          = ConVar::StaticCreate("con_suggestion_limit"         , "128" , FCVAR_DEVELOPMENTONLY, "Maximum number of suggestions the autocomplete window will show for the console.", true, 0.f, false, 0.f, nullptr, nullptr);
 	con_suggestion_showhelptext   = ConVar::StaticCreate("con_suggestion_showhelptext"  , "1"   , FCVAR_DEVELOPMENTONLY, "Show CommandBase help text in autocomplete window.", false, 0.f, false, 0.f, nullptr, nullptr);
 	con_suggestion_showflags      = ConVar::StaticCreate("con_suggestion_showflags"     , "1"   , FCVAR_DEVELOPMENTONLY, "Show CommandBase flags in autocomplete window.", false, 0.f, false, 0.f, nullptr, nullptr);
-	con_suggestion_flags_realtime = ConVar::StaticCreate("con_suggestion_flags_realtime", "1"   , FCVAR_DEVELOPMENTONLY, "Whether to show compile-time or run-time CommandBase flags.", false, 0.f, false, 0.f, nullptr, nullptr);
 
 	serverbrowser_hideEmptyServers = ConVar::StaticCreate("serverbrowser_hideEmptyServers", "0", FCVAR_RELEASE, "Hide empty servers in the server browser", false, 0.f, false, 0.f, nullptr, nullptr);
 	serverbrowser_mapFilter        = ConVar::StaticCreate("serverbrowser_mapFilter", "0", FCVAR_RELEASE, "Filter servers by map in the server browser", false, 0.f, false, 0.f, nullptr, nullptr);
diff --git a/r5dev/common/global.h b/r5dev/common/global.h
index c61f16da..401544e8 100644
--- a/r5dev/common/global.h
+++ b/r5dev/common/global.h
@@ -192,7 +192,6 @@ extern ConVar* con_max_history;
 extern ConVar* con_suggestion_limit;
 extern ConVar* con_suggestion_showhelptext;
 extern ConVar* con_suggestion_showflags;
-extern ConVar* con_suggestion_flags_realtime;
 
 extern ConVar* origin_disconnectWhenOffline;
 #endif // !DEDICATED
diff --git a/r5dev/engine/sys_dll.cpp b/r5dev/engine/sys_dll.cpp
index f1194bc8..0a87ef71 100644
--- a/r5dev/engine/sys_dll.cpp
+++ b/r5dev/engine/sys_dll.cpp
@@ -126,12 +126,6 @@ bool CModAppSystemGroup::StaticCreate(CModAppSystemGroup* pModAppSystemGroup)
 	g_pEngineTraceClient = g_pFactory->GetFactoryPtr(INTERFACEVERSION_ENGINETRACE_CLIENT, false).RCast<CEngineTraceClient*>();
 
 	g_pImGuiConfig->Load(); // Load ImGui configs.
-	for (auto& map : g_pCVar->DumpToMap())
-	{
-		g_pConsole->m_vsvCommandBases.push_back(
-			CSuggest(map.first, map.second->GetFlags()));
-	}
-
 	DirectX_Init();
 
 #endif // !DEDICATED
diff --git a/r5dev/gameui/IConsole.cpp b/r5dev/gameui/IConsole.cpp
index 4799e79b..74669c8c 100644
--- a/r5dev/gameui/IConsole.cpp
+++ b/r5dev/gameui/IConsole.cpp
@@ -587,27 +587,30 @@ void CConsole::FindFromPartial(void)
     ClearAutoComplete();
     m_bCanAutoComplete = false;
 
-    for (const CSuggest& suggest : m_vsvCommandBases)
+    ICvar::Iterator iter(g_pCVar);
+    for (iter.SetFirst(); iter.IsValid(); iter.Next())
     {
         if (m_vSuggest.size() >= size_t(con_suggestion_limit->GetInt()))
         {
-            return;
+            break;
         }
-        if (!HasPartial(suggest.m_svName, m_szInputBuf))
+
+        const ConCommandBase* pCommandBase = iter.Get();
+        if (pCommandBase->IsFlagSet(FCVAR_HIDDEN))
+        {
+            continue;
+        }
+
+        const char* pCommandName = pCommandBase->GetName();
+        if (!V_stristr(pCommandName, m_szInputBuf))
         {
             continue;
         }
 
         if (std::find(m_vSuggest.begin(), m_vSuggest.end(),
-            suggest.m_svName) == m_vSuggest.end())
+            pCommandName) == m_vSuggest.end())
         {
-            string svValue; int nFlags = FCVAR_NONE;
-            const ConCommandBase* pCommandBase = g_pCVar->FindCommandBase(suggest.m_svName.c_str());
-
-            if (!pCommandBase || pCommandBase->IsFlagSet(FCVAR_HIDDEN))
-            {
-                continue;
-            }
+            string svValue;
 
             if (!pCommandBase->IsCommand())
             {
@@ -636,18 +639,7 @@ void CConsole::FindFromPartial(void)
                     }
                 }
             }
-            if (con_suggestion_showflags->GetBool())
-            {
-                if (con_suggestion_flags_realtime->GetBool())
-                {
-                    nFlags = pCommandBase->GetFlags();
-                }
-                else // Display compile-time flags instead.
-                {
-                    nFlags = suggest.m_nFlags;
-                }
-            }
-            m_vSuggest.push_back(CSuggest(suggest.m_svName + svValue, nFlags));
+            m_vSuggest.push_back(CSuggest(pCommandName + svValue, pCommandBase->GetFlags()));
         }
         else { break; }
     }
diff --git a/r5dev/gameui/IConsole.h b/r5dev/gameui/IConsole.h
index 5d3d4306..e48dba35 100644
--- a/r5dev/gameui/IConsole.h
+++ b/r5dev/gameui/IConsole.h
@@ -106,7 +106,6 @@ private:
 
 public:
     bool             m_bActivate = false;
-    vector<CSuggest> m_vsvCommandBases;
 };
 
 ///////////////////////////////////////////////////////////////////////////////
diff --git a/r5dev/public/icvar.h b/r5dev/public/icvar.h
index 40483c78..76b1bd23 100644
--- a/r5dev/public/icvar.h
+++ b/r5dev/public/icvar.h
@@ -108,7 +108,40 @@ public:
 	virtual bool			HasQueuedMaterialThreadConVarSets() const = 0;
 	virtual int				ProcessQueuedMaterialThreadConVarSets() = 0;
 
+protected:	class ICVarIteratorInternal;
+public:
+	/// Iteration over all cvars. 
+	/// (THIS IS A SLOW OPERATION AND YOU SHOULD AVOID IT.)
+	/// usage: 
+	/// { ICVar::Iterator iter(g_pCVar); 
+	///   for ( iter.SetFirst() ; iter.IsValid() ; iter.Next() )
+	///   {  
+	///       ConCommandBase *cmd = iter.Get();
+	///   } 
+	/// }
+	/// The Iterator class actually wraps the internal factory methods
+	/// so you don't need to worry about new/delete -- scope takes care
+	//  of it.
+	/// We need an iterator like this because we can't simply return a 
+	/// pointer to the internal data type that contains the cvars -- 
+	/// it's a custom, protected class with unusual semantics and is
+	/// prone to change.
+	class Iterator
+	{
+	public:
+		inline void            SetFirst(void) RESTRICT;
+		inline void            Next(void) RESTRICT;
+		inline bool            IsValid(void) RESTRICT;
+		inline ConCommandBase* Get(void) RESTRICT;
+
+		inline                 Iterator(ICvar* icvar);
+		inline                 ~Iterator(void);
+	private:
+		ICVarIteratorInternal* m_pIter;
+	};
+
 protected:
+	// internals for ICVarIterator
 	class ICVarIteratorInternal
 	{
 	public:
@@ -123,4 +156,34 @@ protected:
 	virtual ICVarIteratorInternal* FactoryInternalIterator(void) = 0;
 };
 
+inline void ICvar::Iterator::SetFirst(void) RESTRICT
+{
+	m_pIter->SetFirst();
+}
+
+inline void ICvar::Iterator::Next(void) RESTRICT
+{
+	m_pIter->Next();
+}
+
+inline bool ICvar::Iterator::IsValid(void) RESTRICT
+{
+	return m_pIter->IsValid();
+}
+
+inline ConCommandBase* ICvar::Iterator::Get(void) RESTRICT
+{
+	return m_pIter->Get();
+}
+
+inline ICvar::Iterator::Iterator(ICvar* icvar)
+{
+	m_pIter = icvar->FactoryInternalIterator();
+}
+
+inline ICvar::Iterator::~Iterator(void)
+{
+	delete m_pIter;
+}
+
 #endif // ICVAR_H
diff --git a/r5dev/public/tier1/cvar.h b/r5dev/public/tier1/cvar.h
index 1e488a1e..79a05bf1 100644
--- a/r5dev/public/tier1/cvar.h
+++ b/r5dev/public/tier1/cvar.h
@@ -66,9 +66,6 @@ extern CCvarUtilities* cv;
 
 class CCvar : public CBaseAppSystem< ICvar >
 { 	// Implementation in engine.
-public:
-	unordered_map<string, ConCommandBase*> DumpToMap(void);
-
 protected:
 	enum ConVarSetType_t
 	{
diff --git a/r5dev/tier1/cvar.cpp b/r5dev/tier1/cvar.cpp
index d3fc6ae1..590adc8e 100644
--- a/r5dev/tier1/cvar.cpp
+++ b/r5dev/tier1/cvar.cpp
@@ -1061,28 +1061,6 @@ int CCvarUtilities::CvarFindFlagsCompletionCallback(const char* partial,
 	return values;
 }
 
-//-----------------------------------------------------------------------------
-// Purpose: returns all ConVars
-//-----------------------------------------------------------------------------
-unordered_map<string, ConCommandBase*> CCvar::DumpToMap(void)
-{
-	stringstream ss;
-	CCVarIteratorInternal* itint = FactoryInternalIterator(); // Allocate new InternalIterator.
-
-	unordered_map<string, ConCommandBase*> allConVars;
-
-	for (itint->SetFirst(); itint->IsValid(); itint->Next()) // Loop through all instances.
-	{
-		ConCommandBase* pCommand = itint->Get();
-		const char* pszCommandName = pCommand->m_pszName;
-		allConVars[pszCommandName] = pCommand;
-	}
-
-	delete itint;
-
-	return allConVars;
-}
-
 ///////////////////////////////////////////////////////////////////////////////
 CCvar* g_pCVar = nullptr;