diff --git a/src/sbbs3/atcodes.cpp b/src/sbbs3/atcodes.cpp
index 52aa402e7c3f8e9ddf1462d59144a724fb123586..f929c14dfa21539cd496cbc4dfa1d6a4f00d4586 100644
--- a/src/sbbs3/atcodes.cpp
+++ b/src/sbbs3/atcodes.cpp
@@ -1072,6 +1072,12 @@ const char* sbbs_t::atcode(char* sp, char* str, size_t maxlen)
 		safe_snprintf(str, maxlen, "%lu", current_msg->total_votes);
 		return(str);
 	}
+	if(!strcmp(sp,"MSG_VOTED"))
+		return (current_msg != NULL && current_msg->user_voted) ? text[PollAnswerChecked] : nulstr;
+	if(!strcmp(sp,"MSG_UPVOTED"))
+		return (current_msg != NULL && current_msg->user_voted == 1) ? text[PollAnswerChecked] : nulstr;
+	if(!strcmp(sp,"MSG_DOWNVOTED"))
+		return (current_msg != NULL && current_msg->user_voted == 2) ? text[PollAnswerChecked] : nulstr;
 
 	if(!strcmp(sp,"SMB_AREA")) {
 		if(smb.subnum!=INVALID_SUB && smb.subnum<cfg.total_subs)
diff --git a/src/sbbs3/getmsg.cpp b/src/sbbs3/getmsg.cpp
index 35cffde55aebf20e8932265bf64e4e23d87ea16c..700bb519ce26f59965d30d1fe93a2e1156c63a8f 100644
--- a/src/sbbs3/getmsg.cpp
+++ b/src/sbbs3/getmsg.cpp
@@ -118,7 +118,7 @@ void sbbs_t::show_msgattr(smbmsg_t* msg)
 /****************************************************************************/
 /* Displays a message header to the screen                                  */
 /****************************************************************************/
-void sbbs_t::show_msghdr(smbmsg_t* msg, uint16_t votes)
+void sbbs_t::show_msghdr(smbmsg_t* msg)
 {
 	char	str[MAX_PATH+1];
 	char	age[64];
@@ -155,8 +155,10 @@ void sbbs_t::show_msghdr(smbmsg_t* msg, uint16_t votes)
 			bprintf(text[MsgFromNet],smb_netaddrstr(&msg->from_net,str)); 
 	}
 	if(!(msg->hdr.attr&MSG_POLL) && (msg->upvotes || msg->downvotes))
-		bprintf(text[MsgVotes], msg->upvotes, votes==1 ? text[PollAnswerChecked] : nulstr
-			,msg->downvotes, votes==2 ? text[PollAnswerChecked] : nulstr, msg->upvotes - msg->downvotes);
+		bprintf(text[MsgVotes]
+			,msg->upvotes, msg->user_voted==1 ? text[PollAnswerChecked] : nulstr
+			,msg->downvotes, msg->user_voted==2 ? text[PollAnswerChecked] : nulstr
+			,msg->upvotes - msg->downvotes);
 	bprintf(text[MsgDate]
 		,timestr(msg->hdr.when_written.time)
 		,smb_zonestr(msg->hdr.when_written.zone,NULL)
@@ -189,14 +191,12 @@ void sbbs_t::show_msg(smbmsg_t* msg, long mode, post_t* post)
 {
 	char*	txt;
 
-	uint16_t votes = 0;
-	
 	if((msg->hdr.type == SMB_MSG_TYPE_NORMAL && (post->upvotes || post->downvotes))
 		|| msg->hdr.type == SMB_MSG_TYPE_POLL)
-		votes = smb_voted_already(&smb, msg->hdr.number
+		msg->user_voted = smb_voted_already(&smb, msg->hdr.number
 					,cfg.sub[smb.subnum]->misc&SUB_NAME ? useron.name : useron.alias, NET_NONE, NULL);
 
-	show_msghdr(msg, votes);
+	show_msghdr(msg);
 
 	if(msg->hdr.type == SMB_MSG_TYPE_POLL && post != NULL && smb.subnum < cfg.total_subs) {
 		char* answer;
@@ -241,12 +241,12 @@ void sbbs_t::show_msg(smbmsg_t* msg, long mode, post_t* post)
 			else if((msg->hdr.auxattr&POLL_RESULTS_MASK) == POLL_RESULTS_CLOSED)
 				results_visible = (msg->hdr.auxattr&POLL_CLOSED) ? true : false;
 			else if((msg->hdr.auxattr&POLL_RESULTS_MASK) != POLL_RESULTS_SECRET)
-				results_visible = votes ? true : false;
+				results_visible = msg->user_voted ? true : false;
 			if(results_visible) {
 				safe_snprintf(str, sizeof(str), text[PollAnswerFmt]
 					,width, width, answer, post->votes[answers], pct);
 				backfill(str, pct);
-				if(votes&(1<<answers))
+				if(msg->user_voted&(1<<answers))
 					bputs(text[PollAnswerChecked]);
 			} else {
 				attr(cfg.color[clr_unfill]);
@@ -255,7 +255,7 @@ void sbbs_t::show_msg(smbmsg_t* msg, long mode, post_t* post)
 			CRLF;
 			answers++;
 		}
-		if(!votes && !(useron.misc&EXPERT) && !(msg->hdr.auxattr&POLL_CLOSED) && !(useron.rest&FLAG('V')))
+		if(!msg->user_voted && !(useron.misc&EXPERT) && !(msg->hdr.auxattr&POLL_CLOSED) && !(useron.rest&FLAG('V')))
 			mnemonics("\r\nTo vote in this poll, hit ~V now.\r\n");
 		return;
 	}
diff --git a/src/sbbs3/sbbs.h b/src/sbbs3/sbbs.h
index 4d134ec3527c2f9f3a573227013b9d1f8ff32d06..dcd6fe94d89cef31eb56d34469a8dcddf193b9f6 100644
--- a/src/sbbs3/sbbs.h
+++ b/src/sbbs3/sbbs.h
@@ -642,7 +642,7 @@ public:
 	/* getmsg.cpp */
 	int		loadmsg(smbmsg_t *msg, ulong number);
 	void	show_msgattr(smbmsg_t*);
-	void	show_msghdr(smbmsg_t* msg, uint16_t votes);
+	void	show_msghdr(smbmsg_t* msg);
 	void	show_msg(smbmsg_t* msg, long mode, post_t* post = NULL);
 	void	msgtotxt(smbmsg_t* msg, char *str, bool header, ulong mode);
 	ulong	getlastmsg(uint subnum, uint32_t *ptr, time_t *t);