diff --git a/src/sbbs3/sbbscon.c b/src/sbbs3/sbbscon.c
index 38843017aff6f7622bc215e1e3c0b7770c748348..e4393784599b91b3f2d9d301f2cdf45cc7938ef7 100644
--- a/src/sbbs3/sbbscon.c
+++ b/src/sbbs3/sbbscon.c
@@ -45,12 +45,14 @@
 #define SBBSCON_VERSION		"1.10"
 
 /* Global variables */
-BOOL			bbs_running=FALSE;
-bbs_startup_t	bbs_startup;
-BOOL			ftp_running=FALSE;
-ftp_startup_t	ftp_startup;
-BOOL			mail_running=FALSE;
-mail_startup_t	mail_startup;
+BOOL				bbs_running=FALSE;
+bbs_startup_t		bbs_startup;
+BOOL				ftp_running=FALSE;
+ftp_startup_t		ftp_startup;
+BOOL				mail_running=FALSE;
+mail_startup_t		mail_startup;
+BOOL				services_running=FALSE;
+services_startup_t	services_startup;
 
 static const char* prompt = "Command (?=Help): ";
 
@@ -205,6 +207,43 @@ static void mail_terminated(int code)
 	mail_running=FALSE;
 }
 
+/****************************************************************************/
+/* Services local/log print routine											*/
+/****************************************************************************/
+static int services_lputs(char *str)
+{
+	char		logline[512];
+	char		tstr[64];
+	time_t		t;
+	struct tm*	tm_p;
+
+	t=time(NULL);
+	tm_p=localtime(&t);
+	if(tm_p==NULL)
+		tstr[0]=0;
+	else
+		sprintf(tstr,"%d/%d %02d:%02d:%02d "
+			,tm_p->tm_mon+1,tm_p->tm_mday
+			,tm_p->tm_hour,tm_p->tm_min,tm_p->tm_sec);
+
+	sprintf(logline,"%ssvc  %.*s",tstr,sizeof(logline)-2,str);
+	truncsp(logline);
+	lputs(logline);
+	
+    return(strlen(logline)+1);
+}
+
+static void services_started(void)
+{
+	services_running=TRUE;
+}
+
+static void services_terminated(int code)
+{
+	services_running=FALSE;
+}
+
+
 #ifdef __unix__
 void _sighandler_quit(int sig)
 {
@@ -310,6 +349,14 @@ int main(int argc, char** argv)
 	}
 #endif /* __unix__ */
 
+	/* Initialize Services startup structure */
+    memset(&services_startup,0,sizeof(services_startup));
+    services_startup.size=sizeof(services_startup);
+	services_startup.lputs=services_lputs;
+    services_startup.started=services_started;
+    services_startup.terminated=services_terminated;
+    strcpy(services_startup.ctrl_dir,ctrl_dir);
+
 	/* Process arguments */
 	for(i=1;i<argc;i++) {
 		arg=argv[i];
@@ -389,6 +436,7 @@ int main(int argc, char** argv)
 	_beginthread((void(*)(void*))bbs_thread,0,&bbs_startup);
 	_beginthread((void(*)(void*))ftp_server,0,&ftp_startup);
 	_beginthread((void(*)(void*))mail_server,0,&mail_startup);
+	_beginthread((void(*)(void*))services_thread,0,&services_startup);
 
 #ifdef __unix__
 	// Set up QUIT-type signals so they clean up properly.
@@ -429,8 +477,9 @@ int main(int argc, char** argv)
 	bbs_terminate();
 	ftp_terminate();
 	mail_terminate();
+	services_terminate();
 
-	while(bbs_running || ftp_running || mail_running)
+	while(bbs_running || ftp_running || mail_running || services_running)
 		mswait(1);
 
 	/* erase the prompt */