diff --git a/src/sbbs3/listfile.cpp b/src/sbbs3/listfile.cpp
index 4a017892372d177e05fd186d32cd9774f32bd953..666322cd70d9a1e69ff5ad0116ff29927f4d3d2e 100644
--- a/src/sbbs3/listfile.cpp
+++ b/src/sbbs3/listfile.cpp
@@ -372,17 +372,29 @@ bool sbbs_t::listfile(char *fname, char HUGE16 *buf, uint dirnum
 	, char *search, char letter, ulong datoffset)
 {
 	char	str[256],ext[513]="",*ptr,*cr,*lf,exist=1;
+	char	path[MAX_PATH+1];
 	char 	tmp[512];
     uchar	alt;
     int		i,j;
     ulong	cdt;
+#ifdef _WIN32
+	char	lfn[MAX_PATH+1];
+	DWORD	lfn_len;
+#endif
 
 	if(buf[F_MISC]!=ETX && (buf[F_MISC]-SP)&FM_EXTDESC && useron.misc&EXTDESC) {
 		getextdesc(&cfg,dirnum,datoffset,ext);
 		if(useron.misc&BATCHFLAG && lncntr+extdesclines(ext)>=rows-2 && letter!='A')
 			return(false); }
+
 	attr(cfg.color[clr_filename]);
 	bputs(fname);
+
+	getrec((char *)buf,F_ALTPATH,2,str);
+	alt=(uchar)ahtoul(str);
+	sprintf(path,"%s%s",alt>0 && alt<=cfg.altpaths ? cfg.altpath[alt-1]:cfg.dir[dirnum]->path
+		,unpadfname(fname,tmp));
+
 	if(buf[F_MISC]!=ETX && (buf[F_MISC]-SP)&FM_EXTDESC) {
 		if(!(useron.misc&EXTDESC))
 			outchar('+');
@@ -393,11 +405,7 @@ bool sbbs_t::listfile(char *fname, char HUGE16 *buf, uint dirnum
 	if(useron.misc&BATCHFLAG) {
 		attr(cfg.color[clr_filedesc]);
 		bprintf("%c",letter); }
-	getrec((char *)buf,F_ALTPATH,2,str);
-	alt=(uchar)ahtoul(str);
-	sprintf(str,"%s%s",alt>0 && alt<=cfg.altpaths ? cfg.altpath[alt-1]:cfg.dir[dirnum]->path
-		,unpadfname(fname,tmp));
-	if(cfg.dir[dirnum]->misc&DIR_FCHK && !fexist(str)) {
+	if(cfg.dir[dirnum]->misc&DIR_FCHK && !fexist(path)) {
 		exist=0;
 		attr(cfg.color[clr_err]); }
 	else
@@ -426,6 +434,20 @@ bool sbbs_t::listfile(char *fname, char HUGE16 *buf, uint dirnum
 		outchar('-');
 	getrec((char *)buf,F_DESC,LEN_FDESC,str);
 	attr(cfg.color[clr_filedesc]);
+
+#ifdef _WIN32
+ 
+	if(!(cfg.sys_misc&SM_NOLFN) && Win98GetLongPathName!=NULL) {
+
+		lfn_len=Win98GetLongPathName(path,lfn,sizeof(lfn));
+		if(lfn_len!=0 && lfn_len!=strlen(path)) {
+			ptr=strrchr(lfn,'\\');
+			if(ptr!=NULL 
+				&& stricmp(ptr+1,str)) // Not same as description
+				bprintf("%.*s\r\n%21s",LEN_FDESC,ptr+1,"");
+		}
+	}
+#endif
 	if(!ext[0]) {
 		if(search[0]) { /* high-light string in string */
 			strcpy(tmp,str);
@@ -450,7 +472,6 @@ bool sbbs_t::listfile(char *fname, char HUGE16 *buf, uint dirnum
 			cr=ptr+LEN_FDESC;
 		else if(cr)
 			*cr=0;
-	//	  bprintf("%.*s\r\n",LEN_FDESC,ptr);
 		sprintf(str,"%.*s\r\n",LEN_FDESC,ptr);
 		putmsg(str,P_NOATCODES|P_SAVEATR);
 		if(!cr) {