diff --git a/src/syncterm/term.c b/src/syncterm/term.c
index dd9668513256cc738165fe0d680a35be387e0ae6..7dbee7492a96fd5279b9b2aa5347cf897ae1bb4b 100644
--- a/src/syncterm/term.c
+++ b/src/syncterm/term.c
@@ -260,15 +260,20 @@ static BOOL zmodem_check_abort(void* vp)
 {
 	struct zmodem_cbdata	*zcb=(struct zmodem_cbdata *)vp;
 	zmodem_t*				zm=zcb->zm;
-
-	if(zm!=NULL && kbhit()) {
-		switch(getch()) {
-			case ESC:
-			case CTRL_C:
-			case CTRL_X:
-				zm->cancelled=TRUE;
-				zm->local_abort=TRUE;
-				break;
+	static time_t			last_check=0;
+	time_t					now=time(NULL);
+
+	if(last_check != now) {
+		last_check=now;
+		if(zm!=NULL && kbhit()) {
+			switch(getch()) {
+				case ESC:
+				case CTRL_C:
+				case CTRL_X:
+						zm->cancelled=TRUE;
+					zm->local_abort=TRUE;
+					break;
+			}
 		}
 	}
 	return(zm->cancelled);
@@ -1036,7 +1041,7 @@ void zmodem_upload(struct bbslist *bbs, FILE *fp, char *path)
 		,lputs, zmodem_progress
 		,send_byte,recv_byte
 		,is_connected
-		,NULL /* zmodem_check_abort */
+		,zmodem_check_abort
 		,data_waiting
 		,flush_send);
 	zm.log_level=&log_level;
@@ -1145,7 +1150,7 @@ void zmodem_download(struct bbslist *bbs)
 		,lputs, zmodem_progress
 		,send_byte,recv_byte
 		,is_connected
-		,NULL /* zmodem_check_abort */
+		,zmodem_check_abort
 		,data_waiting
 		,flush_send);
 	zm.log_level=&log_level;
@@ -1175,13 +1180,19 @@ ulong	block_num;						/* Block number 					*/
 static BOOL xmodem_check_abort(void* vp)
 {
 	xmodem_t* xm = (xmodem_t*)vp;
-	if(xm!=NULL && kbhit()) {
-		switch(getch()) {
-			case ESC:
-			case CTRL_C:
-			case CTRL_X:
-				xm->cancelled=TRUE;
-				break;
+	static time_t			last_check=0;
+	time_t					now=time(NULL);
+
+	if(last_check != now) {
+		last_check=now;
+		if(xm!=NULL && kbhit()) {
+			switch(getch()) {
+				case ESC:
+				case CTRL_C:
+				case CTRL_X:
+					xm->cancelled=TRUE;
+					break;
+			}
 		}
 	}
 	return(xm->cancelled);
@@ -1351,7 +1362,7 @@ void xmodem_upload(struct bbslist *bbs, FILE *fp, char *path, long mode, int las
 		,send_byte
 		,recv_byte
 		,is_connected
-		,NULL /* xmodem_check_abort */
+		,xmodem_check_abort
 		,flush_send);
 	xm.log_level=&log_level;
 	if(!data_waiting(&xm, 0)) {
@@ -1532,7 +1543,7 @@ void xmodem_download(struct bbslist *bbs, long mode, char *path)
 		,send_byte
 		,recv_byte
 		,is_connected
-		,NULL /* xmodem_check_abort */
+		,xmodem_check_abort
 		,flush_send);
 	xm.log_level=&log_level;
 	while(is_connected(NULL)) {