diff --git a/src/GlobalEvents.hxx b/src/GlobalEvents.hxx
index ff4b47e5f778855f4a7a55b779aa935cf789d9c2..ff3c57df8f9b7d257d07aa07779f4116fae4ab20 100644
--- a/src/GlobalEvents.hxx
+++ b/src/GlobalEvents.hxx
@@ -33,11 +33,6 @@ namespace GlobalEvents {
 		/** the current song's tag has changed */
 		TAG,
 
-#ifdef WIN32
-		/** shutdown requested */
-		SHUTDOWN,
-#endif
-
 		MAX
 	};
 
diff --git a/src/Main.cxx b/src/Main.cxx
index 6529c4fc4dc3fa822ac22ae075860324af0509f2..072e2e4e0076f316990f924108f0ea91237f5e2a 100644
--- a/src/Main.cxx
+++ b/src/Main.cxx
@@ -385,19 +385,6 @@ idle_event_emitted(void)
 		state_file->CheckModified();
 }
 
-#ifdef WIN32
-
-/**
- * Handler for GlobalEvents::SHUTDOWN.
- */
-static void
-shutdown_event_emitted(void)
-{
-	instance->Shutdown();
-}
-
-#endif
-
 #ifndef ANDROID
 
 int main(int argc, char *argv[])
@@ -536,9 +523,6 @@ try {
 
 	GlobalEvents::Initialize(*instance->event_loop);
 	GlobalEvents::Register(GlobalEvents::IDLE, idle_event_emitted);
-#ifdef WIN32
-	GlobalEvents::Register(GlobalEvents::SHUTDOWN, shutdown_event_emitted);
-#endif
 
 	if (!ConfigureFS(error)) {
 		LogError(error);
diff --git a/src/win32/Win32Main.cxx b/src/win32/Win32Main.cxx
index edaf0af024a14aa8b8ddb907e0480e2a4ad855ea..75587f79ceb67075b733e062208961e92f12fce9 100644
--- a/src/win32/Win32Main.cxx
+++ b/src/win32/Win32Main.cxx
@@ -23,7 +23,7 @@
 #ifdef WIN32
 
 #include "Compiler.h"
-#include "GlobalEvents.hxx"
+#include "Instance.hxx"
 #include "system/FatalError.hxx"
 
 #include <cstdlib>
@@ -71,7 +71,7 @@ service_dispatcher(gcc_unused DWORD control, gcc_unused DWORD event_type,
 	switch (control) {
 	case SERVICE_CONTROL_SHUTDOWN:
 	case SERVICE_CONTROL_STOP:
-		GlobalEvents::Emit(GlobalEvents::SHUTDOWN);
+		instance->Shutdown();
 		return NO_ERROR;
 	default:
 		return NO_ERROR;
@@ -107,7 +107,7 @@ console_handler(DWORD event)
 			// regardless our thread is still active.
 			// If this did not happen within 3 seconds
 			// let's shutdown anyway.
-			GlobalEvents::Emit(GlobalEvents::SHUTDOWN);
+			instance->Shutdown();
 			// Under debugger it's better to wait indefinitely
 			// to allow debugging of shutdown code.
 			Sleep(IsDebuggerPresent() ? INFINITE : 3000);