diff --git a/src/sbbs3/upload.cpp b/src/sbbs3/upload.cpp
index c7e8b23083b31af3ae59466f40ad18032e95be4b..90581685fcb312ea26cef1b630385a80287bb424 100644
--- a/src/sbbs3/upload.cpp
+++ b/src/sbbs3/upload.cpp
@@ -344,19 +344,24 @@ bool sbbs_t::upload(uint dirnum)
 		if(!dir_op(dirnum)) return(false); 
 	}
 	bputs(text[SearchingForDupes]);
+	if(findfile(&cfg,dirnum,f.name)) {
+		bputs(text[SearchedForDupes]);
+		bprintf(text[FileAlreadyOnline],fname);
+		return(false); 	 /* File is already in database */
+	}
 	for(i=k=0;i<usrlibs;i++) {
 		for(j=0;j<usrdirs[i];j++,k++) {
 			outchar('.');
 			if(k && !(k%5))
 				bputs("\b\b\b\b\b     \b\b\b\b\b");
-			if((usrdir[i][j]==dirnum || cfg.dir[usrdir[i][j]]->misc&DIR_DUPES)
+			if(usrdir[i][j]==dirnum)
+				continue;	/* we already checked this dir */
+			if(cfg.dir[usrdir[i][j]]->misc&DIR_DUPES
 				&& findfile(&cfg,usrdir[i][j],f.name)) {
 				bputs(text[SearchedForDupes]);
-				bprintf(text[FileAlreadyOnline],f.name);
+				bprintf(text[FileAlreadyOnline],fname);
 				if(!dir_op(dirnum))
 					return(false); 	 /* File is in database for another dir */
-				if(usrdir[i][j]==dirnum)
-					return(false); /* don't allow duplicates */
 			}
 		}
 	}
@@ -475,7 +480,7 @@ bool sbbs_t::upload(uint dirnum)
 			else {
 				for(i=0;i<batup_total;i++)
 					if(!strcmp(batup_name[i],f.name)) {
-						bprintf(text[FileAlreadyInQueue],f.name);
+						bprintf(text[FileAlreadyInQueue],fname);
 						return(false); 
 					}
 				strcpy(batup_name[batup_total],f.name);
@@ -485,7 +490,7 @@ bool sbbs_t::upload(uint dirnum)
 				batup_alt[batup_total]=altul;
 				batup_total++;
 				bprintf(text[FileAddedToUlQueue]
-					,f.name,batup_total,cfg.max_batup); 
+					,fname,batup_total,cfg.max_batup); 
 			} 
 		} else {
 			for(i=0;i<cfg.total_prots;i++)