diff --git a/src/sbbs3/addfiles.c b/src/sbbs3/addfiles.c
index 933e85baa92308c40d70fe53f13fc494dbb4172c..1ebed1e227f9eb56ad2eac4d8adf1d325c58cfbf 100644
--- a/src/sbbs3/addfiles.c
+++ b/src/sbbs3/addfiles.c
@@ -95,6 +95,27 @@ int lprintf(char *fmat, ...)
 	return(chcount);
 }
 
+void prep_desc(char *str)
+{
+	char tmp[1024];
+	int i,j;
+
+	for(i=j=0;str[i] && j < sizeof(tmp)-1;i++) {
+		if(j && str[i]==SP && tmp[j-1]==SP && (mode&KEEP_SPACE))
+			tmp[j++]=str[i];
+		else if(j && str[i]<=SP && tmp[j-1]==SP)
+			continue;
+		else if(i && !isalnum(str[i]) && str[i]==str[i-1])
+			continue;
+		else if((uchar)str[i]>=SP)
+			tmp[j++]=str[i];
+		else if(str[i]==TAB || (str[i]==CR && str[i+1]==LF))
+			tmp[j++]=SP;
+	}
+	tmp[j]=0;
+	strcpy(str,tmp);
+}
+
 /*****************************************************************************/
 /* Returns command line generated from instr with %c replacments             */
 /*****************************************************************************/
@@ -278,7 +299,7 @@ void addlist(char *inpath, file_t f, uint dskip, uint sskip)
 							strip_exascii(ext);
 						if(!(mode&KEEP_DESC)) {
 							sprintf(tmpext,"%.256s",ext);
-							strip_ctrl(tmpext);
+							prep_desc(tmpext);
 							for(i=0;tmpext[i];i++)
 								if(isalpha(tmpext[i]))
 									break;
@@ -294,7 +315,7 @@ void addlist(char *inpath, file_t f, uint dskip, uint sskip)
 
 			f.dateuled=time(NULL);
 			f.altpath=cur_altpath;
-			strip_ctrl(f.desc);
+			prep_desc(f.desc);
 			if(mode&ASCII_ONLY)
 				strip_exascii(f.desc);
 			if(exist) {
@@ -479,7 +500,7 @@ void addlist(char *inpath, file_t f, uint dskip, uint sskip)
 						strip_exascii(ext);
 					if(!(mode&KEEP_DESC)) {
 						sprintf(tmpext,"%.256s",ext);
-						strip_ctrl(tmpext);
+						prep_desc(tmpext);
 						for(i=0;tmpext[i];i++)
 							if(isalpha(tmpext[i]))
 								break;
@@ -497,7 +518,7 @@ void addlist(char *inpath, file_t f, uint dskip, uint sskip)
 		f.cdt=l;
 		f.dateuled=time(NULL);
 		f.altpath=cur_altpath;
-		strip_ctrl(f.desc);
+		prep_desc(f.desc);
 		if(mode&ASCII_ONLY)
 			strip_exascii(f.desc);
 		if(exist) {
@@ -852,7 +873,7 @@ int main(int argc, char **argv)
 			f.cdt=l;
 			f.dateuled=time(NULL);
 			f.altpath=cur_altpath;
-			strip_ctrl(f.desc);
+			prep_desc(f.desc);
 			if(mode&ASCII_ONLY)
 				strip_exascii(f.desc);
 			printf("%s %7lu %s\n",f.name,f.cdt,f.desc);