Index: src/bp-activity/classes/class-bp-activity-component.php
===================================================================
--- src/bp-activity/classes/class-bp-activity-component.php
+++ src/bp-activity/classes/class-bp-activity-component.php
@@ -172,7 +172,7 @@
 			'position'            => 10,
 			'screen_function'     => 'bp_activity_screen_my_activity',
 			'default_subnav_slug' => 'just-me',
-			'item_css_id'         => $this->id
+			'item_css_id'         => $this->id,
 		);
 
 		// Add the subnav items to the activity nav item if we are using a theme that supports this.
@@ -182,7 +182,7 @@
 			'parent_url'      => $activity_link,
 			'parent_slug'     => $slug,
 			'screen_function' => 'bp_activity_screen_my_activity',
-			'position'        => 10
+			'position'        => 10,
 		);
 
 		// Check @mentions.
@@ -194,7 +194,7 @@
 				'parent_slug'     => $slug,
 				'screen_function' => 'bp_activity_screen_mentions',
 				'position'        => 20,
-				'item_css_id'     => 'activity-mentions'
+				'item_css_id'     => 'activity-mentions',
 			);
 		}
 
@@ -207,7 +207,7 @@
 				'parent_slug'     => $slug,
 				'screen_function' => 'bp_activity_screen_favorites',
 				'position'        => 30,
-				'item_css_id'     => 'activity-favs'
+				'item_css_id'     => 'activity-favs',
 			);
 		}
 
@@ -220,7 +220,7 @@
 				'parent_slug'     => $slug,
 				'screen_function' => 'bp_activity_screen_friends',
 				'position'        => 40,
-				'item_css_id'     => 'activity-friends'
+				'item_css_id'     => 'activity-friends',
 			) ;
 		}
 
@@ -233,7 +233,7 @@
 				'parent_slug'     => $slug,
 				'screen_function' => 'bp_activity_screen_groups',
 				'position'        => 50,
-				'item_css_id'     => 'activity-groups'
+				'item_css_id'     => 'activity-groups',
 			);
 		}
 
@@ -244,6 +244,7 @@
 	 * Set up the component entries in the WordPress Admin Bar.
 	 *
 	 * @since 1.5.0
+	 * @since 2.7.0 Sync the WP Admin Nav with BP Nav items having the `show_in_admin_bar` property set to true.
 	 *
 	 * @see BP_Component::setup_nav() for a description of the $wp_admin_nav
 	 *      parameter array.
