diff --git a/loader/launcher/windows/CMakeLists.txt b/loader/launcher/windows/CMakeLists.txt
index b76c8dbe..28967a0d 100644
--- a/loader/launcher/windows/CMakeLists.txt
+++ b/loader/launcher/windows/CMakeLists.txt
@@ -1,7 +1,6 @@
 cmake_minimum_required(VERSION 3.21)
 
 add_library(ProxyLoader SHARED proxyLoader.c)
-target_compile_features(ProxyLoader PUBLIC cxx_std_17)
 set_target_properties(ProxyLoader PROPERTIES
 	PREFIX ""
 	OUTPUT_NAME "XInput9_1_0"
@@ -18,9 +17,9 @@ set_target_properties(ProxyLoader PROPERTIES
 	RUNTIME_OUTPUT_DIRECTORY "${GEODE_BIN_PATH}/nightly"
 	ARCHIVE_OUTPUT_DIRECTORY "${GEODE_BIN_PATH}/nightly"
 )
-add_library(fake-geode-loader SHARED fakeGeode.c)
-set_target_properties(fake-geode-loader PROPERTIES OUTPUT_NAME "Geode")
-target_link_libraries(ProxyLoader PRIVATE fake-geode-loader)
+
+string(REPLACE "." "_" GEODE_GD_VERSION_IDENTIFIER "_${GEODE_GD_VERSION}")
+target_compile_definitions(ProxyLoader PRIVATE GEODE_GD_VERSION_IDENTIFIER=${GEODE_GD_VERSION_IDENTIFIER})
 
 add_executable(Updater Updater.cpp)
 target_compile_features(Updater PUBLIC cxx_std_17)
@@ -46,16 +45,13 @@ if (MSVC)
 	include(CheckLinkerFlag)
 	check_linker_flag(CXX /NOEXP SUPPORTS_NOEXP)
 	if (SUPPORTS_NOEXP)
-		target_link_options(fake-geode-loader PRIVATE /NOEXP)
 		target_link_options(ProxyLoader PRIVATE /NOEXP)
 	endif()
 
-	target_link_options(fake-geode-loader PRIVATE /DEBUG:NONE)
 	target_link_options(ProxyLoader PRIVATE /NOIMPLIB /DEBUG:NONE)
 	target_link_options(Updater PRIVATE /DEBUG:NONE)
 
 	if (DEFINED ENV{GEODE_CI})
-		target_link_options(fake-geode-loader PRIVATE /INCREMENTAL:NO)
 		target_link_options(ProxyLoader PRIVATE /INCREMENTAL:NO)
 		target_link_options(Updater PRIVATE /INCREMENTAL:NO)
 	endif()
diff --git a/loader/launcher/windows/proxyLoader.c b/loader/launcher/windows/proxyLoader.c
index ff5becd1..6380f6cb 100644
--- a/loader/launcher/windows/proxyLoader.c
+++ b/loader/launcher/windows/proxyLoader.c
@@ -45,5 +45,69 @@ DWORD WINAPI xinputGetDSoundAudioDeviceGuids(DWORD dwUserIndex, GUID* pDSoundRen
 #pragma comment(linker, "/export:XInputGetCapabilities=_xinputGetCapabilities@12")
 #pragma comment(linker, "/export:XInputGetDSoundAudioDeviceGuids=_xinputGetDSoundAudioDeviceGuids@12")
 
-__declspec(dllimport) void fake();
-__declspec(dllexport) void sussy_impostor_sus_red_sus_vote_red_red_was_not_the_impostor() { fake(); }
+unsigned int getExeTimestamp() {
+    HANDLE hMod = GetModuleHandleA(NULL);
+    PIMAGE_DOS_HEADER dosHeader = (PIMAGE_DOS_HEADER)hMod;
+
+    if (dosHeader->e_magic == IMAGE_DOS_SIGNATURE) {
+        PIMAGE_NT_HEADERS ntHeader = (PIMAGE_NT_HEADERS)((uintptr_t)(hMod) + dosHeader->e_lfanew);
+
+        if (ntHeader->Signature == IMAGE_NT_SIGNATURE) {
+            return ntHeader->FileHeader.TimeDateStamp;
+        }
+    }
+    return 0;
+}
+
+BOOL fileExists(char const* path) {
+    DWORD attrib = GetFileAttributesA(path);
+
+    return (attrib != INVALID_FILE_ATTRIBUTES && !(attrib & FILE_ATTRIBUTE_DIRECTORY));
+}
+
+// Table originally from this gist by absolute:
+// https://gist.github.com/absoIute/ebe5da42d118109a03632c9751d86e19
+
+#define TIMESTAMP_FOR_1_900 1419173053
+#define TIMESTAMP_FOR_1_910 1419880840
+#define TIMESTAMP_FOR_1_920 1421745341
+#define TIMESTAMP_FOR_2_000 1440638199
+#define TIMESTAMP_FOR_2_001 1440643927
+#define TIMESTAMP_FOR_2_010 1443053232
+#define TIMESTAMP_FOR_2_011 1443077847
+#define TIMESTAMP_FOR_2_020 1443077847
+#define TIMESTAMP_FOR_2_100 1484612867
+#define TIMESTAMP_FOR_2_101 1484626658
+#define TIMESTAMP_FOR_2_102 1484737207
+#define TIMESTAMP_FOR_2_110 1510526914
+#define TIMESTAMP_FOR_2_111 1510538091
+#define TIMESTAMP_FOR_2_112 1510619253
+#define TIMESTAMP_FOR_2_113 1511220108
+#define TIMESTAMP_FOR_2_200 1702921605
+#define TIMESTAMP_FOR_2_201 1704582672
+#define TIMESTAMP_FOR_2_202 1704601266
+
+#define GEODE_WRAPPER_CONCAT(x, y) x##y
+#define GEODE_CONCAT(x, y) GEODE_WRAPPER_CONCAT(x, y)
+
+// Hello future person. if this is erroring then you need to add
+// the exe timestamp for whatever you set GEODE_GD_VERSION to. hope that helps!
+#define TIMESTAMP GEODE_CONCAT(TIMESTAMP_FOR, GEODE_GD_VERSION_IDENTIFIER)
+
+BOOL WINAPI DllMain(HINSTANCE module, DWORD reason, LPVOID _) {
+    if (reason != DLL_PROCESS_ATTACH)
+        return TRUE;
+    DisableThreadLibraryCalls(module);
+
+    if (fileExists("Geode.dll")) {
+        if (getExeTimestamp() == TIMESTAMP) {
+            // somehow, this works fine inside of dllmain :-)
+            // yes, even on wine.
+            LoadLibraryA("Geode.dll");
+        } else {
+            MessageBoxA(NULL, "GD version mismatch, not loading Geode.", "Unable to load Geode!", MB_OK | MB_ICONWARNING);
+        }
+    }
+
+    return TRUE;
+}
\ No newline at end of file
diff --git a/loader/src/platform/windows/VersionDetect.hpp b/loader/src/platform/windows/VersionDetect.hpp
deleted file mode 100644
index fc2ae132..00000000
--- a/loader/src/platform/windows/VersionDetect.hpp
+++ /dev/null
@@ -1,46 +0,0 @@
-#pragma once
-
-#include <unordered_map>
-#include <string_view>
-#include <Windows.h>
-
-// Original by absolute
-// https://gist.github.com/absoIute/ebe5da42d118109a03632c9751d86e19
-
-inline std::string_view detectGDVersion() {
-    static const std::unordered_map<uint32_t, std::string_view> buildMap = {
-        { 1419173053, "1.900" },
-        { 1419880840, "1.910" },
-        { 1421745341, "1.920" },
-        { 1440638199, "2.000" },
-        { 1440643927, "2.001" },
-        { 1443053232, "2.010" },
-        { 1443077847, "2.011" },
-        { 1443077847, "2.020" },
-        { 1484612867, "2.100" },
-        { 1484626658, "2.101" },
-        { 1484737207, "2.102" },
-        { 1510526914, "2.110" },
-        { 1510538091, "2.111" },
-        { 1510619253, "2.112" },
-        { 1511220108, "2.113" },
-        { 1702921605, "2.200" },
-        { 1704582672, "2.201" },
-        { 1704601266, "2.202" },
-    };
-
-    auto hMod = GetModuleHandleA(NULL);
-    auto dosHeader = reinterpret_cast<PIMAGE_DOS_HEADER>(hMod);
-
-    if (dosHeader->e_magic == IMAGE_DOS_SIGNATURE) {
-        auto ntHeader = reinterpret_cast<PIMAGE_NT_HEADERS>(reinterpret_cast<uintptr_t>(hMod) + dosHeader->e_lfanew);
-
-        if (ntHeader->Signature == IMAGE_NT_SIGNATURE) {
-            auto timeStamp = ntHeader->FileHeader.TimeDateStamp;
-            if (auto it = buildMap.find(timeStamp); it != buildMap.end())
-                return it->second;
-        }
-    }
-
-    return "";
-}
\ No newline at end of file
diff --git a/loader/src/platform/windows/main.cpp b/loader/src/platform/windows/main.cpp
index c1b1207e..d1afb002 100644
--- a/loader/src/platform/windows/main.cpp
+++ b/loader/src/platform/windows/main.cpp
@@ -4,7 +4,6 @@
 
 #include "../load.hpp"
 #include <Windows.h>
-#include "VersionDetect.hpp"
 
 #include "loader/LoaderImpl.hpp"
 using namespace geode::prelude;
@@ -43,10 +42,6 @@ int WINAPI gdMainHook(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmd
 }
 
 std::string loadGeode() {
-    if (detectGDVersion() != GEODE_STR(GEODE_GD_VERSION)) {
-        return "GD version mismatch, not loading geode.";
-    }
-
     auto process = GetCurrentProcess();
 
     constexpr size_t trampolineSize = 12;