diff --git a/r5dev/engine/sys_utils.cpp b/r5dev/engine/sys_utils.cpp
index 10f30502..8ea41ec9 100644
--- a/r5dev/engine/sys_utils.cpp
+++ b/r5dev/engine/sys_utils.cpp
@@ -15,7 +15,7 @@
 #include "vgui/vgui_debugpanel.h"
 #include "gameui/IConsole.h"
 #endif // !DEDICATED
-static std::mutex m;
+
 
 //-----------------------------------------------------------------------------
 // Purpose: Exit engine with error
@@ -35,7 +35,7 @@ void HSys_Error(char* fmt, ...)
 	buf[sizeof(buf) -1] = 0;
 	va_end(args);
 
-	DevMsg(eDLL_T::ENGINE, "%s\n", buf);
+	Error(eDLL_T::ENGINE, "%s\n", buf);
 	return Sys_Error(buf);
 }
 
@@ -58,7 +58,7 @@ void* HSys_Warning(int level, char* fmt, ...)
 		va_end(args);
 	}/////////////////////////////
 
-	Warning(eDLL_T::NONE, "Warning(%d):%s\n", level, buf); // TODO: Color
+	Warning(eDLL_T::NONE, "Warning(%d):%s\n", level, buf);
 	return Sys_Warning(level, buf);
 }
 
@@ -107,7 +107,7 @@ void DevMsg(eDLL_T idx, const char* fmt, ...)
 	static std::shared_ptr<spdlog::logger> wconsole = spdlog::get("win_console");
 	static std::shared_ptr<spdlog::logger> sqlogger = spdlog::get("dev_message_logger");
 
-	m.lock();
+	s_LogMutex.lock();
 	{/////////////////////////////
 		va_list args{};
 		va_start(args, fmt);
@@ -155,18 +155,45 @@ void DevMsg(eDLL_T idx, const char* fmt, ...)
 
 #ifndef DEDICATED
 	iconsole->info(svOut);
-	std::string s = g_spd_sys_w_oss.str();
 
 	int nLog = static_cast<int>(idx) + 3; // RUI log enum is shifted by 3 for scripts.
 	LogType_t tLog = static_cast<LogType_t>(nLog);
 
-	g_pLogSystem.AddLog(tLog, s);
-	g_pIConsole->m_ivConLog.push_back(Strdup(s.c_str()));
+	ImVec4 color;
+	switch (idx)
+	{
+	case eDLL_T::SERVER:
+		color = ImVec4(0.23f, 0.47f, 0.85f, 1.00f);
+		break;
+	case eDLL_T::CLIENT:
+		color = ImVec4(0.46f, 0.46f, 0.46f, 1.00f);
+		break;
+	case eDLL_T::UI:
+		color = ImVec4(0.59f, 0.35f, 0.46f, 1.00f);
+		break;
+	case eDLL_T::ENGINE:
+		color = ImVec4(0.70f, 0.70f, 0.70f, 1.00f);
+		break;
+	case eDLL_T::FS:
+		color = ImVec4(0.32f, 0.64f, 0.72f, 1.00f);
+		break;
+	case eDLL_T::RTECH:
+		color = ImVec4(0.36f, 0.70f, 0.35f, 1.00f);
+		break;
+	case eDLL_T::MS:
+		color = ImVec4(0.75f, 0.41f, 0.67f, 1.00f);
+		break;
+	default:
+		break;
+	}
+
+	g_pIConsole->m_ivConLog.push_back(CConLog(g_spd_sys_w_oss.str().c_str(), color));
+	g_pLogSystem.AddLog(tLog, g_spd_sys_w_oss.str());
 
 	g_spd_sys_w_oss.str("");
 	g_spd_sys_w_oss.clear();
 #endif // !DEDICATED
-	m.unlock();
+	s_LogMutex.unlock();
 }
 
 //-----------------------------------------------------------------------------
@@ -187,7 +214,7 @@ void Warning(eDLL_T idx, const char* fmt, ...)
 	static std::shared_ptr<spdlog::logger> wconsole = spdlog::get("win_console");
 	static std::shared_ptr<spdlog::logger> sqlogger = spdlog::get("warn_message_logger");
 
