diff --git a/src/sbbs3/getmsg.cpp b/src/sbbs3/getmsg.cpp
index eec6149d804a05397c0a466babf5d5322c995932..98b5f6fd7b9412a717576c64c1f585044668f24d 100644
--- a/src/sbbs3/getmsg.cpp
+++ b/src/sbbs3/getmsg.cpp
@@ -137,6 +137,7 @@ void sbbs_t::show_msghdr(smb_t* smb, smbmsg_t* msg)
 		else
 			CRLF;
 	}
+	msghdr_tos = tos;
 	if(!menu("msghdr", P_NOERROR)) {
 		bprintf(text[MsgSubj],msg->subj);
 		if(msg->tags && *msg->tags)
diff --git a/src/sbbs3/js_bbs.cpp b/src/sbbs3/js_bbs.cpp
index e809d532c02fada06a3504be49b6f965fb78d12e..0b8f3088130f8402b7af8c11db0a97f3d8c24008 100644
--- a/src/sbbs3/js_bbs.cpp
+++ b/src/sbbs3/js_bbs.cpp
@@ -145,6 +145,8 @@ enum {
 	,BBS_PROP_MSG_REPLY_ID
 	,BBS_PROP_MSG_DELIVERY_ATTEMPTS
 
+	,BBS_PROP_MSGHDR_TOS
+
 	/* READ ONLY */
 	,BBS_PROP_BATCH_UPLOAD_TOTAL
 	,BBS_PROP_BATCH_DNLOAD_TOTAL
@@ -268,6 +270,8 @@ enum {
 	,"message replied-to identifier"
 	,"message delivery attempt counter"
 
+	,"message header displayed at top-of-screen"
+
 	,"file name"
 	,"file description"
 	,"file directory (number)"
@@ -691,6 +695,9 @@ static JSBool js_bbs_get(JSContext *cx, JSObject *obj, jsid id, jsval *vp)
 			else
 				p=sbbs->current_msg->reply_id;
 			break;
+		case BBS_PROP_MSGHDR_TOS:
+			val = sbbs->msghdr_tos;
+			break;
 
 		/* Currently Displayed File (sbbs.current_file) */
 		case BBS_PROP_FILE_NAME:
@@ -1082,6 +1089,8 @@ static jsSyncPropertySpec js_bbs_properties[] = {
 	{	"msg_delivery_attempts"	,BBS_PROP_MSG_DELIVERY_ATTEMPTS
 														,PROP_READONLY	,310},
 
+	{	"msghdr_top_of_screen"	,BBS_PROP_MSGHDR_TOS	,PROP_READONLY	,31702},
+
 	{	"file_name"			,BBS_PROP_FILE_NAME			,PROP_READONLY	,317},
 	{	"file_description"	,BBS_PROP_FILE_DESC			,PROP_READONLY	,317},
 	{	"file_dir_number"	,BBS_PROP_FILE_DIR			,PROP_READONLY	,317},
diff --git a/src/sbbs3/js_console.cpp b/src/sbbs3/js_console.cpp
index 83b7d319d177358b70481a31f8c0bb16ba6a4270..9c56f20f159fc5ac50037e4cfbb382fcec610af0 100644
--- a/src/sbbs3/js_console.cpp
+++ b/src/sbbs3/js_console.cpp
@@ -234,7 +234,7 @@ static JSBool js_console_set(JSContext *cx, JSObject *obj, jsid id, JSBool stric
 			JS_RESUMEREQUEST(cx, rc);
 			break;
 		case CON_PROP_TOS:
-			sbbs->tos=val;
+			sbbs->tos = val ? true : false;
 			break;
 		case CON_PROP_ROWS:
 			if(val >= TERM_ROWS_MIN && val <= TERM_ROWS_MAX)
diff --git a/src/sbbs3/main.cpp b/src/sbbs3/main.cpp
index 8669ca1d1766b52ed053978d77d15a3a5604e59e..3f9e092760a55f3beea7a42b0a4950e08443ee3e 100644
--- a/src/sbbs3/main.cpp
+++ b/src/sbbs3/main.cpp
@@ -3403,8 +3403,10 @@ sbbs_t::sbbs_t(ushort node_num, union xp_sockaddr *addr, size_t addr_len, const
 	telnet_ack_event=CreateEvent(NULL, /* Manual Reset: */FALSE,/* InitialState */FALSE,NULL);
 
 	listInit(&savedlines, /* flags: */0);
+	sys_status=lncntr=criterrs=0L;
+	tos = false;
+	msghdr_tos = false;
 	listInit(&smb_list, /* flags: */0);
-	sys_status=lncntr=tos=criterrs=0L;
 	column=0;
 	tabstop=8;
 	lastlinelen=0;
diff --git a/src/sbbs3/sbbs.h b/src/sbbs3/sbbs.h
index 1b79a910edea48452d53d90c2f08ee8ab3a768de..c443fb40838bb33881e248b1a44bd7bdb1711c8a 100644
--- a/src/sbbs3/sbbs.h
+++ b/src/sbbs3/sbbs.h
@@ -467,7 +467,8 @@ public:
 	uchar	attr_stack[64];	/* Saved attributes (stack) */
 	int 	attr_sp;		/* Attribute stack pointer */
 	long 	lncntr; 		/* Line Counter - for PAUSE */
-	long 	tos;			/* Top of Screen */
+	bool 	tos;			/* Cursor is currently at the Top of Screen */
+	bool	msghdr_tos;		/* Message header was displayed at Top of Screen */
 	long 	rows;			/* Current number of Rows for User */
 	long	cols;			/* Current number of Columns for User */
 	long	column;			/* Current column counter (for line counter) */