diff --git a/src/sbbs3/readmsgs.cpp b/src/sbbs3/readmsgs.cpp
index 6d260b5a910240280bdbbdce6c35a85104ecf154..904fbb460fb6f63eb84f0bb58ec9c2c37eca4e03 100644
--- a/src/sbbs3/readmsgs.cpp
+++ b/src/sbbs3/readmsgs.cpp
@@ -494,7 +494,6 @@ int sbbs_t::scanposts(uint subnum, long mode, const char *find)
 {
 	char	str[256],str2[256],do_find=true,mismatches=0
 			,done=0,domsg=1,*buf,*p;
-	char	subj[128];
 	char	find_buf[128];
 	char	tmp[128];
 	int		i;
@@ -752,11 +751,8 @@ int sbbs_t::scanposts(uint subnum, long mode, const char *find)
 							domsg=0;
 					continue; 
 				}
-				strupr(buf);
-				strip_ctrl(buf, buf);
-				SAFECOPY(subj,msg.subj);
-				strupr(subj);
-				if(!strstr(buf,find) && !strstr(subj,find)) {
+				if(strcasestr(buf,find) == NULL && strcasestr(msg.subj, find) == NULL
+					&& (msg.tags == NULL || strcasestr(msg.tags, find) == NULL)) {
 					free(buf);
 					if(smb.curmsg<smb.msgs-1) 
 						smb.curmsg++;
@@ -1702,7 +1698,6 @@ long sbbs_t::searchposts(uint subnum, post_t *post, long start, long posts
 	, const char *search)
 {
 	char*	buf;
-	char	subj[128];
 	long	l,found=0;
 	smbmsg_t msg;
 
@@ -1717,11 +1712,8 @@ long sbbs_t::searchposts(uint subnum, post_t *post, long start, long posts
 			smb_freemsgmem(&msg);
 			continue; 
 		}
-		strupr(buf);
-		strip_ctrl(buf, buf);
-		SAFECOPY(subj,msg.subj);
-		strupr(subj);
-		if(strstr(buf,search) || strstr(subj,search)) {
+		if(strcasestr(buf, search) != NULL || strcasestr(msg.subj, search) != NULL
+			|| (msg.tags != NULL && strcasestr(msg.tags, search) != NULL)) {
 			if(!found)
 				bputs(text[MailOnSystemLstHdr]);
 			bprintf(text[SubMsgLstFmt],l+1