diff --git a/src/sbbs3/scfg/scfg.c b/src/sbbs3/scfg/scfg.c
index f97f2cafab61a597dfa2c2b03c93595ac26df63f..c4678175d5fc4211a0762579e8076748e73681db 100644
--- a/src/sbbs3/scfg/scfg.c
+++ b/src/sbbs3/scfg/scfg.c
@@ -125,6 +125,13 @@ void sort_subs(int grpnum)
 {
 	sort_group = grpnum;
 	qsort(cfg.sub, cfg.total_subs, sizeof(sub_t*), sub_compare);
+
+	// Re-number the sub-boards after sorting:
+	for(int i = 0; i < cfg.total_subs; ++i) {
+		if(cfg.sub[i]->grp != grpnum)
+			continue;
+		cfg.sub[i]->subnum = i;
+	}
 }
 
 static int sort_lib = 0;
@@ -152,6 +159,13 @@ void sort_dirs(int libnum)
 {
 	sort_lib = libnum;
 	qsort(cfg.dir, cfg.total_dirs, sizeof(dir_t*), dir_compare);
+
+	// Re-number the directories after sorting:
+	for(int i = 0; i < cfg.total_dirs; ++i) {
+		if(cfg.dir[i]->lib != libnum)
+			continue;
+		cfg.dir[i]->dirnum = i;
+	}
 }
 
 void wizard_msg(int page, int total, const char* text)