diff --git a/ctrl/text.dat b/ctrl/text.dat
index 35e133ba810e2d813bcd0818f54849385c2427aa..4717fac8a95e57d2f6be068c97cdc1e7538b0952 100644
--- a/ctrl/text.dat
+++ b/ctrl/text.dat
@@ -240,9 +240,9 @@
 "\1r\1hFilenames, specs, or flags [None]: \1m\1h\1~"        197 BatchDlFlags
 "\r\n\7\1r\1h\1iBatch download queue is full.\1n\r\n"       198 BatchDlQueueIsFull
 "\1_\1?\1y\1hFilespec [\1wAll Files\1y]: \1n"               199 FileSpecStarDotStar
-"\r\n\r\n\1r\1h\1iNot enough free disk space.\1n\r\n"\      200 LowDiskSpace
+"\1?\1r\1h\1iNot enough free disk space.\1n\r\n"\           200 LowDiskSpace
 	"\r\n\1hThe sysop has been notified.\1n\r\n"
-"\r\n%s kilobytes free\r\n\r\n"                         201 DiskNBytesFree
+"\r\n%s bytes free\r\n\r\n"                                 201 DiskNBytesFree
 "\1_\1y\1hFilename: \1n"                                    202 Filename
 "\1/\1r\1hBad filename: '%s'\r\n"                           203 BadFilename
 "Upload '%s' to Sysop directory"                        204 UploadToSysopDirQ
@@ -705,7 +705,7 @@
 	"upcoming event on \1w%s\r\n\r\n"
 "\1n\r\nTimed Event - Node: %d   Time: %02d:%02d   "\    568 EventInfo
 	"Last Ran: %s\r\n"
-"\1_\1r\1h\1i\r\n\r\nConnection will be dropped in %d "\       569 UploadBeforeEvent
+"\1_\1r\1h\1i\1?Connection will be dropped in %d "\       569 UploadBeforeEvent
 	"minutes due to upcoming event.\1n"
 "\1_\1y\1h\r\nQWK: \1n"                                     570 QWKPrompt
 "\r\nCtrl-A codes: ~Expand to ANSI, ~Leave in, or "\    571 QWKCtrlACodes
@@ -1045,4 +1045,4 @@
 "%.0s\1n\1h\1m%s \1n\1msent you EchoMail on "\             860 FidoEchoMailReceived
     "\1h%s \1n\1m%s\1n\r\n"
 "\1_\1w\1hCalculating file's hash values @ELLIPSIS@\1n"    861 HashingFile
-"\1[\1>"                                                   862 HashedFile
\ No newline at end of file
+"\1[\1>"                                                   862 HashedFile
diff --git a/src/sbbs3/bat_xfer.cpp b/src/sbbs3/bat_xfer.cpp
index f39af799fafb1aec42ac476b9dc6d995ae02b70e..b2db9b9db32f8b6cc37a3ec801797f8033e794a6 100644
--- a/src/sbbs3/bat_xfer.cpp
+++ b/src/sbbs3/bat_xfer.cpp
@@ -182,6 +182,8 @@ void sbbs_t::batchmenu()
 					bputs(text[UploadQueueIsEmpty]);
 					break; 
 				}
+				if(cfg.upload_dir != INVALID_DIR && !okay_to_upload(cfg.upload_dir))
+					break;
 				xfer_prot_menu(XFER_BATCH_UPLOAD);
 				if(!create_batchup_lst())
 					break;
diff --git a/src/sbbs3/sbbs.h b/src/sbbs3/sbbs.h
index 18d4fb0783fdcc0d09596c6dd60cfbc7723ffde1..d15cc2173083ec9e3e83ad7d7ded4b3cecc417d0 100644
--- a/src/sbbs3/sbbs.h
+++ b/src/sbbs3/sbbs.h
@@ -1040,6 +1040,7 @@ public:
 
 	/* upload.cpp */
 	bool	uploadfile(file_t* f);
+	bool	okay_to_upload(uint dirnum);
 	bool	upload(uint dirnum);
     char	upload_lastdesc[LEN_FDESC+1];
 	bool	bulkupload(uint dirnum);
diff --git a/src/sbbs3/upload.cpp b/src/sbbs3/upload.cpp
index 9be6ba38d4253138f44bf364540bf31f683ef99b..e9bac362f2a887ee3a3c97488b0a42b2faf690b0 100644
--- a/src/sbbs3/upload.cpp
+++ b/src/sbbs3/upload.cpp
@@ -199,6 +199,32 @@ bool sbbs_t::uploadfile(file_t* f)
 	return true;
 }
 
+bool sbbs_t::okay_to_upload(uint dirnum)
+{
+	char str[MAX_PATH + 1];
+	char path[MAX_PATH + 1];
+
+	SAFECOPY(path, cfg.dir[dirnum]->path);
+
+	if(!isdir(path)) {
+		bprintf(text[DirectoryDoesNotExist], path);
+		lprintf(LOG_ERR,"File directory does not exist: %s", path);
+		return(false);
+	}
+
+	/* get free disk space */
+	ulong space = getfreediskspace(path, 1024);
+	byte_count_to_str(space * 1024, str, sizeof(str));
+	if(space < (ulong)(cfg.min_dspace / 1024)) {
+		bputs(text[LowDiskSpace]);
+		lprintf(LOG_ERR, "Diskspace is low: %s (%s bytes)", path, str);
+		if(!dir_op(dirnum))
+			return(false);
+	}
+	bprintf(text[DiskNBytesFree], str);
+	return true;
+}
+
 /****************************************************************************/
 /* Uploads files                                                            */
 /****************************************************************************/
@@ -211,7 +237,6 @@ bool sbbs_t::upload(uint dirnum)
 	char 	tmp[512];
     time_t	start,end;
     uint	i,j,k;
-	ulong	space;
 	file_t	f = {{}};
 	str_list_t dest_user_list = NULL;
 
@@ -239,23 +264,8 @@ bool sbbs_t::upload(uint dirnum)
 	if(sys_status&SS_EVENT && online==ON_REMOTE && !dir_op(dirnum))
 		bprintf(text[UploadBeforeEvent],timeleft/60);
 
-	SAFECOPY(path,cfg.dir[dirnum]->path);
-
-	if(!isdir(path)) {
-		bprintf(text[DirectoryDoesNotExist], path);
-		lprintf(LOG_ERR,"File directory does not exist: %s", path);
-		return(false);
-	}
-
-	/* get free disk space */
-	space=getfreediskspace(path,1024);
-	if(space<(ulong)(cfg.min_dspace / 1024)) {
-		bputs(text[LowDiskSpace]);
-		lprintf(LOG_ERR,"Diskspace is low: %s (%lu KB)",path,space);
-		if(!dir_op(dirnum))
-			return(false); 
-	}
-	bprintf(text[DiskNBytesFree],ultoac(space,tmp));
+	if(!okay_to_upload(dirnum))
+		return false;
 
 	f.dir=curdirnum=dirnum;
 	bputs(text[Filename]);