diff --git a/src/sbbs3/pack_qwk.cpp b/src/sbbs3/pack_qwk.cpp
index f45b931c585fdd720d18a8bf61d2c8e6ceeae151..4aa377136a9c6577ab91d984a69b78a20e203c7d 100644
--- a/src/sbbs3/pack_qwk.cpp
+++ b/src/sbbs3/pack_qwk.cpp
@@ -449,7 +449,7 @@ bool sbbs_t::pack_qwk(char *packet, ulong *msgcnt, bool prepack)
 					k|=LP_BYSELF;
 				if(useron.rest&FLAG('Q') || !(subscan[usrsub[i][j]].cfg&SUB_CFG_YSCAN))
 					k|=LP_OTHERS;
-				post=loadposts(&posts,usrsub[i][j],subscan[usrsub[i][j]].ptr,k);
+				post=loadposts(&posts,usrsub[i][j],subscan[usrsub[i][j]].ptr,k,NULL);
 
 				bprintf(text[NScanStatusFmt]
 					,cfg.grp[cfg.sub[usrsub[i][j]]->grp]->sname
diff --git a/src/sbbs3/pack_rep.cpp b/src/sbbs3/pack_rep.cpp
index 8d161828858f813c6715f71ef5852250c9904629..677a825f5bbd659afe4530c83d7d6858d34223f4 100644
--- a/src/sbbs3/pack_rep.cpp
+++ b/src/sbbs3/pack_rep.cpp
@@ -177,7 +177,7 @@ bool sbbs_t::pack_rep(uint hubnum)
 			continue; 
 		}
 
-		post=loadposts(&posts,j,subscan[j].ptr,LP_BYSELF|LP_OTHERS|LP_PRIVATE|LP_REP);
+		post=loadposts(&posts,j,subscan[j].ptr,LP_BYSELF|LP_OTHERS|LP_PRIVATE|LP_REP,NULL);
 		eprintf(LOG_INFO,remove_ctrl_a(text[NScanStatusFmt],tmp)
 			,cfg.grp[cfg.sub[j]->grp]->sname
 			,cfg.sub[j]->lname,posts,msgs);
diff --git a/src/sbbs3/readmsgs.cpp b/src/sbbs3/readmsgs.cpp
index 1024db5e818a0d852bfdc6774bf255ffc3b6d911..583581dffda8016e38ef4eba404e655451be3c2d 100644
--- a/src/sbbs3/readmsgs.cpp
+++ b/src/sbbs3/readmsgs.cpp
@@ -175,7 +175,7 @@ void sbbs_t::msghdr(smbmsg_t* msg)
 
 /****************************************************************************/
 /****************************************************************************/
-post_t * sbbs_t::loadposts(int32_t *posts, uint subnum, ulong ptr, long mode)
+post_t * sbbs_t::loadposts(int32_t *posts, uint subnum, ulong ptr, long mode, ulong *unvalidated_num)
 {
 	char name[128];
 	ushort aliascrc,namecrc,sysop;
@@ -222,6 +222,10 @@ post_t * sbbs_t::loadposts(int32_t *posts, uint subnum, ulong ptr, long mode)
 		errormsg(WHERE,ERR_ALLOC,smb.file,sizeof(post_t *)*cfg.sub[subnum]->maxmsgs);
 		return(NULL); 
 	}
+
+	if(unvalidated_num)
+		*unvalidated_num=ULONG_MAX;
+
 	while(!feof(smb.sid_fp)) {
 		skip=0;
 		if(smb_fread(&smb, &idx,sizeof(idx),smb.sid_fp) != sizeof(idx))
@@ -249,9 +253,12 @@ post_t * sbbs_t::loadposts(int32_t *posts, uint subnum, ulong ptr, long mode)
 				continue; 
 		}
 
