diff --git a/src/sbbs3/main.cpp b/src/sbbs3/main.cpp
index a211f71c29717efa0530775257afcc84b215773a..39ccf982c63ecaafda3b2c1497a34a2c25ccb0b0 100644
--- a/src/sbbs3/main.cpp
+++ b/src/sbbs3/main.cpp
@@ -877,15 +877,17 @@ void event_thread(void* arg)
 	int			i,j,k;
 	int			file;
 	int			offset;
+	bool		check_semaphores;
 	ulong		l;
 	time_t		now;
-	struct tm	now_tm;
-	struct tm*	tm;
-	time_t		lastnodechk;
+	time_t		lastsemchk=0;
+	time_t		lastnodechk=0;
 	time_t		lastprepack=0;
 	node_t		node;
 	glob_t		g;
 	sbbs_t*		sbbs = (sbbs_t*) arg;
+	struct tm	now_tm;
+	struct tm*	tm;
 
 	eprintf("BBS Events thread started");
 
@@ -901,12 +903,18 @@ void event_thread(void* arg)
 		sbbs->js_initcx();	/* This must be done in the context of the event thread */
 #endif
 
-	while(1) {
+	while(!sbbs->terminated && telnet_socket!=INVALID_SOCKET) {
 
-		pthread_mutex_lock(&event_mutex);
+		now=time(NULL);
+		now_tm=*gmtime(&now);
 
-		if(sbbs->terminated || telnet_socket==INVALID_SOCKET)
-			break;
+		if(now-lastsemchk>=sbbs->cfg.node_sem_check) {
+			check_semaphores=true;
+			lastsemchk=now;
+		} else
+			check_semaphores=false;
+
+		pthread_mutex_lock(&event_mutex);
 
 		sbbs->online=0;	/* reset this from ON_LOCAL */
 
@@ -968,11 +976,8 @@ void event_thread(void* arg)
 			scfg_reloaded=false;
 		}
 
-		now=time(NULL);
-		now_tm=*gmtime(&now);
-
 		/* QWK events */
-		if(!(startup->options&BBS_OPT_NO_QWK_EVENTS)) {
+		if(check_semaphores && !(startup->options&BBS_OPT_NO_QWK_EVENTS)) {
 			/* Import any REP files that have magically appeared (via FTP perhaps) */
 			sprintf(str,"%sfile/",sbbs->cfg.data_dir);
 			offset=strlen(str);
@@ -1084,52 +1089,56 @@ void event_thread(void* arg)
 			}
 		}
 
-		/* Node Daily Events */
-		for(i=first_node;i<=last_node;i++) {
-			// Node Daily Event
-			sbbs->getnodedat(i,&node,0);
-			if(node.misc&NODE_EVENT && node.status==NODE_WFC) {
-				sbbs->getnodedat(i,&node,1);
-				node.status=NODE_EVENT_RUNNING;
-				sbbs->putnodedat(i,&node);
-				if(sbbs->cfg.node_daily[0]) {
-					sbbs->cfg.node_num=i;
-					strcpy(sbbs->cfg.node_dir, sbbs->cfg.node_path[i-1]);
-
-					eprintf("Running node %u daily event",i);
-					// status("Running node daily event");
-					sbbs->logentry("!:","Run node daily event");
-					sbbs->external(
-						 sbbs->cmdstr(sbbs->cfg.node_daily,nulstr,nulstr,NULL)
-						,EX_OFFLINE);
-					// status(STATUS_WFC);
+		if(check_semaphores) {
+			/* Node Daily Events */
+			for(i=first_node;i<=last_node;i++) {
+				// Node Daily Event
+				sbbs->getnodedat(i,&node,0);
+				if(node.misc&NODE_EVENT && node.status==NODE_WFC) {
+					sbbs->getnodedat(i,&node,1);
+					node.status=NODE_EVENT_RUNNING;
+					sbbs->putnodedat(i,&node);
+					if(sbbs->cfg.node_daily[0]) {
+						sbbs->cfg.node_num=i;
+						strcpy(sbbs->cfg.node_dir, sbbs->cfg.node_path[i-1]);
+
+						eprintf("Running node %u daily event",i);
+						// status("Running node daily event");
+						sbbs->logentry("!:","Run node daily event");
+						sbbs->external(
+							 sbbs->cmdstr(sbbs->cfg.node_daily,nulstr,nulstr,NULL)
+							,EX_OFFLINE);
+						// status(STATUS_WFC);
+					}
+					sbbs->getnodedat(i,&node,1);
+					node.misc&=~NODE_EVENT;
+					node.status=NODE_WFC;
+					node.useron=0;
+					sbbs->putnodedat(i,&node); 
 				}
-				sbbs->getnodedat(i,&node,1);
-				node.misc&=~NODE_EVENT;
-				node.status=NODE_WFC;
-				node.useron=0;
-				sbbs->putnodedat(i,&node); 
 			}
-		}
 
-		/* QWK Networking Call-out sempahores */
-		for(i=0;i<sbbs->cfg.total_qhubs;i++)
-			if(sbbs->cfg.qhub[i]->node>=first_node 
-				&& sbbs->cfg.qhub[i]->node<=last_node) {
-				sprintf(str,"%sqnet/%s.now",sbbs->cfg.data_dir,sbbs->cfg.qhub[i]->id);
-				if(fexist(str))
-					sbbs->cfg.qhub[i]->last=-1; 
+			/* QWK Networking Call-out sempahores */
+			for(i=0;i<sbbs->cfg.total_qhubs;i++) {
+				if(sbbs->cfg.qhub[i]->node>=first_node 
+					&& sbbs->cfg.qhub[i]->node<=last_node) {
+					sprintf(str,"%sqnet/%s.now",sbbs->cfg.data_dir,sbbs->cfg.qhub[i]->id);
+					if(fexist(str))
+						sbbs->cfg.qhub[i]->last=-1; 
+				}
 			}
 
-		/* Timed Event sempahores */
-		for(i=0;i<sbbs->cfg.total_events;i++)
-			if((sbbs->cfg.event[i]->node>=first_node
-				&& sbbs->cfg.event[i]->node<=last_node)
-				|| sbbs->cfg.event[i]->misc&EVENT_EXCL) {
-				sprintf(str,"%s%s.now",sbbs->cfg.data_dir,sbbs->cfg.event[i]->code);
-				if(fexist(str))
-					sbbs->cfg.event[i]->last=-1; 
+			/* Timed Event sempahores */
+			for(i=0;i<sbbs->cfg.total_events;i++) {
+				if((sbbs->cfg.event[i]->node>=first_node
+					&& sbbs->cfg.event[i]->node<=last_node)
+					|| sbbs->cfg.event[i]->misc&EVENT_EXCL) {
+					sprintf(str,"%s%s.now",sbbs->cfg.data_dir,sbbs->cfg.event[i]->code);
+					if(fexist(str))
+						sbbs->cfg.event[i]->last=-1; 
+				}
 			}
+		}
 
 		/* QWK Networking Call-out Events */
 		for(i=0;i<sbbs->cfg.total_qhubs;i++) {
@@ -1137,25 +1146,27 @@ void event_thread(void* arg)
 				sbbs->cfg.qhub[i]->node>last_node)
 				continue;
 
-			// See if any packets have come in
-			for(j=0;j<101;j++) {
-				sprintf(str,"%s%s.q%c%c",sbbs->cfg.data_dir,sbbs->cfg.qhub[i]->id
-					,j>10 ? ((j-1)/10)+'0' : 'w'
-					,j ? ((j-1)%10)+'0' : 'k');
-				if(fexist(str)) {
-					sbbs->delfiles(sbbs->cfg.temp_dir,ALLFILES);
-					if(sbbs->unpack_qwk(str,i)==false) {
-						char newname[MAX_PATH+1];
-						sprintf(newname,"%s.%lx.bad",str,now);
-						remove(newname);
-						if(rename(str,newname)==0) {
-							char logmsg[MAX_PATH*3];
-							sprintf(logmsg,"%s renamed to %s",str,newname);
-							sbbs->logline("Q!",logmsg);
+			if(check_semaphores) {
+				// See if any packets have come in
+				for(j=0;j<101;j++) {
+					sprintf(str,"%s%s.q%c%c",sbbs->cfg.data_dir,sbbs->cfg.qhub[i]->id
+						,j>10 ? ((j-1)/10)+'0' : 'w'
+						,j ? ((j-1)%10)+'0' : 'k');
+					if(fexist(str)) {
+						sbbs->delfiles(sbbs->cfg.temp_dir,ALLFILES);
+						if(sbbs->unpack_qwk(str,i)==false) {
+							char newname[MAX_PATH+1];
+							sprintf(newname,"%s.%lx.bad",str,now);
+							remove(newname);
+							if(rename(str,newname)==0) {
+								char logmsg[MAX_PATH*3];
+								sprintf(logmsg,"%s renamed to %s",str,newname);
+								sbbs->logline("Q!",logmsg);
+							}
 						}
-					}
-					remove(str);
-				} 
+						remove(str);
+					} 
+				}
 			}
 
 			tm=gmtime(&sbbs->cfg.qhub[i]->last); /* Qnet call out based on time */
@@ -1280,7 +1291,7 @@ void event_thread(void* arg)
 						// status(str);
 						lastnodechk=0;	 /* really last event time check */
 						while(!sbbs->terminated) {
-							mswait(sbbs->cfg.node_sem_check*1000);
+							mswait(1000);
 							now=time(NULL);
 							if(now-lastnodechk<10)
 								continue;
@@ -1316,7 +1327,7 @@ void event_thread(void* arg)
 							"running timed event.");
 						lastnodechk=0;
 						while(!sbbs->terminated) {
-							mswait(sbbs->cfg.node_sem_check*1000);
+							mswait(1000);
 							now=time(NULL);
 							if(now-lastnodechk<10)
 								continue;
@@ -1415,7 +1426,7 @@ void event_thread(void* arg)
 		}
 		pthread_mutex_unlock(&event_mutex);
 
-		mswait(sbbs->cfg.node_sem_check*1000);
+		mswait(1000);
 	}
 	sbbs->cfg.node_num=0;
     sbbs->event_thread_running = false;