diff --git src/bp-core/bp-core-classes.php src/bp-core/bp-core-classes.php
index 41be065..0a65aa1 100644
--- src/bp-core/bp-core-classes.php
+++ src/bp-core/bp-core-classes.php
@@ -23,3 +23,4 @@ require dirname( __FILE__ ) . '/classes/class-bp-recursive-query.php';
 require dirname( __FILE__ ) . '/classes/class-bp-media-extractor.php';
 require dirname( __FILE__ ) . '/classes/class-bp-attachment.php';
 require dirname( __FILE__ ) . '/classes/class-bp-attachment-avatar.php';
+require dirname( __FILE__ ) . '/classes/class-bp-single-item-navigation.php';
diff --git src/bp-core/bp-core-filters.php src/bp-core/bp-core-filters.php
index b5e857a..1c23fbe 100644
--- src/bp-core/bp-core-filters.php
+++ src/bp-core/bp-core-filters.php
@@ -731,7 +731,22 @@ function bp_modify_page_title( $title = '', $sep = '&raquo;', $seplocation = 'ri
 
 	// A single item from a component other than groups
 	} elseif ( bp_is_single_item() ) {
-		$title_parts = array( $bp->bp_options_title, $bp->bp_options_nav[ bp_current_item() ][ bp_current_action() ]['name'] );
+		if ( isset( $bp->{$bp->current_component}->nav->main ) ) {
+			$component_nav_section = '';
+
+			// Get the component nav section name
+			foreach ( $bp->{$bp->current_component}->nav->main as $component_nav_item ) {
+				if ( bp_current_action() !== $component_nav_item['slug'] ) {
+					continue;
+				}
+
+				$component_nav_section = $component_nav_item['name'];
+			}
+
+			$title_parts = array( $bp->bp_options_title, $component_nav_section );
+		} else {
+			$title_parts = array( $bp->bp_options_title, $bp->bp_options_nav[ bp_current_item() ][ bp_current_action() ]['name'] );
+		}
 
 	// An index or directory
 	} elseif ( bp_is_directory() ) {
diff --git src/bp-core/bp-core-template.php src/bp-core/bp-core-template.php
index 5cebddf..1c88693 100644
--- src/bp-core/bp-core-template.php
+++ src/bp-core/bp-core-template.php
@@ -87,6 +87,48 @@ function bp_get_options_nav( $parent_slug = '' ) {
 }
 
 /**
+ * Output a component's single item main nav
+ *
+ * @since BuddyPress (2.4.0)
+ *
+ * @param  string $component the component id
+ */
+function bp_single_item_main_nav( $component = '' ) {
+	$bp = buddypress();
+
+	if ( empty( $component ) ) {
+		$component = bp_current_component();
+	}
+
+	if ( ! isset( $bp->{$component}->nav ) || ! is_a( $bp->{$component}->nav, 'BP_Single_Item_Navigation' ) ) {
+		return;
+	}
+
+	$bp->{$component}->nav->display_main_nav();
+}
+
+/**
+ * Output a component's single item options nav
+ *
+ * @since BuddyPress (2.4.0)
+ *
+ * @param  string $component the component id
+ */
+function bp_single_item_sub_nav( $component = '' ) {
+	$bp = buddypress();
+
+	if ( empty( $component ) ) {
+		$component = bp_current_component();
+	}
+
+	if ( ! bp_is_single_item() || ! isset( $bp->{$component}->nav ) || ! is_a( $bp->{$component}->nav, 'BP_Single_Item_Navigation' ) ) {
+		return;
+	}
+
+	$bp->{$component}->nav->display_sub_nav();
+}
+
+/**
  * Get the 'bp_options_title' property from the BP global.
  *
  * Not currently used in BuddyPress.
diff --git src/bp-core/classes/class-bp-single-item-navigation.php src/bp-core/classes/class-bp-single-item-navigation.php
index e69de29..c47387e 100644
--- src/bp-core/classes/class-bp-single-item-navigation.php
+++ src/bp-core/classes/class-bp-single-item-navigation.php
@@ -0,0 +1,497 @@
+<?php
+/**
+ * Core component classes.
+ *
+ * @package BuddyPress
+ * @subpackage Core
+ */
+
+// Exit if accessed directly
+defined( 'ABSPATH' ) || exit;
+
+/**
+ * API to create a component's single item navigation.
+ *
+ * @since BuddyPress (2.4.0)
+ */
+class BP_Single_Item_Navigation {
+
+	/**
+	 * The single item main nav
+	 *
+	 * @since BuddyPress (2.4.0)
+	 * @var array
+	 */
+	public $main = array();
+
+	/**
+	 * The single item sub nav
+	 *
+	 * @since BuddyPress (2.4.0)
+	 * @var array
+	 */
+	public $sub  = array();
+
+	/**
+	 * The default args to be merged with the
+	 * ones passed to the constructor
+	 *
+	 * @since BuddyPress (2.4.0)
+	 * @var array
+	 */
+	protected $default_args = array(
+		'component_id'           => '',
+		'component_slug'         => '',
+		'single_item_name'       => '',
+	);
+
+	/**
+	 * Constructor
+	 *
+	 * @since BuddyPress (2.4.0)
+	 *
+	 * @param array $args {
+	 *     Array of arguments.
+	 *     @type string $component_id String describing the component id (eg: blogs, groups...).
+	 *     @type string $component_slug The root slug of the component (eg: blogs, sites, groups...)
+	 *     @type string $single_item_name Required. The single item name (eg: blog, group...)
+	 * }
+	 */
+	public function __construct( $args = array() ) {
+		if ( empty( $args['single_item_name'] ) ) {
+			return false;
+		}
+
+		// Merge args
+		$params = wp_parse_args( $args, $this->default_args, $args['single_item_name'] . '_single_item_nav_params' );
+
+		foreach ( $params as $key => $param ) {
+			// Sanitize slug
+			if ( 'component_slug' === $key ) {
+				$this->{$key} = sanitize_title( $param );
+
+			// Sanitize other keys
+			} else {
+				$this->{$key} = sanitize_key( $param );
+			}
+		}
+
+		// Use the current component as a fallback
+		if ( empty( $this->component_id ) ) {
+			$this->component_id = bp_current_component();
+		}
+
+		// Use the component root slug as a fallback
+		if ( empty( $this->component_slug ) && is_callable( 'bp_get_' . $this->component_id . '_root_slug' ) ) {
+			$this->component_slug = call_user_func( 'bp_get_' . $this->component_id . '_root_slug' );
+		}
+	}
+
+	/**
+	 * Setup the single item navigation
+	 *
+	 * @since BuddyPress (2.4.0)
+	 *
+	 * @param  array  $main_nav list of associative arrays containing the nav items params
+	 * @param  array  $sub_nav  list of associative arrays containing the sub nav items params
+	 */
+	public function setup_nav( $main_nav = array(), $sub_nav = array() ) {
+		// Bail if the component slug or the component id are not set
+		if ( ! $this->component_slug || ! $this->component_id ) {
+			return false;
+		}
+
+		// No sub nav items without a main nav item
+		if ( ! empty( $main_nav ) ) {
+			foreach( (array) $main_nav as $item ) {
+				$this->new_main_nav_item( $item );
+			}
+
+			// Sub nav items are not required
+			if ( ! empty( $sub_nav ) ) {
+				foreach( (array) $sub_nav as $sub_item ) {
+					$this->new_sub_nav_item( $sub_item );
+				}
+			}
+		}
+
+		/**
+		 * Fires at the end of the setup_nav method inside BP_Single_Item_Navigation.
+		 *
+		 * This is a dynamic hook that is based on the component string ID.
+		 *
+		 * @since BuddyPress (2.4.0)
+		 */
+		do_action( 'bp_' . $this->component_id . '_single_item_setup_nav' );
+	}
+
+	/**
+	 * Add a new nav item to main nav
+	 *
+	 * @since BuddyPress (2.4.0)
+	 *
+	 * @param  array  $args associative array containing the item params
+	 */
+	public function new_main_nav_item( $args = array() ) {
+		// Bail if the component slug or the component id are not set
+		if ( ! $this->component_slug || ! $this->component_id ) {
+			return false;
+		}
+
+		// Get BuddyPress instance
+		$bp = buddypress();
+
+		$slug = false;
+		if ( ! empty( $args['slug'] ) ) {
+			$slug = $args['slug'];
+		}
+
+		$item = bp_parse_args( $args, array(
+			'name'                    => false, // Display name for the nav item
+			'slug'                    => false, // URL slug for the nav item
+			'item_css_id'             => false, // The CSS ID to apply to the HTML of the nav item
+			'item_admin_only'         => false, // Can only item 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
+		), $this->single_item_name . '_main_nav_item_' . $slug );
+
+		// If we don't have the required info we need, don't create this nav item
+		if ( empty( $item['name'] ) || empty( $item['slug'] ) || empty( $item['screen_function'] ) ) {
+			return false;
+		}
+
+		// If this is for site admins only and the user is not one, don't create the subnav item
+		if ( ! empty( $item['item_admin_only'] ) && ! bp_is_item_admin() ) {
+			return false;
+		}
+
+		if ( empty( $item['item_css_id'] ) ) {
+			$item['item_css_id'] = $item['slug'];
+		}
+
+		/**
+		 * Link is composed by:
+		 * 1. the root domain          eg: http://site.url
+		 * 2. the component root slug  eg: sites
+		 * 3. the current item slug    eg: blog_slug
+		 * 4. the nav item slug        eg: home
+		 */
+		$link = bp_get_root_domain() . '/' . $this->component_slug . '/' . bp_current_item() . '/' . $item['slug'];
+
+		$this->main[ $item['slug'] ] = array(
+			'name'                    => $item['name'],
+			'slug'                    => $item['slug'],
+			'link'                    => trailingslashit( $link ),
+			'css_id'                  => $item['item_css_id'],
+			'position'                => $item['position'],
+			'screen_function'         => &$item['screen_function'],
+			'default_subnav_slug'	  => $item['default_subnav_slug']
+		);
+
+		/**
+		 * If this condition is true, this means the url looks like
+		 * http://site.url/sites/blog_slug/home
+		 */
+		if ( bp_is_current_action( $item['slug'] ) ) {
+			/**
+			 * If the default subnav match the first action variable move all left
+			 */
+			if ( ! empty( $item['default_subnav_slug'] ) && bp_is_action_variable( $item['default_subnav_slug'], 0 ) && ! bp_action_variable( 1 ) ) {
+				unset( $bp->canonical_stack['action_variables'][0] );
+
+			// No action variable it's the root of the nav
+			} elseif ( ! bp_action_variable( 0 ) ) {
+
+				// Add our screen hook if screen function is callable
+				if ( is_callable( $item['screen_function'] ) ) {
+					add_action( 'bp_screens', $item['screen_function'], 3 );
+				}
+
+				if ( ! empty( $item['default_subnav_slug'] ) ) {
+					/**
+					 * Filters the component's single nav default subnav item.
+					 *
+					 * @since BuddyPress (2.4.0)
+					 *
+					 * @param string $default_subnav_slug The slug of the default subnav item
+					 *                                    to select when clicked.
+					 * @param array  $r                   Parsed arguments for the nav item.
+					 */
+					$bp->current_action = apply_filters( 'bp_single_item_default_subnav', $item['default_subnav_slug'], $item );
+				}
+			}
+		}
+	}
+
+	/**
+	 * Add a new sub nav item to sub nav
+	 *
+	 * @since BuddyPress (2.4.0)
+	 *
+	 * @param  array  $args associative array containing the sub item params
+	 */
+	public function new_sub_nav_item( $args = array() ) {
+		// Bail if the component slug or the component id are not set
+		if ( ! $this->component_slug || ! $this->component_id ) {
+			return false;
+		}
+
+		$slug = false;
+		if ( ! empty( $args['slug'] ) ) {
+			$slug = $args['slug'];
+		}
+
+		$sub_item = bp_parse_args( $args, array(
+			'name'              => false, // Display name for the nav item
+			'slug'              => false, // URL slug for the nav item
+			'parent_slug'       => false, // URL slug of the parent nav item
+			'parent_url'        => false, // URL of the parent item
+			'item_css_id'       => false, // The CSS ID to apply to the HTML of the nav item
+			'user_has_access'   => true,  // Can the logged in user see this nav item?
+			'no_access_url'     => '',
+			'item_admin_only'   => false, // Can only item admins see this nav item?
+			'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
+		), $this->single_item_name . '_sub_nav_item_' . $slug );
+
+
+		// If we don't have the required info we need, don't create this subnav item
+		if ( empty( $sub_item['name'] ) || empty( $sub_item['slug'] ) || empty( $sub_item['parent_slug'] ) || empty( $sub_item['parent_url'] ) || empty( $sub_item['screen_function'] ) ) {
+			return false;
+		}
+
+		// If this is for site admins only and the user is not one, don't create the subnav item
+		if ( ! empty( $sub_item['item_admin_only'] ) && ! bp_is_item_admin() ) {
+			return false;
+		}
+
+		if ( empty( $sub_item['link'] ) ) {
+			$sub_item['link'] = trailingslashit( $sub_item['parent_url'] . $sub_item['slug'] );
+
+			// If this sub item is the default for its parent, skip the slug
+			if ( $sub_item['slug'] === $this->main[ $sub_item['parent_slug'] ]['default_subnav_slug'] ) {
+				$sub_item['link'] = trailingslashit( $sub_item['parent_url'] );
+			}
+		}
+
+		if ( empty( $sub_item['item_css_id'] ) ) {
+			$sub_item['item_css_id'] = $sub_item['slug'];
+		}
+
+		$this->sub[ $sub_item['parent_slug'] ][ $sub_item['slug'] ] = array(
+			'name'              => $sub_item['name'],
+			'link'              => $sub_item['link'],
+			'slug'              => $sub_item['slug'],
+			'css_id'            => $sub_item['item_css_id'],
+			'position'          => $sub_item['position'],
+			'user_has_access'   => $sub_item['user_has_access'],
+			'no_access_url'     => $sub_item['no_access_url'],
+			'screen_function'   => &$sub_item['screen_function'],
+			'show_in_admin_bar' => (bool) $sub_item['show_in_admin_bar'],
+		);
+
+		if ( ! bp_is_current_component( $this->component_id ) && ! bp_is_current_action( $sub_item['parent_slug'] ) ) {
+			return false;
+		}
+
+		if ( bp_action_variable( 0 ) && bp_is_action_variable( $sub_item['slug'], 0 ) ) {
+
+			$hooked = bp_core_maybe_hook_new_subnav_screen_function( $this->sub[ $sub_item['parent_slug'] ][ $sub_item['slug'] ] );
+
+			// If redirect args have been returned, perform the redirect now
+			if ( ! empty( $hooked['status'] ) && 'failure' === $hooked['status'] && isset( $hooked['redirect_args'] ) ) {
+				bp_core_no_access( $hooked['redirect_args'] );
+			}
+		}
+	}
+
+	/**
+	 * Sort the main nav items and output the main nav.
+	 *
+	 * @since BuddyPress (2.4.0)
+	 *
+	 * @return HTML output
+	 */
+	public function display_main_nav() {
+		// Bail if the component slug or the component id are not set
+		if ( ! $this->component_slug || ! $this->component_id ) {
+			return false;
+		}
+
+		// Sort the main nav just before it's displayed
+		$main_nav = bp_sort_by_key( $this->main, 'position', 'num' );
+
+		// Loop throw each nav item
+		foreach ( (array) $main_nav as $main_nav_item ) {
+			// Defaults to none
+			$selected = '';
+
+			if ( bp_is_current_action( $main_nav_item['slug'] ) ) {
+				$selected = ' class="current selected"';
+			}
+
+			/**
+			 * Filters the component's "main nav", the first-level single item navigation menu.
+			 *
+			 * This is a dynamic filter that is dependent on the component's single item and the provided css_id value.
+			 *
+			 * @since BuddyPress (2.4.0)
+			 *
+			 * @param string $value         HTML list item for the submenu item.
+			 * @param array  $subnav_item   Main nav array item being displayed.
+			 */
+			echo apply_filters_ref_array( 'bp_' . $this->single_item_name . '_main_nav_' . $main_nav_item['css_id'], array( '<li id="' . esc_attr( $main_nav_item['css_id'] ) . '-' . esc_attr( $this->component_id ) . '-li" ' . $selected . '><a id="' . esc_attr( $this->single_item_name ) . '-' . esc_attr( $main_nav_item['slug'] ) . '" href="' . esc_url( $main_nav_item['link'] ) . '">' . $main_nav_item['name'] . '</a></li>', &$main_nav_item ) );
+		}
+	}
+
+	/**
+	 * Sort the sub nav items and output the sub nav
+	 *
+	 * @since BuddyPress (2.4.0)
+	 *
+	 * @return HTML output
+	 */
+	public function display_sub_nav() {
+		// Bail if the component slug or the component id are not set
+		if ( ! $this->component_slug || ! $this->component_id ) {
+			return false;
+		}
+
+		$the_index = bp_current_action();
+
+		if ( bp_action_variable( 0 ) ) {
+			$selected_item = bp_action_variable( 0 );
+		} else {
+			$selected_item = $the_index;
+		}
+
+		if ( empty( $this->sub[ $the_index ] ) ) {
+			return;
+		}
+
+		// Sort the main nav just before it's displayed
+		$sub_nav = bp_sort_by_key( $this->sub[ $the_index ], 'position', 'num' );
+
+		// Loop throw each nav item
+		foreach ( (array) $sub_nav as $sub_nav_item ) {
+
+			if ( empty( $sub_nav_item['user_has_access'] ) ) {
+				continue;
+			}
+
+			// If the current action or an action variable matches the nav item id, then add a highlight CSS class.
+			if ( $sub_nav_item['slug'] === $selected_item ) {
+				$selected = ' class="current selected"';
+			} else {
+				$selected = '';
+			}
+
+			/**
+			 * Filters the component's "single nav", the secondary-level single item navigation menu.
+			 *
+			 * This is a dynamic filter that is dependent on the component's id and the provided css_id value.
+			 *
+			 * @since BuddyPress (2.4.0)
+			 *
+			 * @param string $value         HTML list item for the submenu item.
+			 * @param array  $subnav_item   Submenu array item being displayed.
+			 * @param string $selected_item Current action.
+			 */
+			echo apply_filters( 'bp_' . $this->single_item_name . '_single_subnav_' . $sub_nav_item['css_id'], '<li id="' . esc_attr( $sub_nav_item['css_id'] . '-' . $this->component_id . '-' . $this->single_item_name . '-li' ) . '" ' . $selected . '><a id="' . esc_attr( $sub_nav_item['css_id'] ) . '" href="' . esc_url( $sub_nav_item['link'] ) . '">' . $sub_nav_item['name'] . '</a></li>', $sub_nav_item, $selected_item );
+		}
+	}
+
+	/**
+	 * Get the sub nav items for the provided parent slug
+	 *
+	 * @since BuddyPress (2.4.0)
+	 *
+	 * @param  string $parent_slug the main nav parent slug
+	 * @return HTML   output
+	 */
+	public function get_sub_nav_by_parent_slug( $parent_slug = '' ) {
+		if ( empty( $parent_slug ) || empty( $this->sub[ $parent_slug ] ) ) {
+			return false;
+		}
+
+		// Sort the sub nav items
+		$sub_nav_items = bp_sort_by_key( $this->sub[ $parent_slug ], 'position', 'num' );
+
+		return $sub_nav_items;
+	}
+
+	/**
+	 * Remove a main nav item for component's single item
+	 *
+	 * @since BuddyPress (2.4.0)
+	 *
+	 * @param  string $component        the component id
+	 * @param  string $main_nav_item_id the main nav item id
+	 * @return bool                     true if the main nav was removed, false otherwise
+	 */
+	public static function remove_main_nav_item( $component ='', $main_nav_item_id = '' ) {
+		$bp = buddypress();
+
+		if ( empty( $component ) || empty( $main_nav_item_id ) || ! isset( $bp->{$component}->nav->main[ $main_nav_item_id ] ) ) {
+			return false;
+		}
+
+		// Unset sub_nav items for this nav item
+		if ( isset( $bp->{$component}->nav->sub[ $main_nav_item_id ] ) && is_array( $bp->{$component}->nav->sub[ $main_nav_item_id ] ) ) {
+			foreach( (array) $bp->{$component}->nav->sub[ $main_nav_item_id ] as $sub_nav_item ) {
+				self::remove_sub_nav_item( $component, $main_nav_item_id, $sub_nav_item['slug'] );
+			}
+		}
+
+		$screen_function = false;
+		if ( isset( $bp->{$component}->nav->main[ $main_nav_item_id ]['screen_function'] ) ) {
+			$screen_function = $bp->{$component}->nav->main[ $main_nav_item_id ]['screen_function'];
+		}
+
+		if ( ! empty( $screen_function ) ) {
+			// Remove our screen hook if screen function is callable
+			if ( is_callable( $screen_function ) ) {
+				remove_action( 'bp_screens', $screen_function, 3 );
+			}
+		}
+
+		unset( $bp->{$component}->nav->main[ $main_nav_item_id ] );
+		return true;
+	}
+
+	/**
+	 * Remove a sub nav item for component's single item main nav
+	 *
+	 * @since BuddyPress (2.4.0)
+	 *
+	 * @param  string $component         the component id
+	 * @param  string $main_nav_item_id  the main nav item id
+	 * @param  string $sub_nav_item_slug the sub nav slug
+	 * @return bool                      true if the sub nav was removed, false otherwise
+	 */
+	public static function remove_sub_nav_item( $component ='', $main_nav_item_id = '', $sub_nav_item_slug = '' ) {
+		$bp = buddypress();
+
+		if ( empty( $component ) || empty( $main_nav_item_id ) || empty( $sub_nav_item_slug ) || ! isset( $bp->{$component}->nav->sub[ $main_nav_item_id ][ $sub_nav_item_slug ] ) ) {
+			return false;
+		}
+
+		$screen_function = false;
+		if ( isset( $bp->{$component}->nav->sub[ $main_nav_item_id ][ $sub_nav_item_slug ]['screen_function'] ) ) {
+			$screen_function = $bp->{$component}->nav->sub[ $main_nav_item_id ][ $sub_nav_item_slug ]['screen_function'];
+		}
+
+		if ( ! empty( $screen_function ) ) {
+			// Remove our screen hook if screen function is callable
+			if ( is_callable( $screen_function ) ) {
+				remove_action( 'bp_screens', $screen_function, 3 );
+			}
+		}
+
+		unset( $bp->{$component}->nav->sub[ $main_nav_item_id ][ $sub_nav_item_slug ] );
+		return true;
+	}
+}
diff --git tests/phpunit/testcases/core/class-bp-single-item-navigation.php tests/phpunit/testcases/core/class-bp-single-item-navigation.php
index e69de29..981d987 100644
--- tests/phpunit/testcases/core/class-bp-single-item-navigation.php
+++ tests/phpunit/testcases/core/class-bp-single-item-navigation.php
@@ -0,0 +1,168 @@
+<?php
+
+/**
+ * @group core
+ * @group BP_Single_Item_Navigation
+ * @group single_item_nav
+ */
+class BP_Tests_BP_Single_Item_Navigation extends BP_UnitTestCase {
+	public function setUp() {
+		parent::setUp();
+		$this->current_user = get_current_user_id();
+	}
+
+	public function tearDown() {
+		$this->set_current_user( $this->current_user );
+		parent::tearDown();
+	}
+	/**
+	 * @group blogs_item_nav
+	 */
+	public function test_class_for_blogs_single_item() {
+		if ( ! is_multisite() ) {
+			$this->markTestSkipped( __METHOD__ . ' is a multisite-only test.' );
+		}
+
+		$bp = buddypress();
+
+		$reset_is_single_item = $bp->is_single_item;
+		$reset_current_item   = $bp->current_item;
+		$reset_current_action = $bp->current_action;
+
+		$a = $this->factory->user->create();
+		$b = $this->factory->blog->create( array( 'user_id' => $a ) );
+
+		$u = $this->factory->user->create();
+
+		// Init the single nav
+		$bp->blogs->nav = new BP_Single_Item_Navigation( array(
+			'component_id'     => $bp->blogs->id,
+			'component_slug'   => bp_get_blogs_root_slug(),
+			'single_item_name' => 'blog',
+		) );
+
+		$bp->blogs->current_blog = get_blog_details( $b );
+		$bp->blogs->current_blog->slug = trim( str_replace( get_current_site()->path, '', $bp->blogs->current_blog->path ), '/' );
+
+		// It's a blog single item
+		$bp->is_single_item  = true;
+		$bp->current_item    = $bp->blogs->current_blog->slug;
+
+		// Public blogs
+		$bp->blogs->current_blog->user_has_access = true;
+
+		// Admin is loggedin
+		$this->set_current_user( $a );
+		bp_update_is_item_admin( true, $bp->blogs->id );
+
+		$blog_link = trailingslashit( bp_get_root_domain() . '/' . bp_get_blogs_root_slug() . '/'. $bp->blogs->current_blog->slug );
+
+		$item_main_nav = array(
+			trailingslashit( $blog_link . 'home' ) => array(
+				'name'                => __( 'Home', 'buddypress' ),
+				'slug'                => 'home',
+				'position'            => 0,
+				'screen_function'     => 'screen_blog_home',
+				'default_subnav_slug' => false,
+			),
+			trailingslashit( $blog_link . 'manage' ) => array(
+				'name'                => __( 'Manage', 'buddypress' ),
+				'slug'                => 'manage',
+				'position'            => 1000,
+				'screen_function'     => 'screen_blog_settings',
+				'default_subnav_slug' => 'manage',
+				'item_admin_only'     => true,
+			),
+		);
+
+		$item_sub_nav = array(
+			trailingslashit( $blog_link . 'manage' ) => array(
+				'name'              => __( 'Settings','buddypress' ),
+				'slug'              => 'manage',
+				'parent_url'        => trailingslashit( $blog_link . 'manage' ),
+				'parent_slug'       => 'manage',
+				'screen_function'   => 'screen_blog_settings',
+				'position'          => 0,
+				'item_admin_only'   => true,
+			),
+		);
+
+		// Setup the nav for the admin
+		$bp->blogs->nav->setup_nav( $item_main_nav, $item_sub_nav );
+
+		$tested = array();
+
+		// Catch the main nav
+		ob_start();
+		$bp->blogs->nav->display_main_nav();
+		$tested['main'] = ob_get_contents();
+		ob_end_clean();
+
+		// Set the manage action
+		$bp->current_action = 'manage';
+
+		// Catch the sub nav
+		ob_start();
+		$bp->blogs->nav->display_sub_nav();
+		$tested['sub'] = ob_get_contents();
+		ob_end_clean();
+
+		// Test main nav links
+		preg_match_all( '#href=(["\'])([^"\']+)\1#i', $tested['main'], $main_matches );
+		$this->assertSame( array_keys( $item_main_nav ), $main_matches[2] );
+
+		// Test sub nav links
+		preg_match_all( '#href=(["\'])([^"\']+)\1#i', $tested['sub'], $sub_matches );
+		$this->assertSame( array_keys( $item_sub_nav ), $sub_matches[2] );
+
+		// Test if reseting the nav is ok
+		foreach ( $item_main_nav as $item ) {
+			$bp->blogs->nav->remove_main_nav_item( $bp->blogs->id, $item['slug'] );
+		}
+
+		$this->assertEmpty( $bp->blogs->nav->main );
+
+		$tested = array();
+
+		// a random user is loggedin
+		$this->set_current_user( $u );
+		bp_update_is_item_admin( false, $bp->blogs->id );
+
+		// Set the home action
+		$bp->current_action = 'home';
+
+		// Setup the nav for the user
+		$bp->blogs->nav->setup_nav( $item_main_nav, $item_sub_nav );
+
+		// Catch the main nav
+		ob_start();
+		$bp->blogs->nav->display_main_nav();
+		$tested['main'] = ob_get_contents();
+		ob_end_clean();
+
+		// Set the manage action
+		$bp->current_action = 'manage';
+
+		// Catch the sub nav
+		ob_start();
+		$bp->blogs->nav->display_sub_nav();
+		$tested['sub'] = ob_get_contents();
+		ob_end_clean();
+
+		// Test main nav links
+		preg_match_all( '#href=(["\'])([^"\']+)\1#i', $tested['main'], $main_matches );
+		$this->assertSame( array( trailingslashit( $blog_link . 'home' ) ), $main_matches[2] );
+
+		// Sub nav should be empty
+		$this->assertEmpty( $tested['sub'] );
+
+		// Reset the blogs component
+		unset( $bp->blogs->nav );
+		unset( $bp->blogs->current_blog );
+
+		// Reset globals
+		$bp->is_single_item = $reset_is_single_item;
+		$bp->current_item   = $reset_current_item;
+		$bp->current_action = $reset_current_action;
+	}
+}
