diff --git a/src/switch_core.c b/src/switch_core.c
index dac26e80e1..cd90384443 100644
--- a/src/switch_core.c
+++ b/src/switch_core.c
@@ -1528,6 +1528,28 @@ SWITCH_DECLARE(switch_time_t) switch_core_uptime(void)
 	return switch_micro_time_now() - runtime.initiated;
 }
 
+
+#ifdef _MSC_VER
+static void win_shutdown(void)
+{
+	
+	HANDLE shutdown_event;	
+	char path[512];
+	/* for windows we need the event to signal for shutting down a background FreeSWITCH */
+	snprintf(path, sizeof(path), "Global\\Freeswitch.%d", getpid());
+	
+	/* open the event so we can signal it */
+	shutdown_event = OpenEvent(EVENT_MODIFY_STATE, FALSE, path);
+	
+	if (shutdown_event) {
+		/* signal the event to shutdown */
+		SetEvent(shutdown_event);
+		/* cleanup */
+		CloseHandle(shutdown_event);
+	}
+}
+#endif
+
 SWITCH_DECLARE(int32_t) switch_core_session_ctl(switch_session_ctl_t cmd, int32_t *val)
 {
 	if (switch_test_flag((&runtime), SCF_SHUTTING_DOWN)) {
@@ -1579,11 +1601,18 @@ SWITCH_DECLARE(int32_t) switch_core_session_ctl(switch_session_ctl_t cmd, int32_
 			
 			if (switch_test_flag((&runtime), SCF_SHUTDOWN_REQUESTED)) {
 				switch_set_flag((&runtime), SCF_NO_NEW_SESSIONS);
+#ifdef _MSC_VER
+				win_shutdown();
+#endif
+
 				if (*val) {
 					switch_set_flag((&runtime), SCF_RESTART);
 					switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "Restarting\n");
 				} else {
 					switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "Shutting down\n");
+#ifdef _MSC_VER
+					fclose(stdin);
+#endif
 				}
 				runtime.running = 0;
 			} else {
@@ -1595,26 +1624,9 @@ SWITCH_DECLARE(int32_t) switch_core_session_ctl(switch_session_ctl_t cmd, int32_
 	case SCSC_SHUTDOWN:
 
 #ifdef _MSC_VER
-		{
-			HANDLE shutdown_event;	
-			char path[512];
-			/* for windows we need the event to signal for shutting down a background FreeSWITCH */
-			snprintf(path, sizeof(path), "Global\\Freeswitch.%d", getpid());
-
-			/* open the event so we can signal it */
-			shutdown_event = OpenEvent(EVENT_MODIFY_STATE, FALSE, path);
-
-		
-			if (shutdown_event) {
-				/* signal the event to shutdown */
-				SetEvent(shutdown_event);
-				/* cleanup */
-				CloseHandle(shutdown_event);
-			}
-		}
+		win_shutdown();
 #endif
 
-
 		if (*val) {
 			switch_set_flag((&runtime), SCF_RESTART);
 			switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "Restarting\n");