diff --git a/src/main.c b/src/main.c
index 9ced10283dd4cb87c054973f5797abab403d03ab..1b21c00156ac850d4be7fad7658f91544f2e20a8 100644
--- a/src/main.c
+++ b/src/main.c
@@ -933,7 +933,9 @@ int main(int argc, char *argv[])
 	core_def->define(core_def, "te4core", -1, NULL, NULL, NULL, NULL, 0, NULL);
 
 #ifdef SELFEXE_WINDOWS
-	freopen ("te4_log.txt", "w", stdout);
+	FILE *logfile;
+	logfile = freopen ("te4_log.txt", "w", stdout);
+	bool windows_autoflush = FALSE;
 #endif
 
 	g_argc = argc;
@@ -948,7 +950,14 @@ int main(int argc, char *argv[])
 		if (!strncmp(arg, "-u", 2)) core_def->reboot_name = strdup(arg+2);
 		if (!strncmp(arg, "-E", 2)) core_def->reboot_einfo = strdup(arg+2);
 		if (!strncmp(arg, "-n", 2)) core_def->reboot_new = 1;
-		if (!strncmp(arg, "--flush-stdout", 14)) setvbuf(stdout, (char *) NULL, _IOLBF, 0);;
+		if (!strncmp(arg, "--flush-stdout", 14))
+		{
+			setvbuf(stdout, (char *) NULL, _IOLBF, 0);
+#ifdef SELFEXE_WINDOWS
+			setvbuf(logfile, NULL, _IONBF, 2);
+			windows_autoflush = TRUE;
+#endif
+		}
 		if (!strncmp(arg, "--no-debug", 10)) no_debug = TRUE;
 	}
 
@@ -1027,6 +1036,9 @@ int main(int argc, char *argv[])
 	{
 		if (!isActive || tickPaused) SDL_WaitEvent(NULL);
 
+#ifdef SELFEXE_WINDOWS
+		if (windows_autoflush) _commit(_fileno(stdout));
+#endif
 		/* handle the events in the queue */
 		while (SDL_PollEvent(&event))
 		{