@@ -252,90 +253,39 @@
 	 *                            description.
 	 */
 	public function setup_admin_bar( $wp_admin_nav = array() ) {
+		if ( ! is_user_logged_in() ) {
+			return;
+		}
 
-		// Menus for logged in user.
-		if ( is_user_logged_in() ) {
-
-			// Setup the logged in user variables.
-			$activity_link = trailingslashit( bp_loggedin_user_domain() . bp_get_activity_slug() );
-
-			// Unread message count.
-			if ( bp_activity_do_mentions() ) {
-				$count = bp_get_total_mention_count_for_user( bp_loggedin_user_id() );
-				if ( !empty( $count ) ) {
-					$title = sprintf(
-						/* translators: %s: Unread mention count for the current user */
-						_x( 'Mentions %s', 'Toolbar Mention logged in user', 'buddypress' ),
-						'<span class="count">' . bp_core_number_format( $count ) . '</span>'
-					);
-				} else {
-					$title = _x( 'Mentions', 'Toolbar Mention logged in user', 'buddypress' );
-				}
-			}
-
-			// Add the "Activity" sub menu.
-			$wp_admin_nav[] = array(
-				'parent' => buddypress()->my_account_menu_id,
-				'id'     => 'my-account-' . $this->id,
-				'title'  => _x( 'Activity', 'My Account Activity sub nav', 'buddypress' ),
-				'href'   => $activity_link
-			);
-
-			// Personal.
-			$wp_admin_nav[] = array(
-				'parent'   => 'my-account-' . $this->id,
-				'id'       => 'my-account-' . $this->id . '-personal',
-				'title'    => _x( 'Personal', 'My Account Activity sub nav', 'buddypress' ),
-				'href'     => $activity_link,
-				'position' => 10
-			);
-
-			// Mentions.
-			if ( bp_activity_do_mentions() ) {
-				$wp_admin_nav[] = array(
-					'parent'   => 'my-account-' . $this->id,
-					'id'       => 'my-account-' . $this->id . '-mentions',
-					'title'    => $title,
-					'href'     => trailingslashit( $activity_link . 'mentions' ),
-					'position' => 20
-				);
-			}
-
-			// Favorite activity items.
-			if ( bp_activity_can_favorite() ) {
-				$wp_admin_nav[] = array(
-					'parent'   => 'my-account-' . $this->id,
-					'id'       => 'my-account-' . $this->id . '-favorites',
-					'title'    => _x( 'Favorites', 'My Account Activity sub nav', 'buddypress' ),
-					'href'     => trailingslashit( $activity_link . 'favorites' ),
-					'position' => 30
-				);
-			}
-
-			// Friends?
-			if ( bp_is_active( 'friends' ) ) {
-				$wp_admin_nav[] = array(
-					'parent'   => 'my-account-' . $this->id,
-					'id'       => 'my-account-' . $this->id . '-friends',
-					'title'    => _x( 'Friends', 'My Account Activity sub nav', 'buddypress' ),
-					'href'     => trailingslashit( $activity_link . bp_get_friends_slug() ),
-					'position' => 40
-				);
-			}
+		// Get nav with 'show_in_admin_bar' support.
+		$nav = buddypress()->members->nav->get_admin_nav( array(
+			'parent_slug' => bp_get_activity_slug(),
+		) );
 
-			// Groups?
-			if ( bp_is_active( 'groups' ) ) {
-				$wp_admin_nav[] = array(
-					'parent'   => 'my-account-' . $this->id,
-					'id'       => 'my-account-' . $this->id . '-groups',
-					'title'    => _x( 'Groups', 'My Account Activity sub nav', 'buddypress' ),
-					'href'     => trailingslashit( $activity_link . bp_get_groups_slug() ),
-					'position' => 50
-				);
+		// Override some nav items for the admin bar.
+		if ( ! empty( $nav['children'] ) ) {
+			foreach ( $nav['children'] as $key => $sub_nav ) {
+				// Override title for "Mentions" nav to add count.
+				if ( 'mentions' === $sub_nav->slug && bp_activity_do_mentions() ) {
+					$count = bp_get_total_mention_count_for_user( bp_loggedin_user_id() );
+					if ( ! empty( $count ) ) {
+						$nav['children'][$key]->name = sprintf(
+							/* translators: %s: Unread mention count for the current user */
+							_x( 'Mentions %s', 'Toolbar Mention logged in user', 'buddypress' ),
+							'<span class="count">' . bp_core_number_format( $count ) . '</span>'
+						);
+					}
+				}
 			}
 		}
 
-		parent::setup_admin_bar( $wp_admin_nav );
+		// Configure nav array for setup_admin_bar() method.
+		$nav = $this->setup_admin_nav( $nav, array(
+			'default_subnav_id' => 'personal'
+		) );
+
+		// Setup the admin bar.
+		parent::setup_admin_bar( $nav );
 	}
 
 	/**
Index: src/bp-core/bp-core-buddybar.php
===================================================================
--- src/bp-core/bp-core-buddybar.php
+++ src/bp-core/bp-core-buddybar.php
@@ -32,6 +32,8 @@
  *     @type callable    $screen_function         The callback function that will run when the nav item is clicked.
  *     @type bool|string $default_subnav_slug     Optional. The slug of the default subnav item to select when the nav
  *                                                item is clicked.
+ *     @type bool        $show_in_admin_bar       Optional. Whether to add this nav item to the WP Admin Bar.
+ *                                                Default: true.
  * }
  * @param string       $component The component the navigation is attached to. Defaults to 'members'.
  * @return bool|null Returns false on failure.
@@ -49,7 +51,8 @@
 		'site_admin_only'         => false, // Can only site admins see this nav item?
 		'position'                => 99,    // Index of where this nav item should be positioned.
 		'screen_function'         => false, // The name of the function to run when clicked.
-		'default_subnav_slug'     => false  // The slug of the default subnav item to select when clicked.
+		'default_subnav_slug'     => false, // The slug of the default subnav item to select when clicked.
+		'show_in_admin_bar'       => true,  // Whether to add this nav item to the WP Admin Bar.
 	);
 
 	$r = wp_parse_args( $args, $defaults );
@@ -106,6 +109,8 @@
  *     @type callable    $screen_function         The callback function that will run when the nav item is clicked.
  *     @type bool|string $default_subnav_slug     Optional. The slug of the default subnav item to select when the nav
  *                                                item is clicked.
+ *     @type bool        $show_in_admin_bar       Optional. Whether to add this nav item to the WP Admin Bar.
+ *                                                Default: true.
  * }
  * @param string       $component Optional. Component that the nav belongs to.
  * @return bool|BP_Nav_Item Returns false on failure, new nav item on success.
@@ -121,7 +126,8 @@
 		'site_admin_only'         => false, // Can only site admins see this nav item?
 		'position'                => 99,    // Index of where this nav item should be positioned.
 		'screen_function'         => false, // The name of the function to run when clicked.
-		'default_subnav_slug'     => false  // The slug of the default subnav item to select when clicked.
+		'default_subnav_slug'     => false, // The slug of the default subnav item to select when clicked.
+		'show_in_admin_bar'       => true,  // Whether to add this nav item to the WP Admin Bar.
 	);
 
 	$r = wp_parse_args( $args, $defaults );
@@ -148,7 +154,8 @@
 		'show_for_displayed_user' => $r['show_for_displayed_user'],
 		'position'                => $r['position'],
 		'screen_function'         => &$r['screen_function'],
-		'default_subnav_slug'	  => $r['default_subnav_slug']
+		'default_subnav_slug'	  => $r['default_subnav_slug'],
+		'show_in_admin_bar'       => $r['show_in_admin_bar'],
 	);
 
 	// Add the item to the nav.
@@ -392,7 +399,7 @@
  *     @type string      $link              Optional. The URL that the subnav item should point to. Defaults to a value
  *                                          generated from the `$parent_url` + `$slug`.
  *     @type bool        $show_in_admin_bar Optional. Whether the nav item should be added into the group's "Edit"
- *                                          Admin Bar menu for group admins. Default: false.
+ *                                          Admin Bar menu for group admins. Default: true.
  * }
  * @param string       $component The component the navigation is attached to. Defaults to 'members'.
  * @return bool|null Returns false on failure.
@@ -472,7 +479,7 @@
  *                                          to. Defaults to a value generated from the $parent_url + $slug.
  *     @type bool        $show_in_admin_bar Optional. Whether the nav item should be added into
  *                                          the group's "Edit" Admin Bar menu for group admins.
- *                                          Default: false.
+ *                                          Default: true.
  * }
  * @param string       $component The component the navigation is attached to. Defaults to 'members'.
  * @return bool|object Returns false on failure, new BP_Nav_Item instance on success.
@@ -492,7 +499,7 @@
 		'position'          => 90,    // Index of where this nav item should be positioned.
 		'screen_function'   => false, // The name of the function to run when clicked.
 		'link'              => '',    // The link for the subnav item; optional, not usually required.
-		'show_in_admin_bar' => false, // Show the Manage link in the current group's "Edit" Admin Bar menu.
+		'show_in_admin_bar' => true,  // Show the Manage link in the current group's "Edit" Admin Bar menu.
 	) );
 
 	// If we don't have the required info we need, don't create this subnav item.
@@ -568,7 +575,7 @@
  *                                       Defaults to a value generated from the $parent_url + $slug.
  *     @type bool     $show_in_admin_bar Optional. Whether the nav item should be added into
  *                                       the group's "Edit" Admin Bar menu for group admins.
- *                                       Default: false.
+ *                                       Default: true.
  * }
  * @param string       $component The component the navigation is attached to. Defaults to 'members'.
  * @return bool|null Returns false on failure.
Index: src/bp-core/classes/class-bp-component.php
===================================================================
--- src/bp-core/classes/class-bp-component.php
+++ src/bp-core/classes/class-bp-component.php
@@ -505,6 +505,58 @@
 	}
 
 	/**
+	 * Helper method to configure nav array for setup_admin_bar() method.
+	 *
+	 * @since 2.7.0
+	 *
+	 * @param array $nav Nav from BP_Core_Nav::get_admin_nav().
+	 * @param array $args {
+	 *     Arguments for configuring the nav array.
+	 *     @type string $parent_title      Title for the parent nav.
+	 *     @type string $default_subnav_id Subnav ID for the default subnav.
+	 * }
+	 * @return array
+	 */
+	public function setup_admin_nav( $nav = array(), $args = array() ) {
+		if ( ! isset( buddypress()->members->nav ) ) {
+			return array();
+		}
+
+		$wp_admin_nav = array();
+
+		if ( ! empty( $nav['parent'] ) ) {
+			// Add the parent menu.
+			$wp_admin_nav[] = array(
+				'parent' => buddypress()->my_account_menu_id,
+				'id'     => 'my-account-' . $this->id,
+				'title'  => isset( $args['parent_title'] ) ? $args['parent_title'] : $nav['parent']->name,
+				'href'   => $nav['parent']->link
+			);
+		}
+
+		if ( ! empty( $nav['children'] ) ) {
+			foreach ( $nav['children'] as $key => $sub_nav ) {
+				if ( isset( $nav['parent']->default_subnav_slug ) && $sub_nav->slug !== $nav['parent']->default_subnav_slug ) {
+					$sub_nav_id    = sprintf( 'my-account-%s-%s', $this->id, $sub_nav->slug );
+				} elseif ( isset( $nav['parent']->default_subnav_slug ) && $sub_nav->slug === $nav['parent']->default_subnav_slug ) {
+					$sub_nav_id    = sprintf( 'my-account-%s-%s', $this->id, isset( $args['default_subnav_id'] ) ? $args['default_subnav_id'] : $sub_nav->slug );
+				}
+
+				// Add the sub nav items.
+				$wp_admin_nav[] = array(
+					'parent'   => 'my-account-' . $this->id,
+					'id'       => $sub_nav_id,
+					'title'    => $sub_nav->name,
+					'href'     => $sub_nav->link,
+					'position' => $sub_nav->position,
+				);
+			}
+		}
+
+		return $wp_admin_nav;
+	}
+
+	/**
 	 * Set up the component entries in the WordPress Admin Bar.
 	 *
 	 * @since 1.5.0
Index: src/bp-core/classes/class-bp-core-nav.php
===================================================================
--- src/bp-core/classes/class-bp-core-nav.php
+++ src/bp-core/classes/class-bp-core-nav.php
@@ -399,4 +399,39 @@
 
 		return $primary_nav_items;
 	}
+
+	/**
+	 * Get the Nav Items to display in the WP Admin Bar
+	 *
+	 * @since  2.7.0
+	 *
+	 * @param  array  $args Filters to select the specific items. See wp_list_filter().
+	 * @return array        An associative array containing the parent nav and its children.
+	 */
+	public function get_admin_nav( $args = array() ) {
+		$admin_nav = array();
+
+		$params = wp_parse_args( $args, array( 'show_in_admin_bar' => true ) );
+
+		// We need the parent slug, and this is a WP Admin Nav!
+		if ( empty( $params['parent_slug'] ) || empty( $params['show_in_admin_bar'] ) ) {
+			return $admin_nav;
+		}
+
+		// Validate the primary nav item
+		$primary_nav_item = $this->get( $params['parent_slug'] );
+
+		if ( ! $primary_nav_item || empty( $primary_nav_item->show_in_admin_bar ) ) {
+			return $admin_nav;
+		}
+
+		$admin_nav['parent'] = $primary_nav_item;
+		$secondary_nav_items = $this->get_secondary( $params );
+
+		if ( ! $secondary_nav_items ) {
+			return $admin_nav;
+		}
+
+		return array_merge( $admin_nav, array( 'children' => $secondary_nav_items ) );
+	}
 }
Index: src/bp-friends/classes/class-bp-friends-component.php
===================================================================
--- src/bp-friends/classes/class-bp-friends-component.php
+++ src/bp-friends/classes/class-bp-friends-component.php
@@ -198,59 +198,50 @@
 	 *                            for description.
 	 */
 	public function setup_admin_bar( $wp_admin_nav = array() ) {
+		if ( ! is_user_logged_in() ) {
+			return;
+		}
 
-		// Menus for logged in user.
-		if ( is_user_logged_in() ) {
-
-			// Setup the logged in user variables.
-			$friends_link = trailingslashit( bp_loggedin_user_domain() . bp_get_friends_slug() );
-
-			// Pending friend requests.
-			$count = count( friends_get_friendship_request_user_ids( bp_loggedin_user_id() ) );
-			if ( !empty( $count ) ) {
-				$title = sprintf(
-					/* translators: %s: Pending friend request count for the current user */
-					_x( 'Friends %s', 'My Account Friends menu', 'buddypress' ),
-					'<span class="count">' . bp_core_number_format( $count ) . '</span>'
-				);
-				$pending = sprintf(
-					/* translators: %s: Pending friend request count for the current user */
-					_x( 'Pending Requests %s', 'My Account Friends menu sub nav', 'buddypress' ),
-					'<span class="count">' . bp_core_number_format( $count ) . '</span>'
-				);
-			} else {
-				$title   = _x( 'Friends',            'My Account Friends menu',         'buddypress' );
-				$pending = _x( 'No Pending Requests','My Account Friends menu sub nav', 'buddypress' );
-			}
+		// Get nav with 'show_in_admin_bar' support.
+		$nav = buddypress()->members->nav->get_admin_nav( array(
+			'parent_slug' => bp_get_friends_slug(),
+		) );
 
-			// Add the "My Account" sub menus.
-			$wp_admin_nav[] = array(
-				'parent' => buddypress()->my_account_menu_id,
-				'id'     => 'my-account-' . $this->id,
-				'title'  => $title,
-				'href'   => $friends_link
+		// Pending friend requests.
+		$count = count( friends_get_friendship_request_user_ids( bp_loggedin_user_id() ) );
+		if ( !empty( $count ) ) {
+			$title = sprintf(
+				/* translators: %s: Pending friend request count for the current user */
+				_x( 'Friends %s', 'My Account Friends menu', 'buddypress' ),
+				'<span class="count">' . bp_core_number_format( $count ) . '</span>'
 			);
-
-			// My Friends.
-			$wp_admin_nav[] = array(
-				'parent'   => 'my-account-' . $this->id,
-				'id'       => 'my-account-' . $this->id . '-friendships',
-				'title'    => _x( 'Friendships', 'My Account Friends menu sub nav', 'buddypress' ),
-				'href'     => $friends_link,
-				'position' => 10
+			$pending = sprintf(
+				/* translators: %s: Pending friend request count for the current user */
+				_x( 'Pending Requests %s', 'My Account Friends menu sub nav', 'buddypress' ),
+				'<span class="count">' . bp_core_number_format( $count ) . '</span>'
 			);
+		} else {
+			$title   = _x( 'Friends',            'My Account Friends menu',         'buddypress' );
+			$pending = _x( 'No Pending Requests','My Account Friends menu sub nav', 'buddypress' );
+		}
 
-			// Requests.
-			$wp_admin_nav[] = array(
-				'parent'   => 'my-account-' . $this->id,
-				'id'       => 'my-account-' . $this->id . '-requests',
-				'title'    => $pending,
-				'href'     => trailingslashit( $friends_link . 'requests' ),
-				'position' => 20
-			);
+		// Override some nav items for the admin bar.
+		if ( ! empty( $nav['children'] ) ) {
+			foreach ( $nav['children'] as $key => $sub_nav ) {
+				// Override title for "Requests" nav to add count.
+				if ( 'requests' === $sub_nav->slug ) {
+					$nav['children'][$key]->name = $pending;
+				}
+			}
 		}
 
-		parent::setup_admin_bar( $wp_admin_nav );
+		// Configure nav array for setup_admin_bar() method.
+		$nav = $this->setup_admin_nav( $nav, array(
+			'parent_title' => $title
+		) );
+
+		// Setup the admin bar.
+		parent::setup_admin_bar( $nav );
 	}
 
 	/**
Index: src/bp-groups/classes/class-bp-groups-component.php
===================================================================
--- src/bp-groups/classes/class-bp-groups-component.php
+++ src/bp-groups/classes/class-bp-groups-component.php
@@ -724,71 +724,62 @@
 	 * @param array $wp_admin_nav See BP_Component::setup_admin_bar() for a description.
 	 */
 	public function setup_admin_bar( $wp_admin_nav = array() ) {
+		if ( ! is_user_logged_in() ) {
+			return;
+		}
 
-		// Menus for logged in user.
-		if ( is_user_logged_in() ) {
+		// Get nav with 'show_in_admin_bar' support.
+		$nav = buddypress()->members->nav->get_admin_nav( array(
+			'parent_slug' => bp_get_groups_slug(),
+		) );
 
-			// Setup the logged in user variables.
-			$groups_link = trailingslashit( bp_loggedin_user_domain() . bp_get_groups_slug() );
+		// Pending group invites.
+		$count   = groups_get_invite_count_for_user();
+		$title   = _x( 'Groups', 'My Account Groups', 'buddypress' );
+		$pending = _x( 'No Pending Invites', 'My Account Groups sub nav', 'buddypress' );
 
-			// Pending group invites.
-			$count   = groups_get_invite_count_for_user();
-			$title   = _x( 'Groups', 'My Account Groups', 'buddypress' );
-			$pending = _x( 'No Pending Invites', 'My Account Groups sub nav', 'buddypress' );
+		if ( ! empty( $count['total'] ) ) {
+			$title = sprintf(
+				/* translators: %s: Group invitation count for the current user */
+				_x( 'Groups %s', 'My Account Groups nav', 'buddypress' ),
+				'<span class="count">' . bp_core_number_format( $count ) . '</span>'
+			);
 
-			if ( ! empty( $count['total'] ) ) {
-				$title = sprintf(
-					/* translators: %s: Group invitation count for the current user */
-					_x( 'Groups %s', 'My Account Groups nav', 'buddypress' ),
-					'<span class="count">' . bp_core_number_format( $count ) . '</span>'
-				);
+			$pending = sprintf(
+				/* translators: %s: Group invitation count for the current user */
+				_x( 'Pending Invites %s', 'My Account Groups sub nav', 'buddypress' ),
+				'<span class="count">' . bp_core_number_format( $count ) . '</span>'
+			);
+		}
 
-				$pending = sprintf(
-					/* translators: %s: Group invitation count for the current user */
-					_x( 'Pending Invites %s', 'My Account Groups sub nav', 'buddypress' ),
-					'<span class="count">' . bp_core_number_format( $count ) . '</span>'
-				);
+		// Override some nav items for the admin bar.
+		if ( ! empty( $nav['children'] ) ) {
+			foreach ( $nav['children'] as $key => $sub_nav ) {
+				// Override title for "Invites".
+				if ( 'invites' === $sub_nav->slug ) {
+					$nav['children'][$key]->name = $pending;
+				}
 			}
+		}
 
-			// Add the "My Account" sub menus.
-			$wp_admin_nav[] = array(
-				'parent' => buddypress()->my_account_menu_id,
-				'id'     => 'my-account-' . $this->id,
-				'title'  => $title,
-				'href'   => $groups_link
-			);
-
-			// My Groups.
-			$wp_admin_nav[] = array(
-				'parent'   => 'my-account-' . $this->id,
-				'id'       => 'my-account-' . $this->id . '-memberships',
-				'title'    => _x( 'Memberships', 'My Account Groups sub nav', 'buddypress' ),
-				'href'     => $groups_link,
-				'position' => 10
-			);
+		// Configure nav array for setup_admin_bar() method.
+		$nav = $this->setup_admin_nav( $nav, array(
+			'parent_title' => $title
+		) );
 
-			// Invitations.
-			$wp_admin_nav[] = array(
+		// Create a Group.
+		if ( bp_user_can_create_groups() ) {
+			$nav[] = array(
 				'parent'   => 'my-account-' . $this->id,
-				'id'       => 'my-account-' . $this->id . '-invites',
-				'title'    => $pending,
-				'href'     => trailingslashit( $groups_link . 'invites' ),
-				'position' => 30
+				'id'       => 'my-account-' . $this->id . '-create',
+				'title'    => _x( 'Create a Group', 'My Account Groups sub nav', 'buddypress' ),
+				'href'     => trailingslashit( bp_get_groups_directory_permalink() . 'create' ),
+				'position' => 90
 			);
-
-			// Create a Group.
-			if ( bp_user_can_create_groups() ) {
-				$wp_admin_nav[] = array(
-					'parent'   => 'my-account-' . $this->id,
-					'id'       => 'my-account-' . $this->id . '-create',
-					'title'    => _x( 'Create a Group', 'My Account Groups sub nav', 'buddypress' ),
-					'href'     => trailingslashit( bp_get_groups_directory_permalink() . 'create' ),
-					'position' => 90
-				);
-			}
 		}
 
-		parent::setup_admin_bar( $wp_admin_nav );
+		// Setup the admin bar.
+		parent::setup_admin_bar( $nav );
 	}
 
 	/**
Index: src/bp-messages/classes/class-bp-messages-component.php
===================================================================
--- src/bp-messages/classes/class-bp-messages-component.php
+++ src/bp-messages/classes/class-bp-messages-component.php
@@ -172,7 +172,7 @@
 			'show_for_displayed_user' => $access,
 			'screen_function'         => 'messages_screen_inbox',
 			'default_subnav_slug'     => 'inbox',
-			'item_css_id'             => $this->id
+			'item_css_id'             => $this->id,
 		);
 
 		// Add the subnav items to the profile.
@@ -183,7 +183,7 @@
 			'parent_slug'     => $slug,
 			'screen_function' => 'messages_screen_inbox',
 			'position'        => 10,
-			'user_has_access' => $access
+			'user_has_access' => $access,
 		);
 
 		if ( bp_is_active( $this->id, 'star' ) ) {
@@ -194,7 +194,7 @@
 				'parent_slug'     => $slug,
 				'screen_function' => 'bp_messages_star_screen',
 				'position'        => 11,
-				'user_has_access' => $access
+				'user_has_access' => $access,
 			);
 		}
 
@@ -205,7 +205,7 @@
 			'parent_slug'     => $slug,
 			'screen_function' => 'messages_screen_sentbox',
 			'position'        => 20,
-			'user_has_access' => $access
+			'user_has_access' => $access,
 		);
 
 		$sub_nav[] = array(
@@ -215,7 +215,7 @@
 			'parent_slug'     => $slug,
 			'screen_function' => 'messages_screen_compose',
 			'position'        => 30,
-			'user_has_access' => $access
+			'user_has_access' => $access,
 		);
 
 		if ( bp_current_user_can( 'bp_moderate' ) ) {
@@ -226,7 +226,7 @@
 				'parent_slug'     => $slug,
 				'screen_function' => 'messages_screen_notices',
 				'position'        => 90,
-				'user_has_access' => true
+				'user_has_access' => true,
 			);
 		}
 
@@ -239,90 +239,42 @@
 	 * @param array $wp_admin_nav See {BP_Component::setup_admin_bar()} for details.
 	 */
 	public function setup_admin_bar( $wp_admin_nav = array() ) {
+		if ( ! is_user_logged_in() ) {
+			return;
+		}
 
-		// Menus for logged in user.
-		if ( is_user_logged_in() ) {
-
-			// Setup the logged in user variables.
-			$messages_link = trailingslashit( bp_loggedin_user_domain() . bp_get_messages_slug() );
-
-			// Unread message count.
-			$count = messages_get_unread_count();
-			if ( !empty( $count ) ) {
-				$title = sprintf(
-					/* translators: %s: Unread message count for the current user */
-					__( 'Messages %s', 'buddypress' ),
-					'<span class="count">' . bp_core_number_format( $count ) . '</span>'
-				);
-				$inbox = sprintf(
-					/* translators: %s: Unread message count for the current user */
-					__( 'Inbox %s', 'buddypress' ),
-					'<span class="count">' . bp_core_number_format( $count ) . '</span>'
-				);
-			} else {
-				$title = __( 'Messages', 'buddypress' );
-				$inbox = __( 'Inbox',    'buddypress' );
-			}
-
-			// Add main Messages menu.
-			$wp_admin_nav[] = array(
-				'parent' => buddypress()->my_account_menu_id,
-				'id'     => 'my-account-' . $this->id,
-				'title'  => $title,
-				'href'   => $messages_link
-			);
-
-			// Inbox.
-			$wp_admin_nav[] = array(
-				'parent'   => 'my-account-' . $this->id,
-				'id'       => 'my-account-' . $this->id . '-inbox',
-				'title'    => $inbox,
-				'href'     => $messages_link,
-				'position' => 10
-			);
-
-			// Starred.
-			if ( bp_is_active( $this->id, 'star' ) ) {
-				$wp_admin_nav[] = array(
-					'parent'   => 'my-account-' . $this->id,
-					'id'       => 'my-account-' . $this->id . '-starred',
-					'title'    => __( 'Starred', 'buddypress' ),
-					'href'     => trailingslashit( $messages_link . bp_get_messages_starred_slug() ),
-					'position' => 11
-				);
-			}
-
-			// Sent Messages.
-			$wp_admin_nav[] = array(
-				'parent'   => 'my-account-' . $this->id,
-				'id'       => 'my-account-' . $this->id . '-sentbox',
-				'title'    => __( 'Sent', 'buddypress' ),
-				'href'     => trailingslashit( $messages_link . 'sentbox' ),
-				'position' => 20
-			);
+		// Get nav with 'show_in_admin_bar' support.
+		$nav = buddypress()->members->nav->get_admin_nav( array(
+			'parent_slug' => bp_get_messages_slug(),
+		) );
 
-			// Compose Message.
-			$wp_admin_nav[] = array(
-				'parent'   => 'my-account-' . $this->id,
-				'id'       => 'my-account-' . $this->id . '-compose',
-				'title'    => __( 'Compose', 'buddypress' ),
-				'href'     => trailingslashit( $messages_link . 'compose' ),
-				'position' => 30
+		// Set 'Inbox' subnav title.
+		$count = messages_get_unread_count();
+		if ( !empty( $count ) ) {
+			$inbox = sprintf(
+				/* translators: %s: Unread message count for the current user */
+				__( 'Inbox %s', 'buddypress' ),
+				'<span class="count">' . bp_core_number_format( $count ) . '</span>'
 			);
+		} else {
+			$inbox = __( 'Inbox', 'buddypress' );
+		}
 
-			// Site Wide Notices.
-			if ( bp_current_user_can( 'bp_moderate' ) ) {
-				$wp_admin_nav[] = array(
-					'parent'   => 'my-account-' . $this->id,
-					'id'       => 'my-account-' . $this->id . '-notices',
-					'title'    => __( 'All Member Notices', 'buddypress' ),
-					'href'     => trailingslashit( $messages_link . 'notices' ),
-					'position' => 90
-				);
+		// Override some nav items for the admin bar.
+		if ( ! empty( $nav['children'] ) ) {
+			foreach ( $nav['children'] as $key => $sub_nav ) {
+				// Override title for "Inbox" nav to add count.
+				if ( 'inbox' === $sub_nav->slug ) {
+					$nav['children'][$key]->name = $inbox;
+				}
 			}
 		}
 
-		parent::setup_admin_bar( $wp_admin_nav );
+		// Configure nav array for setup_admin_bar() method.
+		$nav = $this->setup_admin_nav( $nav );
+
+		// Setup the admin bar.
+		parent::setup_admin_bar( $nav );
 	}
 
 	/**
Index: src/bp-notifications/classes/class-bp-notifications-component.php
===================================================================
--- src/bp-notifications/classes/class-bp-notifications-component.php
+++ src/bp-notifications/classes/class-bp-notifications-component.php
@@ -192,59 +192,42 @@
 	 *                            description.
 	 */
 	public function setup_admin_bar( $wp_admin_nav = array() ) {
+		if ( ! is_user_logged_in() ) {
+			return;
+		}
 
-		// Menus for logged in user.
-		if ( is_user_logged_in() ) {
-
-			// Setup the logged in user variables.
-			$notifications_link = trailingslashit( bp_loggedin_user_domain() . bp_get_notifications_slug() );
-
-			// Pending notification requests.
-			$count = bp_notifications_get_unread_notification_count( bp_loggedin_user_id() );
-			if ( ! empty( $count ) ) {
-				$title = sprintf(
-					/* translators: %s: Unread notification count for the current user */
-					_x( 'Notifications %s', 'My Account Notification pending', 'buddypress' ),
-					'<span class="count">' . bp_core_number_format( $count ) . '</span>'
-				);
-				$unread = sprintf(
-					/* translators: %s: Unread notification count for the current user */
-					_x( 'Unread %s', 'My Account Notification pending', 'buddypress' ),
-					'<span class="count">' . bp_core_number_format( $count ) . '</span>'
-				);
-			} else {
-				$title  = _x( 'Notifications', 'My Account Notification',         'buddypress' );
-				$unread = _x( 'Unread',        'My Account Notification sub nav', 'buddypress' );
-			}
-
-			// Add the "My Account" sub menus.
-			$wp_admin_nav[] = array(
-				'parent' => buddypress()->my_account_menu_id,
-				'id'     => 'my-account-' . $this->id,
-				'title'  => $title,
-				'href'   => $notifications_link
-			);
+		// Get nav with 'show_in_admin_bar' support.
+		$nav = buddypress()->members->nav->get_admin_nav( array(
+			'parent_slug' => bp_get_notifications_slug(),
+		) );
 
-			// Unread.
-			$wp_admin_nav[] = array(
-				'parent'   => 'my-account-' . $this->id,
-				'id'       => 'my-account-' . $this->id . '-unread',
-				'title'    => $unread,
-				'href'     => $notifications_link,
-				'position' => 10
+		// Set 'Unread' subnav title.
+		$count = bp_notifications_get_unread_notification_count( bp_loggedin_user_id() );
+		if ( ! empty( $count ) ) {
+			$unread = sprintf(
+				/* translators: %s: Unread notification count for the current user */
+				_x( 'Unread %s', 'My Account Notification pending', 'buddypress' ),
+				'<span class="count">' . bp_core_number_format( $count ) . '</span>'
 			);
+		} else {
+			$unread = _x( 'Unread', 'My Account Notification sub nav', 'buddypress' );
+		}
 
-			// Read.
-			$wp_admin_nav[] = array(
-				'parent'   => 'my-account-' . $this->id,
-				'id'       => 'my-account-' . $this->id . '-read',
-				'title'    => _x( 'Read', 'My Account Notification sub nav', 'buddypress' ),
-				'href'     => trailingslashit( $notifications_link . 'read' ),
-				'position' => 20
-			);
+		// Override some nav items for the admin bar.
+		if ( ! empty( $nav['children'] ) ) {
+			foreach ( $nav['children'] as $key => $sub_nav ) {
+				// Override title for "Unread" nav to add count.
+				if ( 'unread' === $sub_nav->slug ) {
+					$nav['children'][$key]->name = $unread;
+				}
+			}
 		}
 
-		parent::setup_admin_bar( $wp_admin_nav );
+		// Configure nav array for setup_admin_bar() method.
+		$nav = $this->setup_admin_nav( $nav );
+
+		// Setup the admin bar.
+		parent::setup_admin_bar( $nav );
 	}
 
 	/**
Index: src/bp-settings/classes/class-bp-settings-component.php
===================================================================
--- src/bp-settings/classes/class-bp-settings-component.php
+++ src/bp-settings/classes/class-bp-settings-component.php
@@ -103,7 +103,7 @@
 			'position'                => 100,
 			'show_for_displayed_user' => $access,
 			'screen_function'         => 'bp_settings_screen_general',
-			'default_subnav_slug'     => 'general'
+			'default_subnav_slug'     => 'general',
 		);
 
 		// Add General Settings nav item.
@@ -114,44 +114,47 @@
 			'parent_slug'     => $slug,
 			'screen_function' => 'bp_settings_screen_general',
 			'position'        => 10,
-			'user_has_access' => $access
+			'user_has_access' => $access,
 		);
 
 		// Add Email nav item. Formerly called 'Notifications', we
 		// retain the old slug and function names for backward compat.
 		$sub_nav[] = array(
-			'name'            => __( 'Email', 'buddypress' ),
-			'slug'            => 'notifications',
-			'parent_url'      => $settings_link,
-			'parent_slug'     => $slug,
-			'screen_function' => 'bp_settings_screen_notification',
-			'position'        => 20,
-			'user_has_access' => $access
+			'name'              => __( 'Email', 'buddypress' ),
+			'slug'              => 'notifications',
+			'parent_url'        => $settings_link,
+			'parent_slug'       => $slug,
+			'screen_function'   => 'bp_settings_screen_notification',
+			'position'          => 20,
+			'user_has_access'   => $access,
+			'show_in_admin_bar' => false,
 		);
 
 		// Add Spam Account nav item.
 		if ( bp_current_user_can( 'bp_moderate' ) ) {
 			$sub_nav[] = array(
-				'name'            => __( 'Capabilities', 'buddypress' ),
-				'slug'            => 'capabilities',
-				'parent_url'      => $settings_link,
-				'parent_slug'     => $slug,
-				'screen_function' => 'bp_settings_screen_capabilities',
-				'position'        => 80,
-				'user_has_access' => ! bp_is_my_profile()
+				'name'              => __( 'Capabilities', 'buddypress' ),
+				'slug'              => 'capabilities',
+				'parent_url'        => $settings_link,
+				'parent_slug'       => $slug,
+				'screen_function'   => 'bp_settings_screen_capabilities',
+				'position'          => 80,
+				'user_has_access'   => ! bp_is_my_profile(),
+				'show_in_admin_bar' => false,
 			);
 		}
 
 		// Add Delete Account nav item.
 		if ( ( ! bp_disable_account_deletion() && bp_is_my_profile() ) || bp_current_user_can( 'delete_users' ) ) {
 			$sub_nav[] = array(
-				'name'            => __( 'Delete Account', 'buddypress' ),
-				'slug'            => 'delete-account',
-				'parent_url'      => $settings_link,
-				'parent_slug'     => $slug,
-				'screen_function' => 'bp_settings_screen_delete_account',
-				'position'        => 90,
-				'user_has_access' => ! is_super_admin( bp_displayed_user_id() )
+				'name'              => __( 'Delete Account', 'buddypress' ),
+				'slug'              => 'delete-account',
+				'parent_url'        => $settings_link,
+				'parent_slug'       => $slug,
+				'screen_function'   => 'bp_settings_screen_delete_account',
+				'position'          => 90,
+				'user_has_access'   => ! is_super_admin( bp_displayed_user_id() ),
+				'show_in_admin_bar' => false,
 			);
 		}
 
@@ -166,53 +169,43 @@
 	 * @param array $wp_admin_nav Array of Admin Bar items.
 	 */
 	public function setup_admin_bar( $wp_admin_nav = array() ) {
+		if ( ! is_user_logged_in() ) {
+			return;
+		}
 
-		// Menus for logged in user.
-		if ( is_user_logged_in() ) {
+		// Get nav with 'show_in_admin_bar' support.
+		$nav = buddypress()->members->nav->get_admin_nav( array(
+			'parent_slug' => bp_get_settings_slug(),
+		) );
 
-			// Setup the logged in user variables.
-			$settings_link = trailingslashit( bp_loggedin_user_domain() . bp_get_settings_slug() );
+		// Configure nav array for setup_admin_bar() method.
+		$nav = $this->setup_admin_nav( $nav );
 
-			// Add main Settings menu.
-			$wp_admin_nav[] = array(
-				'parent' => buddypress()->my_account_menu_id,
-				'id'     => 'my-account-' . $this->id,
-				'title'  => __( 'Settings', 'buddypress' ),
-				'href'   => $settings_link
-			);
+		// Notifications - only add the tab when there is something to display there.
+		$settings_link = trailingslashit( bp_loggedin_user_domain() . bp_get_settings_slug() );
 
-			// General Account.
-			$wp_admin_nav[] = array(
+		if ( has_action( 'bp_notification_settings' ) ) {
+			$nav[] = array(
 				'parent'   => 'my-account-' . $this->id,
-				'id'       => 'my-account-' . $this->id . '-general',
-				'title'    => __( 'General', 'buddypress' ),
-				'href'     => $settings_link,
-				'position' => 10
+				'id'       => 'my-account-' . $this->id . '-notifications',
+				'title'    => __( 'Email', 'buddypress' ),
+				'href'     => trailingslashit( $settings_link . 'notifications' ),
+				'position' => 20
 			);
+		}
 
-			// Notifications - only add the tab when there is something to display there.
-			if ( has_action( 'bp_notification_settings' ) ) {
-				$wp_admin_nav[] = array(
-					'parent'   => 'my-account-' . $this->id,
-					'id'       => 'my-account-' . $this->id . '-notifications',
-					'title'    => __( 'Email', 'buddypress' ),
-					'href'     => trailingslashit( $settings_link . 'notifications' ),
-					'position' => 20
-				);
-			}
-
-			// Delete Account
-			if ( !bp_current_user_can( 'bp_moderate' ) && ! bp_core_get_root_option( 'bp-disable-account-deletion' ) ) {
-				$wp_admin_nav[] = array(
-					'parent'   => 'my-account-' . $this->id,
-					'id'       => 'my-account-' . $this->id . '-delete-account',
-					'title'    => __( 'Delete Account', 'buddypress' ),
-					'href'     => trailingslashit( $settings_link . 'delete-account' ),
-					'position' => 90
-				);
-			}
+		// Delete Account
+		if ( !bp_current_user_can( 'bp_moderate' ) && ! bp_core_get_root_option( 'bp-disable-account-deletion' ) ) {
+			$nav[] = array(
+				'parent'   => 'my-account-' . $this->id,
+				'id'       => 'my-account-' . $this->id . '-delete-account',
+				'title'    => __( 'Delete Account', 'buddypress' ),
+				'href'     => trailingslashit( $settings_link . 'delete-account' ),
+				'position' => 90
+			);
 		}
 
-		parent::setup_admin_bar( $wp_admin_nav );
+		// Setup the admin bar.
+		parent::setup_admin_bar( $nav );
 	}
 }
Index: src/bp-xprofile/classes/class-bp-xprofile-component.php
===================================================================
--- src/bp-xprofile/classes/class-bp-xprofile-component.php
+++ src/bp-xprofile/classes/class-bp-xprofile-component.php
@@ -212,7 +212,7 @@
 			'position'            => 20,
 			'screen_function'     => 'xprofile_screen_display_profile',
 			'default_subnav_slug' => 'public',
-			'item_css_id'         => $this->id
+			'item_css_id'         => $this->id,
 		);
 
 		// Add the subnav items to the profile.
@@ -222,7 +222,7 @@
 			'parent_url'      => $profile_link,
 			'parent_slug'     => $slug,
 			'screen_function' => 'xprofile_screen_display_profile',
-			'position'        => 10
+			'position'        => 10,
 		);
 
 		// Edit Profile.
@@ -233,7 +233,7 @@
 			'parent_slug'     => $slug,
 			'screen_function' => 'xprofile_screen_edit_profile',
 			'position'        => 20,
-			'user_has_access' => $access
+			'user_has_access' => $access,
 		);
 
 		// Change Avatar.
@@ -245,7 +245,7 @@
 				'parent_slug'     => $slug,
 				'screen_function' => 'xprofile_screen_change_avatar',
 				'position'        => 30,
-				'user_has_access' => $access
+				'user_has_access' => $access,
 			);
 		}
 
@@ -258,7 +258,7 @@
 				'parent_slug'     => $slug,
 				'screen_function' => 'xprofile_screen_change_cover_image',
 				'position'        => 40,
-				'user_has_access' => $access
+				'user_has_access' => $access,
 			);
 		}
 
@@ -301,7 +301,7 @@
 			'parent_slug'     => $settings_slug,
 			'screen_function' => 'bp_xprofile_screen_settings',
 			'position'        => 30,
-			'user_has_access' => bp_core_can_edit_settings()
+			'user_has_access' => bp_core_can_edit_settings(),
 		), 'members' );
 	}
 
@@ -313,62 +313,20 @@
 	 * @param array $wp_admin_nav Admin Bar items.
 	 */
 	public function setup_admin_bar( $wp_admin_nav = array() ) {
+		if ( ! is_user_logged_in() ) {
+			return;
+		}
 
-		// Menus for logged in user.
-		if ( is_user_logged_in() ) {
-
-			// Profile link.
-			$profile_link = trailingslashit( bp_loggedin_user_domain() . bp_get_profile_slug() );
-
-			// Add the "Profile" sub menu.
-			$wp_admin_nav[] = array(
-				'parent' => buddypress()->my_account_menu_id,
-				'id'     => 'my-account-' . $this->id,
-				'title'  => _x( 'Profile', 'My Account Profile', 'buddypress' ),
-				'href'   => $profile_link
-			);
-
-			// View Profile.
-			$wp_admin_nav[] = array(
-				'parent'   => 'my-account-' . $this->id,
-				'id'       => 'my-account-' . $this->id . '-public',
-				'title'    => _x( 'View', 'My Account Profile sub nav', 'buddypress' ),
-				'href'     => $profile_link,
-				'position' => 10
-			);
-
-			// Edit Profile.
-			$wp_admin_nav[] = array(
-				'parent'   => 'my-account-' . $this->id,
-				'id'       => 'my-account-' . $this->id . '-edit',
-				'title'    => _x( 'Edit', 'My Account Profile sub nav', 'buddypress' ),
-				'href'     => trailingslashit( $profile_link . 'edit' ),
-				'position' => 20
-			);
-
-			// Edit Avatar.
-			if ( buddypress()->avatar->show_avatars ) {
-				$wp_admin_nav[] = array(
-					'parent'   => 'my-account-' . $this->id,
-					'id'       => 'my-account-' . $this->id . '-change-avatar',
-					'title'    => _x( 'Change Profile Photo', 'My Account Profile sub nav', 'buddypress' ),
-					'href'     => trailingslashit( $profile_link . 'change-avatar' ),
-					'position' => 30
-				);
-			}
+		// Get nav with 'show_in_admin_bar' support.
+		$nav = buddypress()->members->nav->get_admin_nav( array(
+			'parent_slug' => bp_get_profile_slug(),
+		) );
 
-			if ( bp_displayed_user_use_cover_image_header() ) {
-				$wp_admin_nav[] = array(
-					'parent'   => 'my-account-' . $this->id,
-					'id'       => 'my-account-' . $this->id . '-change-cover-image',
-					'title'    => _x( 'Change Cover Image', 'My Account Profile sub nav', 'buddypress' ),
-					'href'     => trailingslashit( $profile_link . 'change-cover-image' ),
-					'position' => 40
-				);
-			}
-		}
+		// Configure nav array for setup_admin_bar() method.
+		$nav = $this->setup_admin_nav( $nav );
 
-		parent::setup_admin_bar( $wp_admin_nav );
+		// Setup the admin bar.
+		parent::setup_admin_bar( $nav );
 	}
 
 	/**
