diff --git a/r5dev/core/logdef.cpp b/r5dev/core/logdef.cpp
index 077f426b..9246affe 100644
--- a/r5dev/core/logdef.cpp
+++ b/r5dev/core/logdef.cpp
@@ -45,14 +45,17 @@ void SpdLog_Init(void)
 	 * ROTATE LOGGER SETUP  *
 	 ************************/
 	{
-		spdlog::rotating_logger_mt<spdlog::synchronous_factory>("sqvm_warn" , "platform\\logs\\sqvm_warn.log" , SPDLOG_MAX_SIZE, SPDLOG_NUM_FILE)->set_pattern("[%Y-%m-%d %H:%M:%S.%e] %v");
-		spdlog::rotating_logger_mt<spdlog::synchronous_factory>("sqvm_info" , "platform\\logs\\sqvm_info.log" , SPDLOG_MAX_SIZE, SPDLOG_NUM_FILE)->set_pattern("[%Y-%m-%d %H:%M:%S.%e] %v");
-		spdlog::rotating_logger_mt<spdlog::synchronous_factory>("sdk_info"  , "platform\\logs\\sdk_info.log"  , SPDLOG_MAX_SIZE, SPDLOG_NUM_FILE)->set_pattern("[%Y-%m-%d %H:%M:%S.%e] %v");
-		spdlog::rotating_logger_mt<spdlog::synchronous_factory>("sdk_warn"  , "platform\\logs\\sdk_warn.log"  , SPDLOG_MAX_SIZE, SPDLOG_NUM_FILE)->set_pattern("[%Y-%m-%d %H:%M:%S.%e] %v");
-		spdlog::rotating_logger_mt<spdlog::synchronous_factory>("sdk_error" , "platform\\logs\\sdk_error.log" , SPDLOG_MAX_SIZE, SPDLOG_NUM_FILE)->set_pattern("[%Y-%m-%d %H:%M:%S.%e] %v");
-		spdlog::rotating_logger_mt<spdlog::synchronous_factory>("qhull_info", "platform\\logs\\qhull_info.log", SPDLOG_MAX_SIZE, SPDLOG_NUM_FILE)->set_pattern("[%Y-%m-%d %H:%M:%S.%e] %v");
-		spdlog::rotating_logger_mt<spdlog::synchronous_factory>("net_trace" , "platform\\logs\\net_trace.log" , SPDLOG_MAX_SIZE, SPDLOG_NUM_FILE)->set_pattern("[%Y-%m-%d %H:%M:%S.%e] %v");
-		spdlog::rotating_logger_mt<spdlog::synchronous_factory>("fs_warn"   , "platform\\logs\\fs_warn.log"   , SPDLOG_MAX_SIZE, SPDLOG_NUM_FILE)->set_pattern("[%Y-%m-%d %H:%M:%S.%e] %v");
+		spdlog::rotating_logger_mt<spdlog::synchronous_factory>("sqvm_warn" , "platform\\logs\\sqvm_warn.log"  , SPDLOG_MAX_SIZE, SPDLOG_NUM_FILE)->set_pattern("[%Y-%m-%d %H:%M:%S.%e] %v");
+		spdlog::rotating_logger_mt<spdlog::synchronous_factory>("sqvm_info" , "platform\\logs\\sqvm_info.log"  , SPDLOG_MAX_SIZE, SPDLOG_NUM_FILE)->set_pattern("[%Y-%m-%d %H:%M:%S.%e] %v");
+		spdlog::rotating_logger_mt<spdlog::synchronous_factory>("sdk_info"  , "platform\\logs\\sdk_info.log"   , SPDLOG_MAX_SIZE, SPDLOG_NUM_FILE)->set_pattern("[%Y-%m-%d %H:%M:%S.%e] %v");
+		spdlog::rotating_logger_mt<spdlog::synchronous_factory>("sdk_warn"  , "platform\\logs\\sdk_warn.log"   , SPDLOG_MAX_SIZE, SPDLOG_NUM_FILE)->set_pattern("[%Y-%m-%d %H:%M:%S.%e] %v");
+		spdlog::rotating_logger_mt<spdlog::synchronous_factory>("sdk_error" , "platform\\logs\\sdk_error.log"  , SPDLOG_MAX_SIZE, SPDLOG_NUM_FILE)->set_pattern("[%Y-%m-%d %H:%M:%S.%e] %v");
+		spdlog::rotating_logger_mt<spdlog::synchronous_factory>("qhull_info", "platform\\logs\\qhull_info.log" , SPDLOG_MAX_SIZE, SPDLOG_NUM_FILE)->set_pattern("[%Y-%m-%d %H:%M:%S.%e] %v");
+		spdlog::rotating_logger_mt<spdlog::synchronous_factory>("net_trace" , "platform\\logs\\net_trace.log"  , SPDLOG_MAX_SIZE, SPDLOG_NUM_FILE)->set_pattern("[%Y-%m-%d %H:%M:%S.%e] %v");
+#ifndef DEDICATED
+		spdlog::rotating_logger_mt<spdlog::synchronous_factory>("net_con"   , "platform\\logs\\net_console.log", SPDLOG_MAX_SIZE, SPDLOG_NUM_FILE)->set_pattern("[%Y-%m-%d %H:%M:%S.%e] %v");
+#endif // !DEDICATED
+		spdlog::rotating_logger_mt<spdlog::synchronous_factory>("fs_warn"   , "platform\\logs\\fs_warn.log"    , SPDLOG_MAX_SIZE, SPDLOG_NUM_FILE)->set_pattern("[%Y-%m-%d %H:%M:%S.%e] %v");
 	}
 
 	spdlog::set_level(spdlog::level::trace);
