diff --git a/src/sbbs3/readmsgs.cpp b/src/sbbs3/readmsgs.cpp
index 2913e3e265504643028f6747431323692feb6845..d7f2a72a8618dea1926917c7cd36e11d3002d68c 100644
--- a/src/sbbs3/readmsgs.cpp
+++ b/src/sbbs3/readmsgs.cpp
@@ -59,7 +59,7 @@ uchar sbbs_t::msg_listing_flag(uint subnum, smbmsg_t* msg, post_t* post)
 	return ' ';
 }
 
-long sbbs_t::listmsgs(uint subnum, long mode, post_t *post, long i, long posts)
+long sbbs_t::listmsgs(uint subnum, long mode, post_t *post, long i, long posts, bool reading)
 {
 	smbmsg_t msg;
 	long listed=0;
@@ -73,7 +73,7 @@ long sbbs_t::listmsgs(uint subnum, long mode, post_t *post, long i, long posts)
 		smb_unlockmsghdr(&smb,&msg);
 		if(listed==0)
 			bputs(text[MailOnSystemLstHdr]);
-		bprintf(text[SubMsgLstFmt], i+1
+		bprintf(text[SubMsgLstFmt], reading ? (i+1) : post[i].num
 			,msg.hdr.attr&MSG_ANONYMOUS && !sub_op(subnum)
 			? text[Anonymous] : msg.from
 			,msg.to
@@ -1726,7 +1726,7 @@ long sbbs_t::listsub(uint subnum, long mode, long start, const char* search)
 		if(mode&SCAN_FIND)
 			displayed=searchposts(subnum, post, start, posts, search);
 		else
-			displayed=listmsgs(subnum, mode, post, start, posts);
+			displayed=listmsgs(subnum, mode, post, start, posts, /* reading: */false);
 		free(post);
 	}
 	smb_close(&smb);
diff --git a/src/sbbs3/sbbs.h b/src/sbbs3/sbbs.h
index 983636d4fabd05b3f2752c52f55341253c399246..792f7b83e71213d5e089787412dc1aafbd61f9a5 100644
--- a/src/sbbs3/sbbs.h
+++ b/src/sbbs3/sbbs.h
@@ -803,7 +803,7 @@ public:
 	int		scanposts(uint subnum, long mode, const char* find);	/* Scan sub-board */
 	bool	scanposts_inside;
 	long	listsub(uint subnum, long mode, long start, const char* search);
-	long	listmsgs(uint subnum, long mode, post_t* post, long start, long posts);
+	long	listmsgs(uint subnum, long mode, post_t* post, long start, long posts, bool reading = true);
 	long	searchposts(uint subnum, post_t* post, long start, long msgs, const char* find);
 	long	showposts_toyou(uint subnum, post_t* post, ulong start, long posts, long mode=0);
 	void	show_thread(uint32_t msgnum, post_t* post, unsigned curmsg, int thread_depth = 0, uint64_t reply_mask = 0);