diff --git a/src/doomdef.h b/src/doomdef.h
index 216b4fd90b1ca0a4a5c0c6398662628df28f3c9c..d13ff9bc04542a69d3a9fae40b506bd63fa077b4 100644
--- a/src/doomdef.h
+++ b/src/doomdef.h
@@ -125,10 +125,6 @@
 #define LOGMESSAGES // write message in log.txt
 #endif
 
-#if (defined (__unix__) && !defined (_MSDOS)) || defined (UNIXCOMMON)
-#define NEWSIGNALHANDLER
-#endif
-
 #ifdef LOGMESSAGES
 extern FILE *logstream;
 #endif
diff --git a/src/i_system.h b/src/i_system.h
index 131557ae9cf68b29b0f101054f4b343c3a6aa39e..831acda3225692a43804c76b4f54db92967813b9 100644
--- a/src/i_system.h
+++ b/src/i_system.h
@@ -84,10 +84,6 @@ ticcmd_t *I_BaseTiccmd2(void);
 */
 void I_Quit(void) FUNCNORETURN;
 
-/**	\brief Print a message and text box about a signal that was raised.
-*/
-void I_ReportSignal(int num, int coredumped);
-
 typedef enum
 {
 	EvilForce = -1,
diff --git a/src/sdl/i_main.c b/src/sdl/i_main.c
index 16d0a242c0d19f00e7a73c721c4e9fa262681598..69e49b4a7fea8fab1b629ff684229822deb19c01 100644
--- a/src/sdl/i_main.c
+++ b/src/sdl/i_main.c
@@ -28,11 +28,6 @@
 
 #include "time.h" // For log timestamps
 
-#ifdef NEWSIGNALHANDLER
-#include <errno.h>
-#include <sys/wait.h>
-#endif
-
 #ifdef HAVE_SDL
 
 #ifdef HAVE_TTF
@@ -187,52 +182,6 @@ int main(int argc, char **argv)
 	MakeCodeWritable();
 #endif
 
-#ifdef NEWSIGNALHANDLER
-	switch (fork())
-	{
-		case -1:
-			I_Error(
-					"Error setting up signal reporting: fork(): %s\n",
-					strerror(errno)
-			);
-			break;
-		case 0:
-			break;
-		default:
-			{
-				int status;
-				int signum;
-				if (wait(&status) == -1)
-				{
-					I_Error(
-							"Error setting up signal reporting: fork(): %s\n",
-							strerror(errno)
-					);
-				}
-				else
-				{
-					if (WIFSIGNALED (status))
-					{
-						signum = WTERMSIG (status);
-#ifdef WCOREDUMP
-						I_ReportSignal(signum, WCOREDUMP (status));
-#else
-						I_ReportSignal(signum, 0);
-#endif
-						status = 128 + signum;
-					}
-					else if (WIFEXITED (status))
-					{
-						status = WEXITSTATUS (status);
-					}
-
-					I_ShutdownSystem();
-					exit(status);
-				}
-			}
-	}
-#endif/*NEWSIGNALHANDLER*/
-
 	// startup SRB2
 	CONS_Printf("Setting up SRB2...\n");
 	D_SRB2Main();
diff --git a/src/sdl/i_system.c b/src/sdl/i_system.c
index e58691de6246e346abee0cb7727dfbf2eaffb056..9245673cc687548a486ee6eca1a934f6ad4f9199 100644
--- a/src/sdl/i_system.c
+++ b/src/sdl/i_system.c
@@ -102,6 +102,12 @@ typedef LPVOID (WINAPI *p_MapViewOfFile) (HANDLE, DWORD, DWORD, DWORD, SIZE_T);
 #endif
 #endif
 
+#if (defined (__unix__) && !defined (_MSDOS)) || defined (UNIXCOMMON)
+#include <errno.h>
+#include <sys/wait.h>
+#define NEWSIGNALHANDLER
+#endif
+
 #ifndef NOMUMBLE
 #ifdef __linux__ // need -lrt
 #include <sys/mman.h>
@@ -229,7 +235,7 @@ SDL_bool framebuffer = SDL_FALSE;
 
 UINT8 keyboard_started = false;
 
-void I_ReportSignal(int num, int coredumped)
+static void I_ReportSignal(int num, int coredumped)
 {
 	//static char msg[] = "oh no! back to reality!\r\n";
 	const char *      sigmsg;
@@ -2160,6 +2166,53 @@ void I_Sleep(void)
 		SDL_Delay(cv_sleep.value);
 }
 
+#ifdef NEWSIGNALHANDLER
+static void I_Fork(void)
+{
+	int status;
+	int signum;
+	switch (fork())
+	{
+		case -1:
+			I_Error(
+					"Error setting up signal reporting: fork(): %s\n",
+					strerror(errno)
+			);
+			break;
+		case 0:
+			break;
+		default:
+			if (wait(&status))
+			{
+				I_Error(
+						"Error setting up signal reporting: fork(): %s\n",
+						strerror(errno)
+				);
+			}
+			else
+			{
+				if (WIFSIGNALED (status))
+				{
+					signum = WTERMSIG (status);
+#ifdef WCOREDUMP
+					I_ReportSignal(signum, WCOREDUMP (status));
+#else
+					I_ReportSignal(signum, 0);
+#endif
+					status = 128 + signum;
+				}
+				else if (WIFEXITED (status))
+				{
+					status = WEXITSTATUS (status);
+				}
+
+				I_ShutdownSystem();
+				exit(status);
+			}
+	}
+}
+#endif/*NEWSIGNALHANDLER*/
+
 INT32 I_StartupSystem(void)
 {
 	SDL_version SDLcompiled;
@@ -2167,6 +2220,9 @@ INT32 I_StartupSystem(void)
 	SDL_VERSION(&SDLcompiled)
 	SDL_GetVersion(&SDLlinked);
 	I_StartupConsole();
+#ifdef NEWSIGNALHANDLER
+	I_Fork();
+#endif
 	I_OutputMsg("Compiled for SDL version: %d.%d.%d\n",
 	 SDLcompiled.major, SDLcompiled.minor, SDLcompiled.patch);
 	I_OutputMsg("Linked with SDL version: %d.%d.%d\n",