diff --git a/src/sbbs3/listfile.cpp b/src/sbbs3/listfile.cpp
index 9e42737bc001f23522b379270f53c361a703a3c0..0481aeed7d780d8f08ab67c95e0c58bf6bc0f3cc 100644
--- a/src/sbbs3/listfile.cpp
+++ b/src/sbbs3/listfile.cpp
@@ -60,7 +60,7 @@ int sbbs_t::listfiles(uint dirnum, const char *filespec, FILE* tofile, long mode
 	file_t* file_list = loadfiles(&smb
 		, (mode&(FL_FINDDESC|FL_EXFIND)) ? NULL : filespec
 		, (mode&FL_ULTIME) ? ns_time : 0
-		, file_detail_extdesc
+		, tofile == NULL ? file_detail_extdesc : file_detail_normal
 		, (enum file_sort)cfg.dir[dirnum]->sort
 		, &file_count);
 	if(file_list == NULL || file_count < 1) {
@@ -1074,14 +1074,16 @@ void sbbs_t::listfiletofile(file_t* f, FILE* fp)
 {
 	char fname[13];	/* This is one of the only 8.3 filename formats left! (used for display purposes only) */
 	char bytes[32];
+	char desc[LEN_FDESC + 1];
 	unsigned units = 1;
-	off_t size = getfilesize(&cfg, f);
+	off_t size = f->cost;
 	do {
 		byte_estimate_to_str(size, bytes, sizeof(bytes), units, /* precision: */1);
 		units *= 1024;
 	} while(strlen(bytes) > 6 && units < 1024 * 1024 * 1024);
+	SAFECOPY(desc, (f->desc == NULL || *f->desc == '\0') ? f->name : f->desc);
 	fprintf(fp, "%-*s %7s %s\r\n", (int)sizeof(fname)-1, format_filename(f->name, fname, sizeof(fname)-1, /* pad: */TRUE)
-		,bytes, (f->desc == NULL || *f->desc == '\0') ? f->name : f->desc);
+		,bytes, ascii_str((uchar*)desc));
 }
 
 int extdesclines(char *str)