-		if(idx.attr&MSG_MODERATED && !(idx.attr&MSG_VALIDATED)
-			&& (mode&LP_REP || !sub_op(subnum)))
-			break;
+		if(idx.attr&MSG_MODERATED && !(idx.attr&MSG_VALIDATED)) {
+			if(mode&LP_REP || !sub_op(subnum))
+				break;
+			if(unvalidated_num && *unvalidated_num > idx.number)
+				*unvalidated_num=idx.number;
+		}
 
 		if(idx.attr&MSG_PRIVATE && !(mode&LP_PRIVATE)
 			&& !sub_op(subnum) && !(useron.rest&FLAG('Q'))) {
@@ -356,7 +363,7 @@ int sbbs_t::scanposts(uint subnum, long mode, const char *find)
 	uint 	usub,ugrp,reads=0;
 	uint	lp=0;
 	long	org_mode=mode;
-	ulong	msgs,l;
+	ulong	msgs,l,unvalidated;
 	uint32_t last;
 	post_t	*post;
 	smbmsg_t	msg;
@@ -406,7 +413,7 @@ int sbbs_t::scanposts(uint subnum, long mode, const char *find)
 		lp=LP_BYSELF|LP_OTHERS;
 	if(mode&SCAN_TOYOU)
 		lp|=LP_UNREAD;
-	post=loadposts(&smb.msgs,subnum,0,lp);
+	post=loadposts(&smb.msgs,subnum,0,lp,&unvalidated);
 	if(mode&SCAN_NEW) { 		  /* Scanning for new messages */
 		for(smb.curmsg=0;smb.curmsg<smb.msgs;smb.curmsg++)
 			if(subscan[subnum].ptr<post[smb.curmsg].number)
@@ -492,7 +499,7 @@ int sbbs_t::scanposts(uint subnum, long mode, const char *find)
 			break;
 
 		if(post==NULL)	/* Been unloaded */
-			post=loadposts(&smb.msgs,subnum,0,lp);   /* So re-load */
+			post=loadposts(&smb.msgs,subnum,0,lp,&unvalidated);   /* So re-load */
 
 		if(!smb.msgs) {
 			done=1;
@@ -532,7 +539,7 @@ int sbbs_t::scanposts(uint subnum, long mode, const char *find)
 			if(post) {
 				free((void *)post); 
 			}
-			post=loadposts(&smb.msgs,subnum,0,lp);   /* So re-load */
+			post=loadposts(&smb.msgs,subnum,0,lp,&unvalidated);   /* So re-load */
 			if(!smb.msgs)
 				break;
 			for(smb.curmsg=0;smb.curmsg<smb.msgs;smb.curmsg++)
@@ -554,7 +561,7 @@ int sbbs_t::scanposts(uint subnum, long mode, const char *find)
 			}
 			if(post)
 				free(post);
-			post=loadposts(&smb.msgs,subnum,0,lp);
+			post=loadposts(&smb.msgs,subnum,0,lp,&unvalidated);
 			if(!smb.msgs)
 				break;
 			if(smb.curmsg>(smb.msgs-1))
@@ -681,6 +688,8 @@ int sbbs_t::scanposts(uint subnum, long mode, const char *find)
 		if(useron.misc&WIP)
 			menu("msgscan");
 		ASYNC;
+		if(unvalidated < smb.curmsg+1)
+			bprintf(text[UnvalidatedWarning],unvalidated);
 		bprintf(text[ReadingSub],ugrp,cfg.grp[cfg.sub[subnum]->grp]->sname
 			,usub,cfg.sub[subnum]->sname,smb.curmsg+1,smb.msgs);
 		sprintf(str,"ABCDEFILMPQRTY?<>[]{}-+.,");
@@ -1187,7 +1196,7 @@ long sbbs_t::listsub(uint subnum, long mode, long start, const char* search)
 		smb_stack(&smb,SMB_STACK_POP);
 		return(0); 
 	}
-	post=loadposts(&posts,subnum,0,LP_BYSELF|LP_OTHERS);
+	post=loadposts(&posts,subnum,0,LP_BYSELF|LP_OTHERS,NULL);
 	bprintf(text[SearchSubFmt]
 		,cfg.grp[cfg.sub[subnum]->grp]->sname,cfg.sub[subnum]->lname,posts /* total? */);
 	if(mode&SCAN_FIND)
diff --git a/src/sbbs3/sbbs.h b/src/sbbs3/sbbs.h
index 63799aea939c8f503eb9a4f74f5a94359ab46854..d9d5d8ca06c3103b4ce57422e6f3b461ab10517a 100644
--- a/src/sbbs3/sbbs.h
+++ b/src/sbbs3/sbbs.h
@@ -534,7 +534,7 @@ public:
 	void	delallmail(uint usernumber, int which, bool permanent=true);
 
 	/* getmsg.cpp */
-	post_t* loadposts(int32_t *posts, uint subnum, ulong ptr, long mode);
+	post_t* loadposts(int32_t *posts, uint subnum, ulong ptr, long mode, ulong *unvalidated_num);
 
 	/* readmail.cpp */
 	void	readmail(uint usernumber, int sent);
diff --git a/src/sbbs3/text.h b/src/sbbs3/text.h
index ebe84a54f5ddad1a5887e5a05b4d6c5f6b38a256..447d6ecb7e8500df6de30b6e2108d31235001f13 100644
--- a/src/sbbs3/text.h
+++ b/src/sbbs3/text.h
@@ -806,6 +806,7 @@ enum {
 	,CantPostMsg
 	,OperatorPrompt
 	,AddSubToNewScanQ
+	,UnvalidatedWarning
 
 	,TOTAL_TEXT
 };
diff --git a/src/sbbs3/text_defaults.c b/src/sbbs3/text_defaults.c
index 70cd5bd096f0649c06c2b179b4008cde121c5b48..cd47db35d2438a7a827e83201a86a68fd348ceb3 100644
--- a/src/sbbs3/text_defaults.c
+++ b/src/sbbs3/text_defaults.c
@@ -48,9 +48,8 @@ const char * const text_defaults[TOTAL_TEXT]={
 		"\x67\x20\x62\x79\x74\x65\x73\x20\x6d\x61\x78\x29\x2e\x20\x01\x68\x43\x74\x72\x6c\x2d\x5a\x01\x6e\x01\x67\x20\x74\x6f\x20\x73\x61"
 		"\x76\x65\x2c\x20\x01\x68\x43\x74\x72\x6c\x2d\x43\x01\x6e\x01\x67\x20\x74\x6f\x20\x61\x62\x6f\x72\x74\x2e\x01\x6e\x0d\x0a\x0d\x0a"
 		""
-	,"\x4e\x6f\x20\x6d\x6f\x72\x65\x20\x6c\x69\x6e\x65\x73\x2e\x20\x54\x79\x70\x65\x20\x2f\x3f\x20\x66\x6f\x72\x20\x6d\x65\x6e\x75\x2e"
-		"\x0d\x0a"
-	,"\x4f\x6e\x6c\x79\x20\x25\x64\x20\x6c\x69\x6e\x65\x73\x20\x6c\x65\x66\x74\x2e\x0d\x0a"
+	,"\x4c\x69\x6e\x65\x20\x6c\x69\x6d\x69\x74\x20\x28\x25\x75\x29\x20\x72\x65\x61\x63\x68\x65\x64\x2e\x0d\x0a"
+	,"\x4f\x6e\x6c\x79\x20\x25\x75\x20\x6c\x69\x6e\x65\x73\x20\x6c\x65\x66\x74\x2e\x0d\x0a"
 	,"\x0d\x0a\x0d\x0a\x01\x6e\x01\x72\x01\x68\x01\x69\x4f\x75\x74\x20\x6f\x66\x20\x62\x79\x74\x65\x73\x2e\x01\x6e\x0d\x0a"
 	,"\x49\x6e\x76\x61\x6c\x69\x64\x20\x6c\x69\x6e\x65\x20\x6e\x75\x6d\x62\x65\x72\x0d\x0a"
 	,"\x01\x6e\x4d\x65\x73\x73\x61\x67\x65\x20\x63\x6c\x65\x61\x72\x65\x64\x2e\x0d\x0a"
@@ -1227,4 +1226,7 @@ const char * const text_defaults[TOTAL_TEXT]={
 	,"\x0d\x0a\x01\x79\x01\x68\x4f\x70\x65\x72\x61\x74\x6f\x72\x3a\x20\x01\x77"
 	,"\x41\x64\x64\x20\x74\x68\x69\x73\x20\x73\x75\x62\x2d\x62\x6f\x61\x72\x64\x20\x74\x6f\x20\x79\x6f\x75\x72\x20\x6e\x65\x77\x2d\x73"
 		"\x63\x61\x6e\x20\x6c\x69\x73\x74"
+	,"\x01\x6e\x01\x72\x01\x69\x57\x41\x52\x4e\x49\x4e\x47\x3a\x20\x59\x6f\x75\x20\x61\x72\x65\x20\x72\x65\x61\x64\x69\x6e\x67\x20\x6d"
+		"\x65\x73\x73\x61\x67\x65\x73\x20\x70\x61\x73\x74\x20\x74\x68\x65\x20\x6c\x61\x73\x74\x20\x75\x6e\x76\x61\x6c\x69\x64\x61\x74\x65"
+		"\x64\x20\x6d\x65\x73\x73\x61\x67\x65\x20\x28\x25\x75\x29"
 };