diff --git a/src/sbbs3/sbbsdefs.h b/src/sbbs3/sbbsdefs.h
index 9672f683a6ee5ea1467d8dccba26cb194283fb0d..573732f60b46ed91aef15e3fe567214605ce98fe 100644
--- a/src/sbbs3/sbbsdefs.h
+++ b/src/sbbs3/sbbsdefs.h
@@ -240,7 +240,6 @@
 #define SUB_EDIT        (1 << 28)     /* Users can edit message text after posting */
 #define SUB_EDITLAST    (1 << 29)     /* Users can edit last message only */
 #define SUB_NOUSERSIG   (1 << 30)     /* Suppress user signatures */
-#define SUB_HDRMOD      (1U << 31)    /* Modified sub-board header info (SCFG) */
 
 /* Bit values for lib[x].misc */
 #define LIB_DIRS    (1 << 0)          /* Local directory (sub-directory of lib parent) access */
diff --git a/src/sbbs3/scfg/scfgmsg.c b/src/sbbs3/scfg/scfgmsg.c
index 087f5cbb474ef86b27aed22af4e5f6230291f56f..7b16545ffd7285eaa35c66b12266e978ba3fc1d1 100644
--- a/src/sbbs3/scfg/scfgmsg.c
+++ b/src/sbbs3/scfg/scfgmsg.c
@@ -810,7 +810,7 @@ void msgs_cfg()
 									template = cfg.sub[j];
 								else if (cfg.sub[j] != template) {
 									uifc.changes = 1;
-									cfg.sub[j]->misc = template->misc | SUB_HDRMOD;
+									cfg.sub[j]->misc = template->misc;
 									cfg.sub[j]->misc &= ~SUB_TEMPLATE;
 									SAFECOPY(cfg.sub[j]->post_arstr, template->post_arstr);
 									SAFECOPY(cfg.sub[j]->read_arstr, template->read_arstr);
@@ -826,6 +826,7 @@ void msgs_cfg()
 									cfg.sub[j]->pmode   = template->pmode;
 									cfg.sub[j]->n_pmode = template->n_pmode;
 									cfg.sub[j]->faddr   = template->faddr;
+									cfg.sub[j]->cfg_modified = true;
 								}
 							}
 					}
diff --git a/src/sbbs3/scfg/scfgsub.c b/src/sbbs3/scfg/scfgsub.c
index c43295cf41b4bbd2d37212509a3c25af6834855e..9152d667426582087b68dbb86906718812e84a10 100644
--- a/src/sbbs3/scfg/scfgsub.c
+++ b/src/sbbs3/scfg/scfgsub.c
@@ -50,7 +50,7 @@ bool new_sub(int new_subnum, int group_num, sub_t* pasted_sub, long misc)
 				break;
 		}
 	}
