diff --git a/r5dev/engine/enginetrace.cpp b/r5dev/engine/enginetrace.cpp
new file mode 100644
index 00000000..c57aad05
--- /dev/null
+++ b/r5dev/engine/enginetrace.cpp
@@ -0,0 +1,18 @@
+//============================================================================//
+//
+// Purpose: Ray Tracing
+//
+//============================================================================//
+
+#include "core/stdafx.h"
+#include "engine/enginetrace.h"
+
+void CEngineTrace_Attach()
+{
+
+}
+
+void CEngineTrace_Dettach()
+{
+
+}
diff --git a/r5dev/engine/enginetrace.h b/r5dev/engine/enginetrace.h
new file mode 100644
index 00000000..b9c11ebe
--- /dev/null
+++ b/r5dev/engine/enginetrace.h
@@ -0,0 +1,92 @@
+#pragma once
+
+#include "mathlib/mathlib.h"
+
+// EVERYTHING IN HERE STILL NEEDS TESTING!!!!
+
+struct Ray_t
+{
+	VectorAligned m_Start;
+	VectorAligned m_Delta;
+	VectorAligned m_StartOffset;
+	VectorAligned m_Extents;
+	char gap2C[0x10];
+	void* m_pWorldAxisTransform;
+	bool m_IsRay;
+	bool m_IsSwept;
+
+	void Init(Vector3D const& start, Vector3D const& end)
+	{
+		m_Delta = end - start;
+
+		m_IsSwept = (m_Delta.LengthSqr() != 0);
+
+		m_Extents.Init();
+
+		m_pWorldAxisTransform = NULL;
+		m_IsRay = true;
+
+		m_StartOffset.Init();
+		m_Start = start;
+	}
+};
+
+struct csurface_t
+{
+	const char* name;
+	int surfaceProp;
+	uint16_t flags;
+};
+
+struct trace_t
+{
+	Vector3D start;
+	float unk1;
+	Vector3D endpos;
+	float unk2;
+	cplane_t plane;
+	float fraction;
+	int contents;
+	bool allsolid;
+	bool startsolid;
+	char gap3A[0x6];
+	csurface_t surface;
+	float fractionleftsolid;
+	int hitgroup;
+	short physicsBone;
+	char gap5A[0x6];
+	void* hit_entity;
+	int hitbox;
+	char gap6C[0x114];
+}; //Size: 0x0180
+
+class CEngineTrace
+{
+	virtual void stub_0() const = 0;
+	virtual void stub_1() const = 0;
+	virtual void ClipRayToCollideable(__m128* a2, unsigned int a3, __int64* a4, void* a5) = 0;
+	virtual void stub_3() const = 0;
+	virtual void TraceRay(const Ray_t& ray, unsigned int fMask, trace_t pTrace) = 0;
+};
+
+/* ==== CENGINETRACE ======================================================================================================================================================= */
+
+inline CEngineTrace* g_pEngineTrace = nullptr;
+
+///////////////////////////////////////////////////////////////////////////////
+void CEngineTrace_Attach();
+void CEngineTrace_Detach();
+
+///////////////////////////////////////////////////////////////////////////////
+class VEngine_Trace : public IDetour
+{
+	virtual void GetAdr(void) const { }
+	virtual void GetFun(void) const { }
+	virtual void GetVar(void) const { }
+	virtual void GetCon(void) const { }
+	virtual void Attach(void) const { }
+	virtual void Detach(void) const { }
+};
+///////////////////////////////////////////////////////////////////////////////
+
+REGISTER(VEngine_Trace);
\ No newline at end of file
diff --git a/r5dev/launcher/IApplication.cpp b/r5dev/launcher/IApplication.cpp
index e0b13070..bd8d5aff 100644
--- a/r5dev/launcher/IApplication.cpp
+++ b/r5dev/launcher/IApplication.cpp
@@ -20,6 +20,7 @@
 #include "engine/server/sv_main.h"
 #include "server/vengineserver_impl.h"
 #include "client/cdll_engine_int.h"
+#include "engine/enginetrace.h"
 #ifndef DEDICATED
 #include "gameui/IConsole.h"
 #endif // !DEDICATED
@@ -75,6 +76,7 @@ bool CModAppSystemGroup::Create(CModAppSystemGroup* pModAppSystemGroup)
 
 #ifndef DEDICATED
 	g_pClientEntityList = g_pFactory->GetFactoryPtr("VClientEntityList003", false).RCast<IClientEntityList*>();
+	g_pEngineTrace = g_pFactory->GetFactoryPtr("EngineTraceClient004", false).RCast<CEngineTrace*>();
 
 	for (auto& map : g_pCVar->DumpToMap())
 	{
diff --git a/r5dev/vproj/gamesdk.vcxproj b/r5dev/vproj/gamesdk.vcxproj
index c132b008..4225375e 100644
--- a/r5dev/vproj/gamesdk.vcxproj
+++ b/r5dev/vproj/gamesdk.vcxproj
@@ -35,6 +35,7 @@
     <ClCompile Include="..\engine\cmodel_bsp.cpp" />
     <ClCompile Include="..\engine\common.cpp" />
     <ClCompile Include="..\engine\debugoverlay.cpp" />
+    <ClCompile Include="..\engine\enginetrace.cpp" />
     <ClCompile Include="..\engine\gl_rsurf.cpp" />
     <ClCompile Include="..\engine\gl_screen.cpp" />
     <ClCompile Include="..\engine\host.cpp" />
@@ -190,6 +191,7 @@
     <ClInclude Include="..\engine\common.h" />
     <ClInclude Include="..\engine\datablock.h" />
     <ClInclude Include="..\engine\debugoverlay.h" />
+    <ClInclude Include="..\engine\enginetrace.h" />
     <ClInclude Include="..\engine\framesnapshot.h" />
     <ClInclude Include="..\engine\gl_matsysiface.h" />
     <ClInclude Include="..\engine\gl_model_private.h" />
diff --git a/r5dev/vproj/gamesdk.vcxproj.filters b/r5dev/vproj/gamesdk.vcxproj.filters
index a77b2d6b..6e25596f 100644
--- a/r5dev/vproj/gamesdk.vcxproj.filters
+++ b/r5dev/vproj/gamesdk.vcxproj.filters
@@ -648,6 +648,9 @@
     <ClCompile Include="..\engine\sys_mainwind.cpp">
       <Filter>sdk\engine</Filter>
     </ClCompile>
+    <ClCompile Include="..\engine\enginetrace.cpp">
+      <Filter>sdk\engine</Filter>
+    </ClCompile>
   </ItemGroup>
   <ItemGroup>
     <ClInclude Include="..\client\cdll_engine_int.h">
@@ -1877,6 +1880,9 @@
     <ClInclude Include="..\public\materialsystem\shader_vcs_version.h">
       <Filter>sdk\public\materialsystem</Filter>
     </ClInclude>
+    <ClInclude Include="..\engine\enginetrace.h">
+      <Filter>sdk\engine</Filter>
+    </ClInclude>
   </ItemGroup>
   <ItemGroup>
     <Image Include="..\shared\resource\lockedserver.png">