diff --git a/src/sbbs3/sbbscon.c b/src/sbbs3/sbbscon.c
index a4fa4da4edb6ca6426c04cc172794eb66db3474f..c00749afb4e0d94265dde55b34f4922cdcb3117b 100644
--- a/src/sbbs3/sbbscon.c
+++ b/src/sbbs3/sbbscon.c
@@ -665,20 +665,25 @@ static void web_terminated(int code)
 	web_stopped=TRUE;
 }
 
+static void terminate()
+{
+	bbs_terminate();
+	ftp_terminate();
+	web_terminate();
+	mail_terminate();
+#ifdef JAVASCRIPT
+	services_terminate();
+#endif
 
+	while(bbs_running || ftp_running || web_running || mail_running || services_running)
+		SLEEP(1);
+}
 
 #ifdef __unix__
 void _sighandler_quit(int sig)
 {
-    // Close threads
-    bbs_terminate();
-    ftp_terminate();
-    mail_terminate();
-#ifdef JAVASCRIPT
-	services_terminate();
-#endif
-    while(bbs_running || ftp_running || web_running || mail_running || services_running)
-		mswait(1);
+	terminate();
+
 	if(is_daemon)
 		unlink(SBBS_PID_FILE);
 
@@ -1356,15 +1361,7 @@ int main(int argc, char** argv)
 			lputs("");	/* redisplay prompt */
 		}
 
-	bbs_terminate();
-	ftp_terminate();
-	mail_terminate();
-#ifdef JAVASCRIPT
-	services_terminate();
-#endif
-
-	while(bbs_running || ftp_running || web_running || mail_running || services_running)
-		SLEEP(1);
+	terminate();
 
 	/* erase the prompt */
 	printf("\r%*s\r",prompt_len,"");