diff --git a/src/sbbs3/sbbsecho.c b/src/sbbs3/sbbsecho.c
index f9749b477fb8eb52a7efb22516bc9871a8682daf..ac9bf67cda0aa0867ac0014c912ef66945263fc6 100644
--- a/src/sbbs3/sbbsecho.c
+++ b/src/sbbs3/sbbsecho.c
@@ -3741,13 +3741,9 @@ void export_echomail(char *sub_code,faddr_t addr)
 				if(msg.ftn_flags!=NULL)
 					f+=sprintf(fmsgbuf+f,"\1FLAGS %.256s\r", msg.ftn_flags);
 
-				if(msg.ftn_msgid!=NULL)	/* use original MSGID */
-					f+=sprintf(fmsgbuf+f,"\1MSGID: %.256s\r", msg.ftn_msgid);
-				else					/* generate MSGID */
-					f+=sprintf(fmsgbuf+f,"\1MSGID: %s %08lX\r"
-						,faddrtoa(&scfg.sub[i]->faddr,NULL)
-						,(msg.idx.time<<5) | (msg.idx.number&0x1f)
-						);
+				f+=sprintf(fmsgbuf+f,"\1MSGID: %.256s\r"
+					,msg.ftn_msgid!=NULL ? msg.ftn_msgid
+						: ftn_msgid(scfg.sub[i],&msg));
 
 				if(msg.ftn_reply!=NULL)			/* use original REPLYID */
 					f+=sprintf(fmsgbuf+f,"\1REPLY: %.256s\r", msg.ftn_reply);
@@ -3755,13 +3751,15 @@ void export_echomail(char *sub_code,faddr_t addr)
 					memset(&orig_msg,0,sizeof(orig_msg));
 					orig_msg.hdr.number=msg.hdr.thread_orig;
 					if(smb_getmsgidx(smb, &orig_msg))
-						f+=sprintf(fmsgbuf+f,"\1REPLY: <%s>",smb->last_error);
-					else
-						f+=sprintf(fmsgbuf+f,"\1REPLY: <%lu.%s@%s> %08lX"
-							,msg.hdr.thread_orig
-							,scfg.sub[i]->code
-							,faddrtoa(&scfg.sub[i]->faddr,NULL)
-							,orig_msg.idx.time);
+						f+=sprintf(fmsgbuf+f,"\1REPLY: <%s>\r",smb->last_error);
+					else {
+						smb_lockmsghdr(&smb[cur_smb],&orig_msg);
+						smb_getmsghdr(&smb[cur_smb],&orig_msg);
+						smb_unlockmsghdr(&smb[cur_smb],&orig_msg);
+						f+=sprintf(fmsgbuf+f,"\1REPLY: %.256s\r"
+							,orig_msg.ftn_msgid!=NULL ? orig_msg.ftn_msgid 
+									: ftn_msgid(scfg.sub[i],&orig_msg));	
+					}
 				}
 				if(msg.ftn_pid!=NULL)	/* use original PID */
 					f+=sprintf(fmsgbuf+f,"\1PID: %.256s\r", msg.ftn_pid);