-	m.lock();
+	s_LogMutex.lock();
 	{/////////////////////////////
 		va_list args{};
 		va_start(args, fmt);
@@ -236,15 +263,14 @@ void Warning(eDLL_T idx, const char* fmt, ...)
 
 #ifndef DEDICATED
 	iconsole->info(svOut);
-	std::string s = g_spd_sys_w_oss.str();
 
-	g_pLogSystem.AddLog(LogType_t::WARNING_C, s);
-	g_pIConsole->m_ivConLog.push_back(Strdup(s.c_str()));
+	g_pLogSystem.AddLog(LogType_t::WARNING_C, g_spd_sys_w_oss.str());
+	g_pIConsole->m_ivConLog.push_back(CConLog(g_spd_sys_w_oss.str(), ImVec4(1.00f, 1.00f, 0.00f, 0.80f)));
 
 	g_spd_sys_w_oss.str("");
 	g_spd_sys_w_oss.clear();
 #endif // !DEDICATED
-	m.unlock();
+	s_LogMutex.unlock();
 }
 
 //-----------------------------------------------------------------------------
@@ -265,7 +291,7 @@ void Error(eDLL_T idx, const char* fmt, ...)
 	static std::shared_ptr<spdlog::logger> wconsole = spdlog::get("win_console");
 	static std::shared_ptr<spdlog::logger> sqlogger = spdlog::get("error_message_logger");
 
-	m.lock();
+	s_LogMutex.lock();
 	{/////////////////////////////
 		va_list args{};
 		va_start(args, fmt);
@@ -314,15 +340,14 @@ void Error(eDLL_T idx, const char* fmt, ...)
 
 #ifndef DEDICATED
 	iconsole->info(svOut);
-	std::string s = g_spd_sys_w_oss.str();
 
-	g_pLogSystem.AddLog(LogType_t::ERROR_C, s);
-	g_pIConsole->m_ivConLog.push_back(Strdup(s.c_str()));
+	g_pLogSystem.AddLog(LogType_t::ERROR_C, g_spd_sys_w_oss.str());
+	g_pIConsole->m_ivConLog.push_back(CConLog(g_spd_sys_w_oss.str(), ImVec4(1.00f, 0.00f, 0.00f, 1.00f)));
 
 	g_spd_sys_w_oss.str("");
 	g_spd_sys_w_oss.clear();
 #endif // !DEDICATED
-	m.unlock();
+	s_LogMutex.unlock();
 }
 
 //-----------------------------------------------------------------------------
