diff --git a/src/sbbs3/atcodes.cpp b/src/sbbs3/atcodes.cpp
index 6a041b3751a7e916b39fd70d308a8b36c1d5dec0..b9066b442f2eb61f8808b8a27e8554267a0b64f6 100644
--- a/src/sbbs3/atcodes.cpp
+++ b/src/sbbs3/atcodes.cpp
@@ -708,6 +708,51 @@ int sbbs_t::syncatcodes(char *sp, int len)
 			bprintf("%u",stats.nusers);
 	}
 
+	/* Message header codes */
+	else if(!strcmp(sp,"MSG_TO") && current_msg!=NULL)
+		bputs(current_msg->to);
+	else if(!strcmp(sp,"MSG_TO_EXT") && current_msg!=NULL)
+		bputs(current_msg->to_ext);
+	else if(!strcmp(sp,"MSG_TO_NET") && current_msg!=NULL)
+		bputs(current_msg->to_net.type==NET_FIDO
+			? faddrtoa(*(faddr_t *)current_msg->to_net.addr) 
+			: (char*)current_msg->to_net.addr);
+	if(current_msg!=NULL && (!(current_msg->hdr.attr&MSG_ANONYMOUS) || SYSOP)) {	
+		if(!strcmp(sp,"MSG_FROM")) {
+			bputs(current_msg->from);
+			return(0);
+		}
+		if(!strcmp(sp,"MSG_FROM_EXT")) {
+			bputs(current_msg->from_ext);
+			return(0);
+		}
+		if(!strcmp(sp,"MSG_FROM_NET")) {
+			bputs(current_msg->from_net.type==NET_FIDO
+				? faddrtoa(*(faddr_t *)current_msg->from_net.addr) 
+				: (char*)current_msg->from_net.addr);
+			return(0);
+		}
+	}
+	else if(!strcmp(sp,"MSG_SUBJECT") && current_msg!=NULL)
+		bputs(current_msg->subj);
+	else if(!strcmp(sp,"MSG_DATE") && current_msg!=NULL)
+		bputs(timestr((time_t *)&current_msg->hdr.when_written.time));
+	else if(!strcmp(sp,"MSG_TIMEZONE") && current_msg!=NULL)
+		bputs(zonestr(current_msg->hdr.when_written.zone));
+	else if(!strcmp(sp,"MSG_ATTR") && current_msg!=NULL)
+		bprintf("%s%s%s%s%s%s%s%s%s%s"
+			,current_msg->hdr.attr&MSG_PRIVATE		? "Private  "   :nulstr
+			,current_msg->hdr.attr&MSG_READ			? "Read  "      :nulstr
+			,current_msg->hdr.attr&MSG_DELETE		? "Deleted  "   :nulstr
+			,current_msg->hdr.attr&MSG_KILLREAD		? "Kill  "      :nulstr
+			,current_msg->hdr.attr&MSG_ANONYMOUS	? "Anonymous  " :nulstr
+			,current_msg->hdr.attr&MSG_LOCKED		? "Locked  "    :nulstr
+			,current_msg->hdr.attr&MSG_PERMANENT	? "Permanent  " :nulstr
+			,current_msg->hdr.attr&MSG_MODERATED	? "Moderated  " :nulstr
+			,current_msg->hdr.attr&MSG_VALIDATED	? "Validated  " :nulstr
+			,current_msg->hdr.attr&MSG_REPLIED		? "Replied  "	:nulstr
+			);
+
 	else return(0);
 
 	return(len);