-	new_subboard->misc |= SUB_HDRMOD;
+	new_subboard->cfg_modified = true;
 	if (pasted_sub != NULL) {
 		*new_subboard = *pasted_sub;
 		if (cut_qhub_sub != NULL && (*cut_qhub_sub) == NULL) {
@@ -539,7 +539,7 @@ void sub_cfg(int grpnum)
 					uifc.input(WIN_MID | WIN_SAV, 0, 17, "Maximum Number of Messages (0=Unlimited)"
 					           , str, 9, K_EDIT | K_NUMBER);
 					cfg.sub[i]->maxmsgs = atoi(str);
-					cfg.sub[i]->misc |= SUB_HDRMOD;
+					cfg.sub[i]->cfg_modified = true;
 					break;
 				case 12:
 					sprintf(str, "%u", cfg.sub[i]->maxage);
@@ -561,7 +561,7 @@ void sub_cfg(int grpnum)
 					uifc.input(WIN_MID | WIN_SAV, 0, 17, "Maximum Age of Messages (in days)"
 					           , str, 5, K_EDIT | K_NUMBER);
 					cfg.sub[i]->maxage = atoi(str);
-					cfg.sub[i]->misc |= SUB_HDRMOD;
+					cfg.sub[i]->cfg_modified = true;
 					break;
 				case 13:
 					sprintf(str, "%" PRIu32, cfg.sub[i]->maxcrcs);
@@ -582,7 +582,7 @@ void sub_cfg(int grpnum)
 					uifc.input(WIN_MID | WIN_SAV, 0, 17, "Maximum Number of CRCs"
 					           , str, 9, K_EDIT | K_NUMBER);
 					cfg.sub[i]->maxcrcs = atol(str);
-					cfg.sub[i]->misc |= SUB_HDRMOD;
+					cfg.sub[i]->cfg_modified = true;
 					break;
 				case 14:
 					while (1) {
@@ -1585,7 +1585,7 @@ void sub_cfg(int grpnum)
 									uifc.changes = TRUE;
 									cfg.sub[i]->misc |= SUB_HYPER;
 									cfg.sub[i]->misc &= ~SUB_FAST;
-									cfg.sub[i]->misc |= SUB_HDRMOD;
+									cfg.sub[i]->cfg_modified = true;
 									break;
 								}
 								if (!n)
@@ -1610,7 +1610,7 @@ void sub_cfg(int grpnum)
 								}
 
 								if (cfg.sub[i]->misc & SUB_HYPER)
-									cfg.sub[i]->misc |= SUB_HDRMOD;
+									cfg.sub[i]->cfg_modified = true;
 								if (n == 1 && !(cfg.sub[i]->misc & SUB_FAST)) {
 									uifc.changes = TRUE;
 									cfg.sub[i]->misc |= SUB_FAST;
diff --git a/src/sbbs3/scfgdefs.h b/src/sbbs3/scfgdefs.h
index d20df710157d397d3c26429993612cf2ee29641e..bc7baf28801fa888c6c9ccbacb7f6fdff43fd748 100644
--- a/src/sbbs3/scfgdefs.h
+++ b/src/sbbs3/scfgdefs.h
@@ -57,6 +57,7 @@ typedef struct {							/* Message sub board info */
 	int32_t		pmode;						/* printfile()/putmsg() mode flags */
 	int32_t		n_pmode;					/* set of negated pmode flags */
 	faddr_t		faddr;						/* FidoNet address */
+	bool		cfg_modified;               /* Update SMB header for this sub */
 
 } sub_t;
 
diff --git a/src/sbbs3/scfgsave.c b/src/sbbs3/scfgsave.c
index 6fb3b58ce0e833c8e46bf2ac4c2100fb885097ba..d59e333c586a88221750d9a51483df3e50a9ec03 100644
--- a/src/sbbs3/scfgsave.c
+++ b/src/sbbs3/scfgsave.c
@@ -411,7 +411,7 @@ bool write_msgs_cfg(scfg_t* cfg)
 			iniSetString(&section, name, "read_ars", cfg->sub[i]->read_arstr, &ini_style);
 			iniSetString(&section, name, "post_ars", cfg->sub[i]->post_arstr, &ini_style);
 			iniSetString(&section, name, "operator_ars", cfg->sub[i]->op_arstr, &ini_style);
-			iniSetHexInt(&section, name, "settings", cfg->sub[i]->misc & (~SUB_HDRMOD), &ini_style);    /* Don't write mod bit */
+			iniSetHexInt(&section, name, "settings", cfg->sub[i]->misc, &ini_style);    /* Don't write mod bit */
 			iniSetString(&section, name, "qwknet_tagline", cfg->sub[i]->tagline, &ini_style);
 			iniSetString(&section, name, "fidonet_origin", cfg->sub[i]->origline, &ini_style);
 			iniSetString(&section, name, "post_sem", cfg->sub[i]->post_sem, &ini_style);
@@ -429,7 +429,7 @@ bool write_msgs_cfg(scfg_t* cfg)
 			strListMerge(&ini, section);
 			free(section);
 
-			if (all_msghdr || (cfg->sub[i]->misc & SUB_HDRMOD && !no_msghdr)) {
+			if (all_msghdr || (cfg->sub[i]->cfg_modified && !no_msghdr)) {
 				if (!cfg->sub[i]->data_dir[0])
 					SAFEPRINTF(smb.file, "%ssubs", cfg->data_dir);
 				else