diff --git src/bp-groups/classes/class-bp-groups-component.php src/bp-groups/classes/class-bp-groups-component.php
index 8515a5b..1df6542 100644
--- src/bp-groups/classes/class-bp-groups-component.php
+++ src/bp-groups/classes/class-bp-groups-component.php
@@ -242,20 +242,6 @@ class BP_Groups_Component extends BP_Component {
 				bp_update_is_item_mod  ( groups_is_user_mod  ( bp_loggedin_user_id(), $this->current_group->id ), 'groups' );
 			}
 
-			// Is the logged in user a member of the group?
-			if ( ( is_user_logged_in() && groups_is_user_member( bp_loggedin_user_id(), $this->current_group->id ) ) ) {
-				$this->current_group->is_user_member = true;
-			} else {
-				$this->current_group->is_user_member = false;
-			}
-
-			// Should this group be visible to the logged in user?
-			if ( 'public' == $this->current_group->status || $this->current_group->is_user_member ) {
-				$this->current_group->is_visible = true;
-			} else {
-				$this->current_group->is_visible = false;
-			}
-
 			// Check once if the current group has a custom front template.
 			$this->current_group->front_template = bp_groups_get_front_template( $this->current_group );
 
@@ -557,7 +543,7 @@ class BP_Groups_Component extends BP_Component {
 			// member and does not have an outstanding invitation,
 			// show a "Request Membership" nav item.
 			if ( is_user_logged_in() &&
-				 ! $this->current_group->is_user_member &&
+				 ! $this->current_group->is_member &&
 				 ! groups_check_for_membership_request( bp_loggedin_user_id(), $this->current_group->id ) &&
 				 $this->current_group->status == 'private' &&
 				 ! groups_check_user_has_invite( bp_loggedin_user_id(), $this->current_group->id )
diff --git src/bp-groups/classes/class-bp-groups-group.php src/bp-groups/classes/class-bp-groups-group.php
index a851750..1eee026 100644
--- src/bp-groups/classes/class-bp-groups-group.php
+++ src/bp-groups/classes/class-bp-groups-group.php
@@ -126,6 +126,15 @@ class BP_Groups_Group {
 	protected $is_member;
 
 	/**
+	 * Is the current user a member of this group?
+	 * Alias of $is_member for backward compatibility.
+	 *
+	 * @since 2.9.0
+	 * @var bool
+	 */
+	protected $is_user_member;
+
+	/**
 	 * Does the current user have an outstanding invitation to this group?
 	 *
 	 * @since 1.9.0
@@ -158,6 +167,14 @@ class BP_Groups_Group {
 	protected $user_has_access;
 
 	/**
+	 * Can the current user know that this group exists?
+	 *
+	 * @since 2.9.0
+	 * @var bool
+	 */
+	protected $is_visible;
+
+	/**
 	 * Raw arguments passed to the constructor.
 	 *
 	 * @since 2.0.0
@@ -416,6 +433,7 @@ class BP_Groups_Group {
 				return $this->get_mods();
 
 			case 'is_member' :
+			case 'is_user_member' :
 				return $this->get_is_member();
 
 			case 'is_invited' :
@@ -427,6 +445,9 @@ class BP_Groups_Group {
 			case 'user_has_access' :
 				return $this->get_user_has_access();
 
+			case 'is_visible' :
+				return $this->is_visible();
+
 			default :
 				return isset( $this->{$key} ) ? $this->{$key} : null;
 		}
@@ -448,11 +469,13 @@ class BP_Groups_Group {
 			case 'admins' :
 			case 'is_invited' :
 			case 'is_member' :
+			case 'is_user_member' :
 			case 'is_pending' :
 			case 'last_activity' :
 			case 'mods' :
 			case 'total_member_count' :
 			case 'user_has_access' :
+			case 'is_visible' :
 			case 'forum_id' :
 				return true;
 
@@ -604,6 +627,34 @@ class BP_Groups_Group {
 		return $this->user_has_access;
 	}
 
+	/**
+	 * Checks whether the current user can know the group exists.
+	 *
+	 * @since 2.9.0
+	 *
+	 * @return bool
+	 */
+	protected function is_visible() {
+		if ( isset( $this->is_visible ) ) {
+			return $this->is_visible;
+		}
+
+		if ( 'hidden' === $this->status ) {
+
+			// Assume user can not know about hidden groups.
+			$this->is_visible = false;
+
+			// Group members or community moderators have access.
+			if ( ( is_user_logged_in() && $this->get_is_member() ) || bp_current_user_can( 'bp_moderate' ) ) {
+				$this->is_visible = true;
+			}
+		} else {
+			$this->is_visible = true;
+		}
+
+		return $this->is_visible;
+	}
+
 	/** Static Methods ****************************************************/
 
 	/**