diff --git a/r5dev/engine/client/cl_rcon.cpp b/r5dev/engine/client/cl_rcon.cpp
index b28f7fc0..47c73480 100644
--- a/r5dev/engine/client/cl_rcon.cpp
+++ b/r5dev/engine/client/cl_rcon.cpp
@@ -289,49 +289,7 @@ void CRConClient::ProcessMessage(const sv_rcon::response& sv_response) const
 	}
 	case sv_rcon::response_t::SERVERDATA_RESPONSE_CONSOLE_LOG:
 	{
-		// !TODO: Network the enum for this.
-		if (svOut.find(SQVM_LOG_T[0]))
-		{
-			SQVM_PrintFunc(nullptr, const_cast<char*>("%s"), svOut.c_str());
-		}
-		else // This has to be done for RUI color logging.
-		{
-			if (svOut.find(sDLL_T[0]))
-			{
-				StringReplace(svOut, sDLL_T[0], "");
-				DevMsg(eDLL_T::SERVER, "%s", svOut.c_str());
-			}
-			if (svOut.find(sDLL_T[1]))
-			{
-				StringReplace(svOut, sDLL_T[1], "");
-				DevMsg(eDLL_T::CLIENT, "%s", svOut.c_str());
-			}
-			if (svOut.find(sDLL_T[2]))
-			{
-				StringReplace(svOut, sDLL_T[2], "");
-				DevMsg(eDLL_T::UI, "%s", svOut.c_str());
-			}
-			if (svOut.find(sDLL_T[3]))
-			{
-				StringReplace(svOut, sDLL_T[3], "");
-				DevMsg(eDLL_T::ENGINE, "%s", svOut.c_str());
-			}
-			if (svOut.find(sDLL_T[4]))
-			{
-				StringReplace(svOut, sDLL_T[4], "");
-				DevMsg(eDLL_T::FS, "%s", svOut.c_str());
-			}
-			if (svOut.find(sDLL_T[5]))
-			{
-				StringReplace(svOut, sDLL_T[5], "");
-				DevMsg(eDLL_T::RTECH, "%s", svOut.c_str());
-			}
-			if (svOut.find(sDLL_T[6]))
-			{
-				StringReplace(svOut, sDLL_T[6], "");
-				DevMsg(eDLL_T::MS, "%s", svOut.c_str());
-			}
-		}
+		NetMsg(sv_response.responseid(), svOut.c_str());
 		break;
 	}
 	default:
