diff --git a/src/sbbs3/sexyz.c b/src/sbbs3/sexyz.c
index 81a2fbac0fd629a1e938185d8ceb30c188bf474d..87eb9d4d2dea2cf10ad8659ec0cd044136994fe9 100644
--- a/src/sbbs3/sexyz.c
+++ b/src/sbbs3/sexyz.c
@@ -878,7 +878,10 @@ static int send_files(char** fname, uint fnames)
 			if(success) {
 				xm.sent_files++;
 				xm.sent_bytes+=fsize;
-				lprintf(LOG_INFO,"Successful - Time: %lu:%02lu  CPS: %lu"
+				if(zm.file_skipped)
+					lprintf(LOG_WARNING,"File Skipped");
+				else
+					lprintf(LOG_INFO,"Successful - Time: %lu:%02lu  CPS: %lu"
 						,t/60,t%60,cps);
 
 				if(xm.total_files-xm.sent_files)
@@ -1140,7 +1143,7 @@ static int receive_files(char** fname_list, int fnames)
 
 			errors=zmodem_recv_file_data(&zm,fp,0);
 
-			if(errors<=zm.max_errors)
+			if(errors<=zm.max_errors && !zm.cancelled)
 				success=TRUE;
 
 		} else {
@@ -1209,11 +1212,14 @@ static int receive_files(char** fname_list, int fnames)
 		
 		t=time(NULL)-startfile;
 		if(!t) t=1;
-		if(success)
+		if(zm.file_skipped)
+			lprintf(LOG_WARNING,"File Skipped");
+		else if(success)
 			lprintf(LOG_INFO,"Successful - Time: %lu:%02lu  CPS: %lu"
 				,t/60,t%60,file_bytes/t);	
 		else
-			lprintf(LOG_ERR,"File Transfer %s", zm.local_abort ? "Aborted":"Failure");
+			lprintf(LOG_ERR,"File Transfer %s"
+				,zm.local_abort ? "Aborted": zm.cancelled ? "Cancelled":"Failure");
 
 		if(!(mode&XMODEM) && ftime)
 			setfdate(str,ftime); 
diff --git a/src/sbbs3/zmodem.c b/src/sbbs3/zmodem.c
index f13f4aaf85c584b6e889cbce817b2d810a21065e..7027578765b219c081b7f15ba4040fbc94789e58 100644
--- a/src/sbbs3/zmodem.c
+++ b/src/sbbs3/zmodem.c
@@ -1800,7 +1800,9 @@ BOOL zmodem_send_file(zmodem_t* zm, char* fname, FILE* fp, BOOL request_init, ti
 
 		if(type == ZSKIP) {
 			zm->file_skipped=TRUE;
-			lprintf(zm,LOG_WARNING,"File skipped by receiver at offset: %lu", pos);
+			lprintf(zm,LOG_WARNING,"File skipped by receiver at offset: %lu", pos + sent_bytes);
+			/* ZOC sends a ZRINIT after mid-file ZSKIP, so consume the ZRINIT here */
+			zmodem_recv_header(zm);
 			return(TRUE);
 		}