diff --git a/src/syncterm/ripper.c b/src/syncterm/ripper.c
index 52dcf46823a17fe852517e2208ab0029c7a1eec5..7f49943ee204133fc1a77ac6b7347a892b600551 100644
--- a/src/syncterm/ripper.c
+++ b/src/syncterm/ripper.c
@@ -97,6 +97,7 @@ static uint8_t *ripbuf = NULL;
 static size_t ripbuf_size = 0;
 static size_t ripbuf_pos = 0;
 static size_t ripbufpos = 0;
+static bool rip_suspended = false;
 
 static struct mouse_field *rip_pressed = NULL;
 
@@ -13157,6 +13158,23 @@ init_rip(int enabled)
 	}
 }
 
+void
+suspend_rip(bool suspend)
+{
+	if (suspend) {
+		if (rip.enabled) {
+			rip_suspended = true;
+			rip.enabled = false;
+		}
+	}
+	else {
+		if (rip_suspended) {
+			rip_suspended = false;
+			rip.enabled = true;
+		}
+	}
+}
+
 int
 rip_kbhit(void)
 {
diff --git a/src/syncterm/ripper.h b/src/syncterm/ripper.h
index 00dcd8729f304b8c13304d33feef522f7679602b..2df473ea32bcbd64b5bf88ce05bc39f947818908 100644
--- a/src/syncterm/ripper.h
+++ b/src/syncterm/ripper.h
@@ -5,5 +5,6 @@ void init_rip(int enabled);
 size_t parse_rip(BYTE *buf, unsigned blen, unsigned maxlen);
 int rip_getch(void);
 int rip_kbhit(void);
+void suspend_rip(bool suspend);
 
 #endif
diff --git a/src/syncterm/term.c b/src/syncterm/term.c
index 35722f7b8d05a9ccf6be213ad5cd7643890df862..bbb608a0145e0fe820a1709151e90ef94fceb7af 100644
--- a/src/syncterm/term.c
+++ b/src/syncterm/term.c
@@ -875,6 +875,7 @@ void begin_upload(struct bbslist *bbs, BOOL autozm, int lastch)
 	}
 	setvbuf(fp,NULL,_IOFBF,0x10000);
 
+	suspend_rip(true);
 	if(autozm)
 		zmodem_upload(bbs, fp, path);
 	else {
@@ -904,6 +905,7 @@ void begin_upload(struct bbslist *bbs, BOOL autozm, int lastch)
 				break;
 		}
 	}
+	suspend_rip(false);
 	uifcbail();
 	restorescreen(savscrn);
 	freescreen(savscrn);
@@ -941,6 +943,7 @@ void begin_download(struct bbslist *bbs)
 	i=0;
 	uifc.helpbuf="Select Protocol";
 	hold_update=FALSE;
+	suspend_rip(true);
 	switch(uifc.list(WIN_MID|WIN_SAV,0,0,0,&i,NULL,"Protocol",opts)) {
 		case -1:
 			check_exit(FALSE);
@@ -963,6 +966,7 @@ void begin_download(struct bbslist *bbs)
 				xmodem_download(bbs, XMODEM|RECV,path);
 			break;
 	}
+	suspend_rip(false);
 	hold_update=old_hold;
 	uifcbail();
 	restorescreen(savscrn);
@@ -2613,11 +2617,13 @@ BOOL doterm(struct bbslist *bbs)
 							zrqbuf[++j]=0;
 							if(j==sizeof(zrqinit)-1) {	/* Have full sequence (Assumes zrinit and zrqinit are same length */
 								WRITE_OUTBUF();
+								suspend_rip(true);
 								if(!strcmp((char *)zrqbuf, (char *)zrqinit))
 									zmodem_download(bbs);
 								else
 									begin_upload(bbs, TRUE, inch);
 								setup_mouse_events(&ms);
+								suspend_rip(false);
 								zrqbuf[0]=0;
 								remain=1;
 							}