diff --git a/r5dev/engine/server/sv_rcon.cpp b/r5dev/engine/server/sv_rcon.cpp
index 293475e3..3116d2c4 100644
--- a/r5dev/engine/server/sv_rcon.cpp
+++ b/r5dev/engine/server/sv_rcon.cpp
@@ -195,7 +195,7 @@ void CRConServer::Send(SocketHandle_t hSocket, const std::string& svMessage) con
 void CRConServer::Recv(void)
 {
 	int nCount = m_pSocket->GetAcceptedSocketCount();
-	static char szRecvBuf[1024]{};
+	static char szRecvBuf[1024];
 
 	for (m_nConnIndex = nCount - 1; m_nConnIndex >= 0; m_nConnIndex--)
 	{
@@ -250,11 +250,11 @@ void CRConServer::Recv(void)
 //			response_t - 
 // Output : serialized results as string
 //-----------------------------------------------------------------------------
-std::string CRConServer::Serialize(const std::string& svRspBuf, const std::string& svRspVal, sv_rcon::response_t response_t) const
+std::string CRConServer::Serialize(const std::string& svRspBuf, const std::string& svRspVal, sv_rcon::response_t response_t, int nResponseId) const
 {
 	sv_rcon::response sv_response;
 
-	sv_response.set_responseid(-1); // TODO
+	sv_response.set_responseid(nResponseId);
 	sv_response.set_responsetype(response_t);
 
 	switch (response_t)
diff --git a/r5dev/engine/server/sv_rcon.h b/r5dev/engine/server/sv_rcon.h
index 5aeb801b..1274e652 100644
--- a/r5dev/engine/server/sv_rcon.h
+++ b/r5dev/engine/server/sv_rcon.h
@@ -26,7 +26,7 @@ public:
 	void Send(SocketHandle_t hSocket, const std::string& svMessage) const;
 	void Recv(void);
 
-	std::string Serialize(const std::string& svRspBuf, const std::string& svRspVal, sv_rcon::response_t response_t) const;
+	std::string Serialize(const std::string& svRspBuf, const std::string& svRspVal, sv_rcon::response_t response_t, int nResponseId = -4) const;
 	cl_rcon::request Deserialize(const std::string& svBuf) const;
 
 	void Authenticate(const cl_rcon::request& cl_request, CConnectedNetConsoleData* pData);
diff --git a/r5dev/engine/sys_dll.cpp b/r5dev/engine/sys_dll.cpp
index 3b8a9674..bd674b63 100644
--- a/r5dev/engine/sys_dll.cpp
+++ b/r5dev/engine/sys_dll.cpp
@@ -8,10 +8,10 @@
 int HSys_Error_Internal(char* fmt, va_list args)
 {
 	char buffer[2048]{};
-	Error(eDLL_T::NONE, "_______________________________________________________________\n");
-	Error(eDLL_T::NONE, "] ENGINE ERROR ################################################\n");
+	Error(eDLL_T::COMMON, "_______________________________________________________________\n");
+	Error(eDLL_T::COMMON, "] ENGINE ERROR ################################################\n");
 	vsprintf(buffer, fmt, args);
-	Error(eDLL_T::NONE, "%s\n", buffer);
+	Error(eDLL_T::COMMON, "%s\n", buffer);
 
 	///////////////////////////////////////////////////////////////////////////
 	return Sys_Error_Internal(fmt, args);
diff --git a/r5dev/engine/sys_utils.cpp b/r5dev/engine/sys_utils.cpp
index 816a14ea..d1e6b6e7 100644
--- a/r5dev/engine/sys_utils.cpp
+++ b/r5dev/engine/sys_utils.cpp
@@ -58,7 +58,7 @@ void* HSys_Warning(int level, char* fmt, ...)
 		va_end(args);
 	}/////////////////////////////
 
-	Warning(eDLL_T::NONE, "Warning(%d):%s\n", level, buf);
+	Warning(eDLL_T::COMMON, "Warning(%d):%s\n", level, buf);
 	return v_Sys_Warning(level, buf);
 }
 
diff --git a/r5dev/gameui/IConsole.cpp b/r5dev/gameui/IConsole.cpp
index 067463df..74e31820 100644
--- a/r5dev/gameui/IConsole.cpp
+++ b/r5dev/gameui/IConsole.cpp
@@ -528,7 +528,7 @@ void CConsole::FindFromPartial(void)
 //-----------------------------------------------------------------------------
 void CConsole::ProcessCommand(const char* pszCommand)
 {
-    AddLog(ImVec4(1.00f, 0.80f, 0.60f, 1.00f), "%s] %s\n", Plat_GetProcessUpTime(), pszCommand);
+    DevMsg(eDLL_T::COMMON, "] %s\n", pszCommand);
 
     std::thread t(CEngineClient_CommandExecute, this, pszCommand);
     t.detach(); // Detach from render thread.
diff --git a/r5dev/squirrel/sqvm.cpp b/r5dev/squirrel/sqvm.cpp
index d317f9ce..6cb515ba 100644
--- a/r5dev/squirrel/sqvm.cpp
+++ b/r5dev/squirrel/sqvm.cpp
@@ -32,20 +32,25 @@
 SQRESULT SQVM_PrintFunc(HSQUIRRELVM v, SQChar* fmt, ...)
 {
 	SQCONTEXT context;
+	int nResponseId;
 	// We use the sqvm pointer as index for SDK usage as the function prototype has to match assembly.
 	switch (static_cast<SQCONTEXT>(reinterpret_cast<int>(v)))
 	{
 	case SQCONTEXT::SERVER:
 		context = SQCONTEXT::SERVER;
+		nResponseId = -3;
 		break;
 	case SQCONTEXT::CLIENT:
 		context = SQCONTEXT::CLIENT;
+		nResponseId = -2;
 		break;
 	case SQCONTEXT::UI:
 		context = SQCONTEXT::UI;
+		nResponseId = -1;
 		break;
 	case SQCONTEXT::NONE:
 		context = SQCONTEXT::NONE;
+		nResponseId = -4;
 		break;
 	default:
 #if !defined (GAMEDLL_S0) && !defined (GAMEDLL_S1) && !defined (GAMEDLL_S2)
@@ -53,8 +58,27 @@ SQRESULT SQVM_PrintFunc(HSQUIRRELVM v, SQChar* fmt, ...)
 #else // Nothing equal to 'rdx + 18h' exist in the vm structs for anything below S3.
 		context = SQVM_GetContextIndex(v);
 #endif
+		switch (context)
+		{
+		case SQCONTEXT::SERVER:
+			nResponseId = -3;
+			break;
+		case SQCONTEXT::CLIENT:
+			nResponseId = -2;
+			break;
+		case SQCONTEXT::UI:
+			nResponseId = -1;
+			break;
+		case SQCONTEXT::NONE:
+			nResponseId = -4;
+			break;
+		default:
+			nResponseId = -4;
+			break;
+		}
 		break;
 	}
+
 	static SQChar buf[4096] = {};
 	static std::string vmStr;
 	static std::regex rxAnsiExp("\\\033\\[.*?m");
@@ -89,7 +113,7 @@ SQRESULT SQVM_PrintFunc(HSQUIRRELVM v, SQChar* fmt, ...)
 		{
 			wconsole->debug(vmStr);
 #ifdef DEDICATED
-			RCONServer()->Send(RCONServer()->Serialize(vmStr, "", sv_rcon::response_t::SERVERDATA_RESPONSE_CONSOLE_LOG));
+			RCONServer()->Send(RCONServer()->Serialize(vmStr, "", sv_rcon::response_t::SERVERDATA_RESPONSE_CONSOLE_LOG, nResponseId));
 #endif // DEDICATED
 		}
 		else
@@ -135,7 +159,7 @@ SQRESULT SQVM_PrintFunc(HSQUIRRELVM v, SQChar* fmt, ...)
 			vmStrAnsi.append(buf);
 			wconsole->debug(vmStrAnsi);
 #ifdef DEDICATED
-			RCONServer()->Send(RCONServer()->Serialize(vmStrAnsi, "", sv_rcon::response_t::SERVERDATA_RESPONSE_CONSOLE_LOG));
+			RCONServer()->Send(RCONServer()->Serialize(vmStrAnsi, "", sv_rcon::response_t::SERVERDATA_RESPONSE_CONSOLE_LOG, nResponseId));
 #endif // DEDICATED
 		}
 
@@ -175,7 +199,7 @@ SQRESULT SQVM_PrintFunc(HSQUIRRELVM v, SQChar* fmt, ...)
 			}
 
 			g_pConsole->AddLog(ConLog_t(g_spd_sys_w_oss.str(), color));
-			g_pLogSystem.AddLog(static_cast<LogType_t>(context), g_spd_sys_w_oss.str());
+			g_pLogSystem.AddLog(static_cast<LogType_t>(nResponseId), g_spd_sys_w_oss.str());
 
 			g_spd_sys_w_oss.str("");
 			g_spd_sys_w_oss.clear();
@@ -198,6 +222,7 @@ SQRESULT SQVM_PrintFunc(HSQUIRRELVM v, SQChar* fmt, ...)
 SQRESULT SQVM_WarningFunc(HSQUIRRELVM v, SQInteger a2, SQInteger a3, SQInteger* nStringSize, SQChar** ppString)
 {
 	static void* retaddr = reinterpret_cast<void*>(p_SQVM_WarningCmd.Offset(0x10).FindPatternSelf("85 ?? ?? 99", CMemory::Direction::DOWN).GetPtr());
+	int nResponseId;
 	SQCONTEXT context;
 	SQRESULT result = v_SQVM_WarningFunc(v, a2, a3, nStringSize, ppString);
 
@@ -213,6 +238,25 @@ SQRESULT SQVM_WarningFunc(HSQUIRRELVM v, SQInteger a2, SQInteger a3, SQInteger*
 	context = SQVM_GetContextIndex(v);
 #endif
 
+	switch (context)
+	{
+	case SQCONTEXT::SERVER:
+		nResponseId = -3;
+		break;
+	case SQCONTEXT::CLIENT:
+		nResponseId = -2;
+		break;
+	case SQCONTEXT::UI:
+		nResponseId = -1;
+		break;
+	case SQCONTEXT::NONE:
+		nResponseId = -4;
+		break;
+	default:
+		nResponseId = -4;
+		break;
+	}
+
 	static std::shared_ptr<spdlog::logger> iconsole = spdlog::get("game_console");
 	static std::shared_ptr<spdlog::logger> wconsole = spdlog::get("win_console");
 	static std::shared_ptr<spdlog::logger> sqlogger = spdlog::get("sqvm_warn");
@@ -229,7 +273,7 @@ SQRESULT SQVM_WarningFunc(HSQUIRRELVM v, SQInteger a2, SQInteger a3, SQInteger*
 		{
 			wconsole->debug(vmStr);
 #ifdef DEDICATED
-			RCONServer()->Send(RCONServer()->Serialize(vmStr, "", sv_rcon::response_t::SERVERDATA_RESPONSE_CONSOLE_LOG));
+			RCONServer()->Send(RCONServer()->Serialize(vmStr, "", sv_rcon::response_t::SERVERDATA_RESPONSE_CONSOLE_LOG, nResponseId));
 #endif // DEDICATED
 		}
 		else
@@ -239,7 +283,7 @@ SQRESULT SQVM_WarningFunc(HSQUIRRELVM v, SQInteger a2, SQInteger a3, SQInteger*
 			vmStrAnsi.append(svConstructor);
 			wconsole->debug(vmStrAnsi);
 #ifdef DEDICATED
-			RCONServer()->Send(RCONServer()->Serialize(vmStrAnsi, "", sv_rcon::response_t::SERVERDATA_RESPONSE_CONSOLE_LOG));
+			RCONServer()->Send(RCONServer()->Serialize(vmStrAnsi, "", sv_rcon::response_t::SERVERDATA_RESPONSE_CONSOLE_LOG, nResponseId));
 #endif // DEDICATED
 		}
 
diff --git a/r5dev/tier0/dbg.cpp b/r5dev/tier0/dbg.cpp
index a719166d..7d2c7d8c 100644
--- a/r5dev/tier0/dbg.cpp
+++ b/r5dev/tier0/dbg.cpp
@@ -11,7 +11,7 @@
 #include "tier0/dbg.h"
 #include "tier0/platform.h"
 #include "tier0/threadtools.h"
-#include <tier0/commandline.h>
+#include "tier0/commandline.h"
 #ifndef DEDICATED
 #include "vgui/vgui_debugpanel.h"
 #include "gameui/IConsole.h"
@@ -89,9 +89,199 @@ PLATFORM_INTERFACE void AssertValidWStringPtr(const wchar_t* ptr, int maxchar/*
 #endif
 }
 
+//-----------------------------------------------------------------------------
+// Purpose: Netconsole log
+// Input  : context - 
+//			*fmt - ... - 
+//-----------------------------------------------------------------------------
+void NetMsg(int context, const char* fmt, ...)
+{
+#ifndef DEDICATED
+	static char szBuf[4096] = {};
+	static std::string svOut;
+	static std::regex rxAnsiExp("\\\033\\[.*?m");
+	static std::shared_ptr<spdlog::logger> iconsole = spdlog::get("game_console");
+	static std::shared_ptr<spdlog::logger> wconsole = spdlog::get("win_console");
+	static std::shared_ptr<spdlog::logger> ntlogger = spdlog::get("net_con");
+	switch (context)
+	{
+	case -3:
+	case -2:
+	case -1:
+	{
+		s_LogMutex.lock();
+		{/////////////////////////////
+			va_list args{};
+			va_start(args, fmt);
+
+			vsnprintf(szBuf, sizeof(szBuf), fmt, args);
+
+			szBuf[sizeof(szBuf) - 1] = 0;
+			va_end(args);
+		}/////////////////////////////
+
+		svOut = szBuf;
+		if (svOut.back() != '\n')
+		{
+			svOut.append("\n");
+		}
+		ImVec4 color;
+
+		if (svOut.find("\033[38;2;255;255;000m") != std::string::npos)
+		{ // Warning.
+			color = ImVec4(1.00f, 1.00f, 0.00f, 0.80f);
+			context = static_cast<int>(LogType_t::WARNING_C);
+		}
+		else if (svOut.find("\033[38;2;255;000;000m") != std::string::npos)
+		{ // Error.
+			color = ImVec4(1.00f, 0.00f, 0.00f, 0.80f);
+			context = static_cast<int>(LogType_t::ERROR_C);
+		}
+		else
+		{
+			switch (context)
+			{
+			case -3: // [ SERVER ]
+				color = ImVec4(0.59f, 0.58f, 0.73f, 1.00f);
+				break;
+			case -2: // [ CLIENT ]
+				color = ImVec4(0.59f, 0.58f, 0.63f, 1.00f);
+				break;
+			case -1: // [   UI   ]
+				color = ImVec4(0.59f, 0.48f, 0.53f, 1.00f);
+				break;
+			default:
+				color = ImVec4(0.59f, 0.58f, 0.63f, 1.00f);
+				break;
+			}
+		}
+
+		if (g_bSpdLog_UseAnsiClr)
+		{
+			wconsole->debug(svOut);
+			svOut = std::regex_replace(svOut, rxAnsiExp, "");
+		}
+		else
+		{
+			svOut = std::regex_replace(svOut, rxAnsiExp, "");
+			wconsole->debug(svOut);
+		}
+
+		ntlogger->debug(svOut);
+		iconsole->debug(svOut);
+
+		g_pConsole->AddLog(ConLog_t(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();
+
+		s_LogMutex.unlock();
+
+		break;
+	}
+	case 0:
+	case 1:
+	case 2:
+	case 3:
+	case 4:
+	case 5:
+	case 6:
+	{
+		s_LogMutex.lock();
+		{/////////////////////////////
+			va_list args{};
+			va_start(args, fmt);
+
+			vsnprintf(szBuf, sizeof(szBuf), fmt, args);
+
+			szBuf[sizeof(szBuf) - 1] = 0;
+			va_end(args);
+		}/////////////////////////////
+
+		svOut = szBuf;
+		if (svOut.back() != '\n')
+		{
+			svOut.append("\n");
+		}
+		ImVec4 color;
+
+		if (svOut.find("\033[38;2;255;255;000;") != std::string::npos)
+		{ // Warning.
+			color = ImVec4(1.00f, 1.00f, 0.00f, 0.80f);
+			context = static_cast<int>(LogType_t::WARNING_C);
+		}
+		else if (svOut.find("\033[38;2;255;000;000;") != std::string::npos)
+		{ // Error.
+			color = ImVec4(1.00f, 0.00f, 0.00f, 0.80f);
+			context = static_cast<int>(LogType_t::ERROR_C);
+		}
+		else
+		{
+			switch (static_cast<eDLL_T>(context))
+			{
+			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;
+			case eDLL_T::NETCON:
+				color = ImVec4(0.81f, 0.81f, 0.81f, 1.00f);
+				break;
+			case eDLL_T::COMMON:
+				color = ImVec4(1.00f, 0.80f, 0.60f, 1.00f);
+				break;
+			default:
+				color = ImVec4(0.81f, 0.81f, 0.81f, 1.00f);
+				break;
+			}
+		}
+
+		if (g_bSpdLog_UseAnsiClr)
+		{
+			wconsole->debug(svOut);
+			svOut = std::regex_replace(svOut, rxAnsiExp, "");
+		}
+		else
+		{
+			svOut = std::regex_replace(svOut, rxAnsiExp, "");
+			wconsole->debug(svOut);
+		}
+
+		ntlogger->debug(svOut);
+		iconsole->info(svOut);
+
+		g_pConsole->AddLog(ConLog_t(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();
+		s_LogMutex.unlock();
+		break;
+	}
+	}
+#endif // !DEDICATED
+}
+
 //-----------------------------------------------------------------------------
 // Purpose: Show logs to all console interfaces
-// Input  : idx - 
+// Input  : context - 
 //			*fmt - ... - 
 //-----------------------------------------------------------------------------
 void DevMsg(eDLL_T context, const char* fmt, ...)
@@ -132,7 +322,7 @@ void DevMsg(eDLL_T context, const char* fmt, ...)
 	{
 		wconsole->debug(svOut);
 #ifdef DEDICATED
-		RCONServer()->Send(RCONServer()->Serialize(svOut, "", sv_rcon::response_t::SERVERDATA_RESPONSE_CONSOLE_LOG));
+		RCONServer()->Send(RCONServer()->Serialize(svOut, "", sv_rcon::response_t::SERVERDATA_RESPONSE_CONSOLE_LOG, static_cast<int>(context)));
 #endif // DEDICATED
 	}
 	else
@@ -147,7 +337,7 @@ void DevMsg(eDLL_T context, const char* fmt, ...)
 		}
 		wconsole->debug(svAnsiOut);
 #ifdef DEDICATED
-		RCONServer()->Send(RCONServer()->Serialize(svAnsiOut, "", sv_rcon::response_t::SERVERDATA_RESPONSE_CONSOLE_LOG));
+		RCONServer()->Send(RCONServer()->Serialize(svAnsiOut, "", sv_rcon::response_t::SERVERDATA_RESPONSE_CONSOLE_LOG, static_cast<int>(context)));
 #endif // DEDICATED
 	}
 
@@ -156,10 +346,9 @@ void DevMsg(eDLL_T context, const char* fmt, ...)
 #ifndef DEDICATED
 	iconsole->info(svOut);
 
-	int nLog = static_cast<int>(context) + 3; // RUI log enum is shifted by 3 for scripts.
-	LogType_t tLog = static_cast<LogType_t>(nLog);
-
+	LogType_t tLog = static_cast<LogType_t>(context);
 	ImVec4 color;
+
 	switch (context)
 	{
 	case eDLL_T::SERVER:
@@ -183,6 +372,12 @@ void DevMsg(eDLL_T context, const char* fmt, ...)
 	case eDLL_T::MS:
 		color = ImVec4(0.75f, 0.41f, 0.67f, 1.00f);
 		break;
+	case eDLL_T::NETCON:
+		color = ImVec4(0.81f, 0.81f, 0.81f, 1.00f);
+		break;
+	case eDLL_T::COMMON:
+		color = ImVec4(1.00f, 0.80f, 0.60f, 1.00f);
+		break;
 	default:
 		color = ImVec4(0.81f, 0.81f, 0.81f, 1.00f);
 		break;
@@ -199,7 +394,7 @@ void DevMsg(eDLL_T context, const char* fmt, ...)
 
 //-----------------------------------------------------------------------------
 // Purpose: Print engine and SDK errors
-// Input  : idx - 
+// Input  : context - 
 //			*fmt - ... - 
 //-----------------------------------------------------------------------------
 void Warning(eDLL_T context, const char* fmt, ...)
@@ -240,7 +435,7 @@ void Warning(eDLL_T context, const char* fmt, ...)
 	{
 		wconsole->debug(svOut);
 #ifdef DEDICATED
-		RCONServer()->Send(RCONServer()->Serialize(svOut, "", sv_rcon::response_t::SERVERDATA_RESPONSE_CONSOLE_LOG));
+		RCONServer()->Send(RCONServer()->Serialize(svOut, "", sv_rcon::response_t::SERVERDATA_RESPONSE_CONSOLE_LOG, static_cast<int>(context)));
 #endif // DEDICATED
 	}
 	else
@@ -256,7 +451,7 @@ void Warning(eDLL_T context, const char* fmt, ...)
 		}
 		wconsole->debug(svAnsiOut);
 #ifdef DEDICATED
-		RCONServer()->Send(RCONServer()->Serialize(svAnsiOut, "", sv_rcon::response_t::SERVERDATA_RESPONSE_CONSOLE_LOG));
+		RCONServer()->Send(RCONServer()->Serialize(svAnsiOut, "", sv_rcon::response_t::SERVERDATA_RESPONSE_CONSOLE_LOG, static_cast<int>(context)));
 #endif // DEDICATED
 	}
 
@@ -276,7 +471,7 @@ void Warning(eDLL_T context, const char* fmt, ...)
 
 //-----------------------------------------------------------------------------
 // Purpose: Print engine and SDK errors
-// Input  : idx - 
+// Input  : context - 
 //			*fmt - ... - 
 //-----------------------------------------------------------------------------
 void Error(eDLL_T context, const char* fmt, ...)
@@ -317,7 +512,7 @@ void Error(eDLL_T context, const char* fmt, ...)
 	{
 		wconsole->debug(svOut);
 #ifdef DEDICATED
-		RCONServer()->Send(RCONServer()->Serialize(svOut, "", sv_rcon::response_t::SERVERDATA_RESPONSE_CONSOLE_LOG));
+		RCONServer()->Send(RCONServer()->Serialize(svOut, "", sv_rcon::response_t::SERVERDATA_RESPONSE_CONSOLE_LOG, static_cast<int>(context)));
 #endif // DEDICATED
 	}
 	else
@@ -333,7 +528,7 @@ void Error(eDLL_T context, const char* fmt, ...)
 		}
 		wconsole->debug(svAnsiOut);
 #ifdef DEDICATED
-		RCONServer()->Send(RCONServer()->Serialize(svAnsiOut, "", sv_rcon::response_t::SERVERDATA_RESPONSE_CONSOLE_LOG));
+		RCONServer()->Send(RCONServer()->Serialize(svAnsiOut, "", sv_rcon::response_t::SERVERDATA_RESPONSE_CONSOLE_LOG, static_cast<int>(context)));
 #endif // DEDICATED
 	}
 
diff --git a/r5dev/tier0/dbg.h b/r5dev/tier0/dbg.h
index d1d202fb..e05f8d66 100644
--- a/r5dev/tier0/dbg.h
+++ b/r5dev/tier0/dbg.h
@@ -23,7 +23,7 @@ enum class eDLL_T : int
 	RTECH  = 5, // RTech API
 	MS     = 6, // Material System
 	NETCON = 7, // Net Console
-	NONE   = 8
+	COMMON   = 8
 };
 
 const string sDLL_T[9] = 
@@ -49,7 +49,7 @@ const static string sANSI_DLL_T[9] =
 	"\033[38;2;092;181;089mNative(R):",
 	"\033[38;2;192;105;173mNative(M):",
 	"\033[38;2;204;204;204mNetcon(X):",
-	""
+	"\033[38;2;255;204;153m"
 };
 extern std::mutex s_LogMutex;
 
@@ -58,6 +58,7 @@ extern std::mutex s_LogMutex;
 //////////////////////////////////////////////////////////////////////////
 
 // These functions do not return.
+PLATFORM_INTERFACE void NetMsg(int context, const char* fmt, ...) FMTFUNCTION(2, 3);
 PLATFORM_INTERFACE void DevMsg(eDLL_T context, const char* fmt, ...) FMTFUNCTION(2, 3);
 PLATFORM_INTERFACE void Warning(eDLL_T context, const char* fmt, ...) FMTFUNCTION(1, 2);
 PLATFORM_INTERFACE void Error(eDLL_T context, const char* fmt, ...) FMTFUNCTION(1, 2);
diff --git a/r5dev/vgui/vgui_debugpanel.cpp b/r5dev/vgui/vgui_debugpanel.cpp
index bec9f963..e845d981 100644
--- a/r5dev/vgui/vgui_debugpanel.cpp
+++ b/r5dev/vgui/vgui_debugpanel.cpp
@@ -256,6 +256,8 @@ Color CLogSystem::GetLogColorForType(LogType_t type) const
 		return { cl_conoverlay_native_ms_clr->GetColor() };
 	case LogType_t::NETCON_S:
 		return { cl_conoverlay_netcon_clr->GetColor() };
+	case LogType_t::COMMON_C:
+		return { cl_conoverlay_common_clr->GetColor() };
 	case LogType_t::WARNING_C:
 		return { cl_conoverlay_warning_clr->GetColor() };
 	case LogType_t::ERROR_C:
diff --git a/r5dev/vgui/vgui_debugpanel.h b/r5dev/vgui/vgui_debugpanel.h
index bedb4150..6ec1b2f6 100644
--- a/r5dev/vgui/vgui_debugpanel.h
+++ b/r5dev/vgui/vgui_debugpanel.h
@@ -4,7 +4,7 @@
 
 enum class LogType_t : int
 {
-	SCRIPT_SERVER,
+	SCRIPT_SERVER = -3,
 	SCRIPT_CLIENT,
 	SCRIPT_UI,
 	NATIVE_SERVER,
@@ -15,6 +15,7 @@ enum class LogType_t : int
 	NATIVE_RTECH,
 	NATIVE_MS,
 	NETCON_S,
+	COMMON_C,
 	WARNING_C,
 	ERROR_C,
 	NONE