diff --git a/src/sbbs3/sbbs.h b/src/sbbs3/sbbs.h
index d204d68a63a7cf0338341f4a931bf4d4fba725a8..6bd1b0bca2a8f21ed43d49473b72e70be93cef86 100644
--- a/src/sbbs3/sbbs.h
+++ b/src/sbbs3/sbbs.h
@@ -744,6 +744,7 @@ extern "C" {
 	/* str.cpp */
 	DLLEXPORT char *	DLLCALL ascii_str(uchar* str);
 	DLLEXPORT ushort	DLLCALL crc16(char *str);
+	DLLEXPORT BOOL		DLLCALL findstr(scfg_t* cfg, char *insearch, char *fname);
 	DLLEXPORT BOOL		DLLCALL trashcan(scfg_t* cfg, char *insearch, char *name);
 	DLLEXPORT int		DLLCALL putsmsg(scfg_t* cfg, int usernumber, char *strin);
 
diff --git a/src/sbbs3/str.cpp b/src/sbbs3/str.cpp
index 4eb9865e1158f2af497840b4625fc83a65136ba6..7dad024daa67ca8309388c7149d542b043406176 100644
--- a/src/sbbs3/str.cpp
+++ b/src/sbbs3/str.cpp
@@ -735,11 +735,11 @@ void sbbs_t::dirinfo(uint dirnum)
 		printfile(str,0);
 }
 
+
 /****************************************************************************/
-/* Searches the file <name>.can in the TEXT directory for matches			*/
-/* Returns 1 if found in list, 0 if not.									*/
+/* Pattern matching string search of 'insearch' in 'fname'.					*/
 /****************************************************************************/
-extern "C" BOOL DLLCALL trashcan(scfg_t* cfg, char* insearch, char* name)
+extern "C" BOOL DLLCALL findstr(scfg_t* cfg, char* insearch, char* fname)
 {
 	char*	p;
 	char	str[128];
@@ -749,9 +749,7 @@ extern "C" BOOL DLLCALL trashcan(scfg_t* cfg, char* insearch, char* name)
 	BOOL	found;
 	FILE*	stream;
 
-	sprintf(str,"%s%s.can",cfg->text_dir,name);
-
-	if((stream=fopen(str,"r"))==NULL)
+	if((stream=fopen(fname,"r"))==NULL)
 		return(FALSE); 
 
 	sprintf(search,"%.*s",sizeof(search)-1,insearch);
@@ -809,6 +807,23 @@ extern "C" BOOL DLLCALL trashcan(scfg_t* cfg, char* insearch, char* name)
 	return(found);
 }
 
+/****************************************************************************/
+/* Searches the file <name>.can in the TEXT directory for matches			*/
+/* Returns TRUE if found in list, FALSE if not.								*/
+/****************************************************************************/
+extern "C" BOOL DLLCALL trashcan(scfg_t* cfg, char* insearch, char* name)
+{
+	char fname[MAX_PATH+1];
+
+	sprintf(fname,"%s%s.can",cfg->text_dir,name);
+	return(findstr(cfg,insearch,fname));
+}
+
+/****************************************************************************/
+/* Searches the file <name>.can in the TEXT directory for matches			*/
+/* Returns TRUE if found in list, FALSE if not.								*/
+/* Displays bad<name>.can in text directory if found.						*/
+/****************************************************************************/
 bool sbbs_t::trashcan(char *insearch, char *name)
 {
 	char str[256];