diff --git a/src/sbbs3/sbbs.h b/src/sbbs3/sbbs.h
index df09298060284d7c3520bd396730f89b4a8390e4..2117b64093c28739e07259fe9f2e5058c4d49dc2 100644
--- a/src/sbbs3/sbbs.h
+++ b/src/sbbs3/sbbs.h
@@ -781,7 +781,7 @@ extern "C" {
 	DLLEXPORT size_t	DLLCALL strip_invalid_attr(char *str);
 	DLLEXPORT ushort	DLLCALL subject_crc(char *subj);
 	DLLEXPORT char *	DLLCALL ftn_msgid(sub_t* sub, smbmsg_t* msg);
-	DLLEXPORT char *	DLLCALL gen_msgid(scfg_t* cfg, uint subnum, smbmsg_t* msg);
+	DLLEXPORT char *	DLLCALL get_msgid(scfg_t* cfg, uint subnum, smbmsg_t* msg);
 
 	/* date_str.c */
 	DLLEXPORT char *	DLLCALL zonestr(short zone);
diff --git a/src/sbbs3/str_util.c b/src/sbbs3/str_util.c
index ff2b3e9a1ae448979fa9b2863a082c617d94d53f..28aa4df78619df219b5bb6bb0762604a23cbc472 100644
--- a/src/sbbs3/str_util.c
+++ b/src/sbbs3/str_util.c
@@ -342,6 +342,9 @@ char* DLLCALL ftn_msgid(sub_t *sub, smbmsg_t* msg)
 {
 	static char msgid[256];
 
+	if(msg->ftn_msgid!=NULL)
+		return(msg->ftn_msgid);
+
 	snprintf(msgid,sizeof(msgid)
 		,"%s %08lX %lu.%s %08lX\r"
 		,faddrtoa(&sub->faddr,NULL)
@@ -357,10 +360,13 @@ char* DLLCALL ftn_msgid(sub_t *sub, smbmsg_t* msg)
 /****************************************************************************/
 /* Return a general purpose (RFC-822) message-ID							*/
 /****************************************************************************/
-char* DLLCALL gen_msgid(scfg_t* cfg, uint subnum, smbmsg_t* msg)
+char* DLLCALL get_msgid(scfg_t* cfg, uint subnum, smbmsg_t* msg)
 {
 	static char msgid[256];
 
+	if(msg->id!=NULL)
+		return(msg->id);
+
 	if(subnum>=cfg->total_subs)
 		snprintf(msgid,sizeof(msgid)
 			,"<%08lX.%lu@%s>"