diff --git a/r5dev/engine/sys_utils.h b/r5dev/engine/sys_utils.h
index 731f4483..d8c8ed93 100644
--- a/r5dev/engine/sys_utils.h
+++ b/r5dev/engine/sys_utils.h
@@ -12,7 +12,9 @@ inline auto Sys_LoadAssetHelper = p_Sys_LoadAssetHelper.RCast<void* (*)(const CH
 
 inline CMemory p_Con_NPrintf;
 inline auto Con_NPrintf = p_Con_NPrintf.RCast<void (*)(int pos, const char* fmt, ...)>();
-	/* ==== ------- ========================================================================================================================================================= */
+
+inline std::mutex s_LogMutex;
+/* ==== ------- ========================================================================================================================================================= */
 
 enum class eDLL_T : int
 {
diff --git a/r5dev/filesystem/basefilesystem.cpp b/r5dev/filesystem/basefilesystem.cpp
index 9c5f8757..3b2fadbe 100644
--- a/r5dev/filesystem/basefilesystem.cpp
+++ b/r5dev/filesystem/basefilesystem.cpp
@@ -63,7 +63,7 @@ void CBaseFileSystem::Close(FileHandle_t file)
 //---------------------------------------------------------------------------------
 void CBaseFileSystem::Warning(CBaseFileSystem* pFileSystem, FileWarningLevel_t level, const char* pFmt, ...)
 {
-	if (fs_warning_level_sdk->GetInt() < (int)level)
+	if (fs_warning_level_sdk->GetInt() < static_cast<int>(level))
 	{
 		return;
 	}
@@ -90,14 +90,11 @@ void CBaseFileSystem::Warning(CBaseFileSystem* pFileSystem, FileWarningLevel_t l
 	{
 		wconsole->debug(szBuf);
 #ifndef DEDICATED
+		iconsole->debug(szBuf);
+		g_pIConsole->m_ivConLog.push_back(CConLog(g_spd_sys_w_oss.str(), ImVec4(1.00f, 1.00f, 0.00f, 1.00f)));
+
 		g_spd_sys_w_oss.str("");
 		g_spd_sys_w_oss.clear();
-
-		iconsole->debug(szBuf);
-
-		std::string s = g_spd_sys_w_oss.str();
-
-		g_pIConsole->m_ivConLog.push_back(Strdup(s.c_str()));
 #endif // !DEDICATED
 	}
 }
@@ -122,7 +119,7 @@ FileHandle_t CBaseFileSystem::ReadFromVPK(CBaseFileSystem* pFileSystem, std::int
 	// TODO: obtain 'mod' SearchPath's instead.
 	svFilePath.insert(0, "platform\\");
 
-	if (::FileExists(svFilePath.c_str()) /*|| ::FileExists(pszFilePath)*/)
+	if (::FileExists(svFilePath.c_str()) || ::FileExists(pszFilePath))
 	{
 		*pResults = -1;
 		return (void*)pResults;
@@ -150,7 +147,7 @@ bool CBaseFileSystem::ReadFromCache(CBaseFileSystem* pFileSystem, char* pszFileP
 	// TODO: obtain 'mod' SearchPath's instead.
 	svFilePath.insert(0, "platform\\");
 
-	if (::FileExists(svFilePath.c_str()) /*|| ::FileExists(pszFilePath)*/)
+	if (::FileExists(svFilePath.c_str()) || ::FileExists(pszFilePath))
 	{
 		return false;
 	}
diff --git a/r5dev/game/server/ai_networkmanager.cpp b/r5dev/game/server/ai_networkmanager.cpp
index 78306182..ec0560ba 100644
--- a/r5dev/game/server/ai_networkmanager.cpp
+++ b/r5dev/game/server/ai_networkmanager.cpp
@@ -350,8 +350,8 @@ void CAI_NetworkManager::LoadNetworkGraph(CAI_NetworkManager* pAINetworkManager,
 
 				if (nNavMeshHash != nAiGraphHash)
 				{
-					Warning(eDLL_T::SERVER, "AI node graph '%s' is out of date (%s NavMesh checksum: '0x%X' expected: '0x%X')\n",
-						fsGraphPath.string().c_str(), HULL_SIZE[3].c_str(), nNavMeshHash, nAiGraphHash);
+					Warning(eDLL_T::SERVER, "AI node graph '%s' is out of date (checksum: '0x%X' expected: '0x%X')\n",
+						fsGraphPath.string().c_str(), nNavMeshHash, nAiGraphHash);
 				}
 
 				iNavMesh.close();
diff --git a/r5dev/gameui/IConsole.cpp b/r5dev/gameui/IConsole.cpp
index b128a3d4..2f142827 100644
--- a/r5dev/gameui/IConsole.cpp
+++ b/r5dev/gameui/IConsole.cpp
@@ -766,7 +766,7 @@ void CConsole::AddLog(const char* fmt, ...) IM_FMTARGS(2)
     vsnprintf(buf, IM_ARRAYSIZE(buf), fmt, args);
     buf[IM_ARRAYSIZE(buf) - 1] = 0;
     va_end(args);
-    m_ivConLog.push_back(Strdup(buf));
+    m_ivConLog.push_back(CConLog(Strdup(buf), ImVec4(1.00f, 0.80f, 0.60f, 1.00f)));
 }
 
 //-----------------------------------------------------------------------------
@@ -774,7 +774,7 @@ void CConsole::AddLog(const char* fmt, ...) IM_FMTARGS(2)
 //-----------------------------------------------------------------------------
 void CConsole::ClearLog(void)
 {
-    for (int i = 0; i < m_ivConLog.size(); i++) { free(m_ivConLog[i]); }
+    //for (int i = 0; i < m_ivConLog.size(); i++) { free(m_ivConLog[i]); }
     m_ivConLog.clear();
 }
 
@@ -785,68 +785,29 @@ void CConsole::ColorLog(void) const
 {
     for (int i = 0; i < m_ivConLog.size(); i++)
     {
-        const char* pszConLog = m_ivConLog[i];
-        if (!m_itFilter.PassFilter(pszConLog))
+        if (!m_itFilter.PassFilter(m_ivConLog[i].m_svConLog.c_str()))
         {
             continue;
         }
         ///////////////////////////////////////////////////////////////////////
-        ImVec4 imColor;
+        ImVec4 imColor = m_ivConLog[i].m_imColor;
 
-        // General
-        if (strstr(pszConLog, ""))            { imColor = ImVec4(0.81f, 0.81f, 0.81f, 1.00f); true; }
-        if (strstr(pszConLog, "[INFO]"))      { imColor = ImVec4(1.00f, 1.00f, 1.00f, 0.70f); true; }
-        if (strstr(pszConLog, "[ERROR]"))     { imColor = ImVec4(1.00f, 0.00f, 0.00f, 1.00f); true; }
-        if (strstr(pszConLog, "[DEBUG]"))     { imColor = ImVec4(0.00f, 0.30f, 1.00f, 1.00f); true; }
-        if (strstr(pszConLog, "[WARNING]"))   { imColor = ImVec4(1.00f, 1.00f, 0.00f, 0.80f); true; }
-        if (strncmp(pszConLog, "# ", 2) == 0) { imColor = ImVec4(1.00f, 0.80f, 0.60f, 1.00f); true; }
+        //// General
+        if (strstr(m_ivConLog[i].m_svConLog.c_str(), "[INFO]"))       { imColor = ImVec4(1.00f, 1.00f, 1.00f, 0.70f); true; }
+        if (strstr(m_ivConLog[i].m_svConLog.c_str(), "[ERROR]"))      { imColor = ImVec4(1.00f, 0.00f, 0.00f, 1.00f); true; }
+        if (strstr(m_ivConLog[i].m_svConLog.c_str(), "[DEBUG]"))      { imColor = ImVec4(0.00f, 0.30f, 1.00f, 1.00f); true; }
+        if (strstr(m_ivConLog[i].m_svConLog.c_str(), "[WARNING]"))    { imColor = ImVec4(1.00f, 1.00f, 0.00f, 0.80f); true; }
+        if (strncmp(m_ivConLog[i].m_svConLog.c_str(), "# ", 2) == 0)  { imColor = ImVec4(1.00f, 0.80f, 0.60f, 1.00f); true; }
 
-        // Script virtual machines per game dll
-        if (strstr(pszConLog, "Script(S):")) { imColor = ImVec4(0.59f, 0.58f, 0.73f, 1.00f); true; }
-        if (strstr(pszConLog, "Script(C):")) { imColor = ImVec4(0.59f, 0.58f, 0.63f, 1.00f); true; }
-        if (strstr(pszConLog, "Script(U):")) { imColor = ImVec4(0.59f, 0.48f, 0.53f, 1.00f); true; }
-        if (strstr(pszConLog, "Script(X):")) { imColor = ImVec4(0.59f, 0.58f, 0.63f, 1.00f); true; }
-
-        // Native per game dll
-        if (strstr(pszConLog, "Native(S):")) { imColor = ImVec4(0.23f, 0.47f, 0.85f, 1.00f); true; }
-        if (strstr(pszConLog, "Native(C):")) { imColor = ImVec4(0.46f, 0.46f, 0.46f, 1.00f); true; }
-        if (strstr(pszConLog, "Native(U):")) { imColor = ImVec4(0.59f, 0.35f, 0.46f, 1.00f); true; }
-
-        // Native per sys dll
-        if (strstr(pszConLog, "Native(E):")) { imColor = ImVec4(0.70f, 0.70f, 0.70f, 1.00f); true; }
-        if (strstr(pszConLog, "Native(F):")) { imColor = ImVec4(0.32f, 0.64f, 0.72f, 1.00f); true; }
-        if (strstr(pszConLog, "Native(R):")) { imColor = ImVec4(0.36f, 0.70f, 0.35f, 1.00f); true; }
-        if (strstr(pszConLog, "Native(M):")) { imColor = ImVec4(0.75f, 0.41f, 0.67f, 1.00f); true; }
-
-        // Callbacks
-        //if (strstr(item, "CodeCallback_"))  { color = ImVec4(0.00f, 0.30f, 1.00f, 1.00f); has_color = true; }
-
-        // Squirrel VM script errors
-        if (strstr(pszConLog, ".gnut"))          { imColor = ImVec4(1.00f, 1.00f, 1.00f, 0.60f); true; }
-        if (strstr(pszConLog, ".nut"))           { imColor = ImVec4(1.00f, 1.00f, 1.00f, 0.60f); true; }
-        if (strstr(pszConLog, "[CLIENT]"))       { imColor = ImVec4(1.00f, 0.00f, 0.00f, 1.00f); true; }
-        if (strstr(pszConLog, "[SERVER]"))       { imColor = ImVec4(1.00f, 0.00f, 0.00f, 1.00f); true; }
-        if (strstr(pszConLog, "[UI]"))           { imColor = ImVec4(1.00f, 0.00f, 0.00f, 1.00f); true; }
-        if (strstr(pszConLog, "SCRIPT ERROR"))   { imColor = ImVec4(1.00f, 0.00f, 0.00f, 1.00f); true; }
-        if (strstr(pszConLog, "SCRIPT COMPILE")) { imColor = ImVec4(1.00f, 0.00f, 0.00f, 1.00f); true; }
-        if (strstr(pszConLog, ".gnut #"))        { imColor = ImVec4(1.00f, 0.00f, 0.00f, 1.00f); true; }
-        if (strstr(pszConLog, ".nut #"))         { imColor = ImVec4(1.00f, 0.00f, 0.00f, 1.00f); true; }
-        if (strstr(pszConLog, "): -> "))         { imColor = ImVec4(1.00f, 0.00f, 0.00f, 1.00f); true; }
-        if (strstr(pszConLog, "):Warning:"))     { imColor = ImVec4(1.00f, 1.00f, 0.00f, 1.00f); true; }
-
-        // Squirrel VM script debug
-        if (strstr(pszConLog, "CALLSTACK"))   { imColor = ImVec4(1.00f, 1.00f, 0.00f, 0.80f); true; }
-        if (strstr(pszConLog, "LOCALS"))      { imColor = ImVec4(1.00f, 1.00f, 0.00f, 0.80f); true; }
-        if (strstr(pszConLog, "*FUNCTION"))   { imColor = ImVec4(1.00f, 1.00f, 0.00f, 0.80f); true; }
-        if (strstr(pszConLog, "DIAGPRINTS"))  { imColor = ImVec4(1.00f, 1.00f, 0.00f, 0.80f); true; }
-        if (strstr(pszConLog, " File : "))    { imColor = ImVec4(0.00f, 0.30f, 1.00f, 1.00f); true; }
-        if (strstr(pszConLog, "<><>GRX<><>")) { imColor = ImVec4(0.00f, 0.30f, 1.00f, 1.00f); true; }
-
-        // Filters
-        //if (strstr(item, ") -> "))          { color = ImVec4(1.00f, 1.00f, 1.00f, 0.70f); has_color = true; }
+        //// Squirrel VM script debug
+        if (strstr(m_ivConLog[i].m_svConLog.c_str(), "CALLSTACK"))    { imColor = ImVec4(1.00f, 1.00f, 0.00f, 0.80f); true; }
+        if (strstr(m_ivConLog[i].m_svConLog.c_str(), "LOCALS"))       { imColor = ImVec4(1.00f, 1.00f, 0.00f, 0.80f); true; }
+        if (strstr(m_ivConLog[i].m_svConLog.c_str(), "DIAGPRINTS"))   { imColor = ImVec4(1.00f, 1.00f, 0.00f, 0.80f); true; }
+        if (strstr(m_ivConLog[i].m_svConLog.c_str(), "SCRIPT ERROR")) { imColor = ImVec4(1.00f, 0.00f, 0.00f, 1.00f); true; }
+        if (strstr(m_ivConLog[i].m_svConLog.c_str(), "<><>GRX<><>"))  { imColor = ImVec4(0.00f, 0.30f, 1.00f, 1.00f); true; }
 
         ImGui::PushStyleColor(ImGuiCol_Text, imColor);
-        ImGui::TextWrapped(pszConLog);
+        ImGui::TextWrapped(m_ivConLog[i].m_svConLog.c_str());
         ImGui::PopStyleColor();
     }
 }
diff --git a/r5dev/gameui/IConsole.h b/r5dev/gameui/IConsole.h
index c8add218..15f223b1 100644
--- a/r5dev/gameui/IConsole.h
+++ b/r5dev/gameui/IConsole.h
@@ -1,8 +1,8 @@
 #pragma once
+#ifndef DEDICATED
 #include "common/sdkdefs.h"
 #include "windows/resource.h"
 
-#ifndef DEDICATED
 struct CSuggest
 {
     CSuggest(const string& svName, int nFlags)
@@ -22,6 +22,17 @@ struct CSuggest
     int m_nFlags;
 };
 
+struct CConLog
+{
+    CConLog(const string& svConLog, const ImVec4& imColor)
+    {
+        m_svConLog = svConLog;
+        m_imColor = imColor;
+    }
+    string m_svConLog;
+    ImVec4 m_imColor;
+};
+
 class CConsole
 {
 private:
@@ -71,7 +82,7 @@ private:
 
 public:
     bool             m_bActivate = false;
-    ImVector<char*>  m_ivConLog;
+    vector<CConLog>  m_ivConLog;
     vector<CSuggest> m_vsvCommandBases;
 
     ///////////////////////////////////////////////////////////////////////////
diff --git a/r5dev/squirrel/sqvm.cpp b/r5dev/squirrel/sqvm.cpp
index aeff9371..52bf9f6d 100644
--- a/r5dev/squirrel/sqvm.cpp
+++ b/r5dev/squirrel/sqvm.cpp
@@ -60,6 +60,7 @@ SQRESULT HSQVM_PrintFunc(HSQUIRRELVM v, SQChar* fmt, ...)
 	static std::shared_ptr<spdlog::logger> wconsole = spdlog::get("win_console");
 	static std::shared_ptr<spdlog::logger> sqlogger = spdlog::get("sqvm_print_logger");
 
+	s_LogMutex.lock();
 	{/////////////////////////////
 		va_list args{};
 		va_start(args, fmt);
@@ -102,16 +103,33 @@ SQRESULT HSQVM_PrintFunc(HSQUIRRELVM v, SQChar* fmt, ...)
 
 		if (sq_showvmoutput->GetInt() > 2)
 		{
-			std::string s = g_spd_sys_w_oss.str();
+			ImVec4 color;
+			switch (context)
+			{
+			case SQCONTEXT::SERVER:
+				color = ImVec4(0.59f, 0.58f, 0.73f, 1.00f);
+				break;
+			case SQCONTEXT::CLIENT:
+				color = ImVec4(0.59f, 0.58f, 0.63f, 1.00f);
+				break;
+			case SQCONTEXT::UI:
+				color = ImVec4(0.59f, 0.48f, 0.53f, 1.00f);
+				break;
+			default:
+				color = ImVec4(0.59f, 0.58f, 0.63f, 1.00f);
+				break;
+			}
 
-			g_pIConsole->m_ivConLog.push_back(Strdup(s.c_str()));
-			g_pLogSystem.AddLog(static_cast<LogType_t>(context), s);
+			g_pIConsole->m_ivConLog.push_back(CConLog(g_spd_sys_w_oss.str(), color));
+			g_pLogSystem.AddLog(static_cast<LogType_t>(context), g_spd_sys_w_oss.str());
 
 			g_spd_sys_w_oss.str("");
 			g_spd_sys_w_oss.clear();
 		}
 #endif // !DEDICATED
 	}
+
+	s_LogMutex.unlock();
 	return SQ_OK;
 }
 
@@ -128,11 +146,12 @@ SQRESULT HSQVM_WarningFunc(HSQUIRRELVM v, SQInteger a2, SQInteger a3, SQInteger*
 	static void* retaddr = reinterpret_cast<void*>(p_SQVM_WarningCmd.Offset(0x10).FindPatternSelf("85 ?? ?? 99", CMemory::Direction::DOWN).GetPtr());
 	SQRESULT result = SQVM_WarningFunc(v, a2, a3, nStringSize, ppString);
 
-	if (retaddr != _ReturnAddress()) // Check if its SQVM_Warning calling.
+	if (retaddr != _ReturnAddress() || !sq_showvmwarning->GetBool()) // Check if its SQVM_Warning calling.
 	{
 		return result;
 	}
 
+	s_LogMutex.lock();
 #ifdef GAMEDLL_S3
 	SQCONTEXT context = *reinterpret_cast<SQCONTEXT*>(reinterpret_cast<std::uintptr_t>(v) + 0x18);
 #else // TODO [ AMOS ]: nothing equal to 'rdx + 18h' exist in the vm structs for anything below S3.
@@ -144,13 +163,10 @@ SQRESULT HSQVM_WarningFunc(HSQUIRRELVM v, SQInteger a2, SQInteger a3, SQInteger*
 	static std::shared_ptr<spdlog::logger> sqlogger = spdlog::get("sqvm_warn_logger");
 
 	std::string vmStr = SQVM_WARNING_LOG_T[static_cast<int>(context)].c_str();
-	std::string svConstructor((char*)*ppString, *nStringSize); // Get string from memory via std::string constructor.
+	std::string svConstructor(*ppString, *nStringSize); // Get string from memory via std::string constructor.
 	vmStr.append(svConstructor);
 
-	if (sq_showvmwarning->GetInt() > 0)
-	{
-		sqlogger->debug(vmStr); // Emit to file.
-	}
+	sqlogger->debug(vmStr); // Emit to file.
 	if (sq_showvmwarning->GetInt() > 1)
 	{
 		if (!g_bSpdLog_UseAnsiClr)
@@ -171,21 +187,17 @@ SQRESULT HSQVM_WarningFunc(HSQUIRRELVM v, SQInteger a2, SQInteger a3, SQInteger*
 		}
 
 #ifndef DEDICATED
-		g_spd_sys_w_oss.str("");
-		g_spd_sys_w_oss.clear();
-
 		iconsole->debug(vmStr); // Emit to in-game console.
 
-		std::string s = g_spd_sys_w_oss.str();
-		g_pIConsole->m_ivConLog.push_back(Strdup(s.c_str()));
+		g_pIConsole->m_ivConLog.push_back(CConLog(g_spd_sys_w_oss.str(), ImVec4(1.00f, 1.00f, 0.00f, 0.80f)));
+		g_pLogSystem.AddLog(LogType_t::WARNING_C, g_spd_sys_w_oss.str());
 
-		if (sq_showvmwarning->GetInt() > 2)
-		{
-			g_pLogSystem.AddLog(LogType_t::WARNING_C, s);
-			g_pIConsole->m_ivConLog.push_back(Strdup(s.c_str()));
-		}
+		g_spd_sys_w_oss.str("");
+		g_spd_sys_w_oss.clear();
 #endif // !DEDICATED
 	}
+
+	s_LogMutex.unlock();
 	return result;
 }
 
diff --git a/r5dev/vphysics/QHull.cpp b/r5dev/vphysics/QHull.cpp
index fcc7ef61..9e7f8776 100644
--- a/r5dev/vphysics/QHull.cpp
+++ b/r5dev/vphysics/QHull.cpp
@@ -1,6 +1,7 @@
 #include "core/stdafx.h"
 #include "core/logdef.h"
 #include "vphysics/QHull.h"
+#include "engine/sys_utils.h"
 #ifndef DEDICATED
 #include "gameui/IConsole.h"
 #endif // !DEDICATED
@@ -16,6 +17,7 @@ int HQHull_PrintFunc(const char* fmt, ...)
 	static std::shared_ptr<spdlog::logger> wconsole = spdlog::get("win_console");
 	static std::shared_ptr<spdlog::logger> qhlogger = spdlog::get("qhull_debug_logger");
 
+	s_LogMutex.lock();
 	{/////////////////////////////
 		va_list args{};
 		va_start(args, fmt);
@@ -30,15 +32,14 @@ int HQHull_PrintFunc(const char* fmt, ...)
 	wconsole->debug(buf);
 
 #ifndef DEDICATED
+	iconsole->debug(buf);
+	g_pIConsole->m_ivConLog.push_back(CConLog(g_spd_sys_w_oss.str(), ImVec4(0.81f, 0.81f, 0.81f, 1.00f)));
+
 	g_spd_sys_w_oss.str("");
 	g_spd_sys_w_oss.clear();
-
-	iconsole->debug(buf);
-
-	std::string s = g_spd_sys_w_oss.str();
-	g_pIConsole->m_ivConLog.push_back(Strdup(s.c_str()));
 #endif // !DEDICATED
 
+	s_LogMutex.unlock();
 	return NULL;
 }