diff --git a/src/sbbs3/fixsmb.c b/src/sbbs3/fixsmb.c
index 2174229bd565fb03beaa53ac1bfc06a452f3f4f0..5ebdea38e31685412e3198f04cf08ebc42958191 100644
--- a/src/sbbs3/fixsmb.c
+++ b/src/sbbs3/fixsmb.c
@@ -108,6 +108,7 @@ int fixsmb(char* sub)
 	uint32_t*	numbers = NULL;
 	uint32_t	total = 0;
 	BOOL		dupe_msgnum;
+	uint32_t	highest = 0;
 
 	memset(&smb,0,sizeof(smb));
 
@@ -247,6 +248,8 @@ int fixsmb(char* sub)
 			msg.offset=n;
 			if(renumber)
 				msg.hdr.number=n+1;
+			if(msg.hdr.number > highest)
+				highest = msg.hdr.number;
 			if(msg.hdr.netattr&MSG_INTRANSIT) {
 				printf("Removing 'in transit' attribute\n");
 				msg.hdr.netattr&=~MSG_INTRANSIT;
@@ -282,9 +285,12 @@ int fixsmb(char* sub)
 	printf("\r%79s\r100%%\n","");
 	smb.status.total_msgs=n;
 	if(renumber)
-		smb.status.last_msg=n;
-	else
+		smb.status.last_msg = highest;
+	else {
+		if(highest > smb.status.last_msg)
+			smb.status.last_msg = highest;
 		sort_index(&smb);
+	}
 	printf("Saving message base status (%lu total messages).\n",n);
 	if((i=smb_putstatus(&smb))!=0)
 		printf("\nsmb_putstatus returned %d: %s\n",i,smb.last_error);