diff --git a/src/sbbs3/js_msg_area.c b/src/sbbs3/js_msg_area.c
index cbc540ebd4b9d7319b9499cf10b0c3354e6f8435..46875bbcd6efa65eceda7a1f17e79b61f0d761a4 100644
--- a/src/sbbs3/js_msg_area.c
+++ b/src/sbbs3/js_msg_area.c
@@ -500,7 +500,7 @@ JSBool js_msg_area_resolve(JSContext* cx, JSObject* areaobj, jsid id)
 
 			val = OBJECT_TO_JSVAL(grpobj);
 			grp_index = -1;
-			if (p->user == NULL || chk_ar(p->cfg, p->cfg->grp[l]->ar, p->user, p->client)) {
+			if (p->user == NULL || user_can_access_grp(p->cfg, l, p->user, p->client)) {
 
 				if (!JS_GetArrayLength(cx, grp_list, (jsuint*)&grp_index))
 					return JS_FALSE;
diff --git a/src/sbbs3/userdat.c b/src/sbbs3/userdat.c
index c52e5083c710a747ceca887dd267c0266b168bed..662ac7634be3841b78836c47c5b2f982f961983b 100644
--- a/src/sbbs3/userdat.c
+++ b/src/sbbs3/userdat.c
@@ -3591,6 +3591,22 @@ size_t user_field_len(enum user_field fnum)
 	}
 }
 
+/****************************************************************************/
+// Determine if the specified user can access one or more sub-boards of group
+/****************************************************************************/
+bool user_can_access_grp(scfg_t* cfg, int grpnum, user_t* user, client_t* client)
+{
+	uint count = 0;
+
+	for (int subnum = 0; subnum < cfg->total_subs; ++subnum) {
+		if (cfg->sub[subnum]->grp != grpnum)
+			continue;
+		if (user_can_access_sub(cfg, subnum, user, client)) // checks grp's AR already
+			count++;
+	}
+	return count >= 1; // User has access to one or more sub-boards of group
+}
+
 /****************************************************************************/
 /* Determine if the specified user can or cannot access the specified sub	*/
 /****************************************************************************/
diff --git a/src/sbbs3/userdat.h b/src/sbbs3/userdat.h
index 622d8174e05f8f95d00231d482e36fa5d0145032..a04744540e50333375ceeed9a6ce69028850b3cb 100644
--- a/src/sbbs3/userdat.h
+++ b/src/sbbs3/userdat.h
@@ -156,6 +156,7 @@ DLLEXPORT bool  user_can_access_all_libs(scfg_t*, user_t*, client_t*);
 DLLEXPORT bool  user_can_access_all_dirs(scfg_t*, int libnum, user_t*, client_t*);
 DLLEXPORT bool  user_can_access_lib(scfg_t*, int libnum, user_t*, client_t*);
 DLLEXPORT bool  user_can_access_dir(scfg_t*, int dirnum, user_t*, client_t* client);
+DLLEXPORT bool  user_can_access_grp(scfg_t*, int subnum, user_t*, client_t* client);
 DLLEXPORT bool  user_can_access_sub(scfg_t*, int subnum, user_t*, client_t* client);
 DLLEXPORT bool  user_can_read_sub(scfg_t*, int subnum, user_t*, client_t* client);
 DLLEXPORT bool  user_can_post(scfg_t*, int subnum, user_t*, client_t* client, uint* reason);