diff --git a/src/sbbs3/postmsg.cpp b/src/sbbs3/postmsg.cpp
index 6d754bda89f9e1bd0f4bfbdcb3b531a200cd37ac..2c7951d69ae8195927c0d1c5c78267cf23d486fd 100644
--- a/src/sbbs3/postmsg.cpp
+++ b/src/sbbs3/postmsg.cpp
@@ -37,6 +37,26 @@
 
 #include "sbbs.h"
 
+extern const char* beta_version;
+
+static char* program_id()
+{
+	static char str[128];
+	char compiler[64];
+
+	DESCRIBE_COMPILER(compiler);
+	sprintf(str,"%.10s v%s%c-%s%s%s %s %s\r"
+		,VERSION_NOTICE,VERSION,REVISION,PLATFORM_DESC
+		,beta_version
+#ifdef _DEBUG
+		," Debug"
+#else
+		,""
+#endif
+		,__DATE__,compiler);
+	return(str);
+}
+
 /****************************************************************************/
 /* Posts a message on subboard number sub, with 'top' as top of message.    */
 /* Returns 1 if posted, 0 if not.                                           */
@@ -46,10 +66,11 @@ bool sbbs_t::postmsg(uint subnum, smbmsg_t *remsg, long wm_mode)
 	char	str[256],touser[256],title[LEN_TITLE+1],buf[SDT_BLOCK_LEN]
 			,top[256];
 	char	msg_id[256];
+	char*	pid;
 	ushort	xlat,msgattr;
 	int 	i,j,x,file,storage;
 	ulong	l,length,offset,crc=0xffffffff;
-	FILE	*instream;
+	FILE*	instream;
 	smbmsg_t msg,tmpmsg;
 
 	if(remsg) {
@@ -271,6 +292,9 @@ bool sbbs_t::postmsg(uint subnum, smbmsg_t *remsg, long wm_mode)
 	msg.idx.time=msg.hdr.when_imported.time;
 	msg.idx.number=smb.status.last_msg+1; /* this *should* be the new message number */
 
+	pid=program_id();
+	smb_hfield(&msg,FIDOPID,strlen(pid),pid);
+
 	/* Generate default (RFC822) message-id (always) */
 	SAFECOPY(msg_id,get_msgid(&cfg,subnum,&msg));
 	smb_hfield(&msg,RFC822MSGID,strlen(msg_id),msg_id);
@@ -375,6 +399,7 @@ bool sbbs_t::postmsg(uint subnum, smbmsg_t *remsg, long wm_mode)
 extern "C" int DLLCALL savemsg(scfg_t* cfg, smb_t* smb, smbmsg_t* msg, char* msgbuf)
 {
 	char	pad=0;
+	char*	pid;
 	char	msg_id[256];
 	ushort	xlat;
 	int 	i;
@@ -479,6 +504,9 @@ extern "C" int DLLCALL savemsg(scfg_t* cfg, smb_t* smb, smbmsg_t* msg, char* msg
 	}
 	smb_dfield(msg,TEXT_BODY,length);
 
+	pid=program_id();
+	smb_hfield(msg,FIDOPID,strlen(pid),pid);
+
 	/* Generate default (RFC822) message-id  */
 	if(smb_get_hfield(msg,RFC822MSGID,NULL)==NULL) {
 		SAFECOPY(msg_id,get_msgid(cfg,smb->subnum,msg));
diff --git a/src/sbbs3/smbutil.c b/src/sbbs3/smbutil.c
index 45c8528a138d6313055b93f0108f61bf4be7d01e..5a6167a502ab055db3281323fd6272ecf5203f83 100644
--- a/src/sbbs3/smbutil.c
+++ b/src/sbbs3/smbutil.c
@@ -36,6 +36,8 @@
  ****************************************************************************/
 
 #define SMBUTIL_VER "2.31"
+char	revision[16];
+char	compiler[32];
 
 #define NOANALYSIS		(1L<<0)
 
@@ -321,6 +323,15 @@ void postmsg(char type, char* to, char* to_number, char* to_address,
 		smb_freemsgdat(&smb,offset,length,1);
 		exit(1); }
 
+	sprintf(str,"SMBUTIL v%s-%s r%s %s %s"
+		,SMBUTIL_VER
+		,PLATFORM_DESC
+		,revision
+		,__DATE__
+		,compiler
+		);
+	smb_hfield(&msg,FIDOPID,(ushort)strlen(str),str);
+
 	i=smb_addmsghdr(&smb,&msg,smb.status.attr&SMB_HYPERALLOC);
 
 	if(i) {
@@ -1259,7 +1270,6 @@ int main(int argc, char **argv)
 {
 	char	cmd[128]="",*p,*s;
 	char	path[MAX_PATH+1];
-	char	revision[16];
 	char*	to=NULL;
 	char*	to_number=NULL;
 	char*	to_address=NULL;
@@ -1274,6 +1284,8 @@ int main(int argc, char **argv)
 
 	sscanf("$Revision$" + 11, "%s", revision);
 
+	DESCRIBE_COMPILER(compiler);
+
 	smb.file[0]=0;
 	fprintf(stderr,"\nSMBUTIL v%s-%s (rev %s) SMBLIB %s - Synchronet Message Base "\
 		"Utility\n\n"