diff --git src/includes/core/actions.php src/includes/core/actions.php
index 74adfe98..bb5b0ebe 100644
--- src/includes/core/actions.php
+++ src/includes/core/actions.php
@@ -143,7 +143,7 @@ add_action( 'bbp_footer',   'bbp_swap_no_js_body_class' );
 add_action( 'bbp_ready',  'bbp_setup_akismet',    2  ); // Spam prevention for topics and replies
 
 // Setup BuddyPress using its own hook
-add_action( 'bp_include', 'bbp_setup_buddypress', 10 ); // Social network integration
+add_action( 'bp_loaded', 'bbp_setup_buddypress', 1 ); // Social network integration
 
 // Try to load the bbpress-functions.php file from the active themes
 add_action( 'bbp_after_setup_theme', 'bbp_load_theme_functions', 10 );
diff --git src/includes/core/extend.php src/includes/core/extend.php
index 7524cce5..ca03957e 100644
--- src/includes/core/extend.php
+++ src/includes/core/extend.php
@@ -39,13 +39,28 @@ function bbp_setup_akismet() {
 	bbpress()->extend->akismet = new BBP_Akismet();
 }
 
+/**
+ * Loads the Forums BP Component.
+ *
+ * @since 2.6.10
+ */
+function bbp_setup_buddypress_component() {
+	// Include the BuddyPress Component
+	require_once bbpress()->includes_dir . 'extend/buddypress/loader.php';
+
+	buddypress()->forums = new BBP_Forums_Component();
+
+	// Instantiate BuddyPress for bbPress
+	bbpress()->extend->buddypress = buddypress()->forums;
+}
+
 /**
  * Requires and creates the BuddyPress extension, and adds component creation
  * action to bp_init hook. @see bbp_setup_buddypress_component()
  *
  * @since 2.0.0 bbPress (r3395)
  *
- * @return If BuddyPress is not active
+ * @return false If BuddyPress is not active
  */
 function bbp_setup_buddypress() {
 
@@ -68,9 +83,5 @@ function bbp_setup_buddypress() {
 		return;
 	}
 
-	// Include the BuddyPress Component
-	require_once bbpress()->includes_dir . 'extend/buddypress/loader.php';
-
-	// Instantiate BuddyPress for bbPress
-	bbpress()->extend->buddypress = new BBP_Forums_Component();
+	add_action( 'bp_setup_components', 'bbp_setup_buddypress_component', 7 );
 }
diff --git src/includes/extend/buddypress/functions.php src/includes/extend/buddypress/functions.php
index b5bcc781..1b6710a5 100644
--- src/includes/extend/buddypress/functions.php
+++ src/includes/extend/buddypress/functions.php
@@ -20,6 +20,88 @@ add_filter( 'bbp_is_user_home',     'bbp_filter_is_user_home',      10, 1 );
 add_action( 'load-settings_page_bbpress', 'bbp_maybe_create_group_forum_root' );
 add_action( 'bbp_delete_forum',           'bbp_maybe_delete_group_forum_root' );
 
+
+/** BuddyPress Links **********************************************************/
+
+/**
+ * Returns a BP member's URL according to their ID for BuddyPress >= 12.0 & < 12.0.
+ *
+ * @since 2.6.10
+ *
+ * @param integer $user_id     The user ID.
+ * @param array   $path_chunks A list of URL chunks to add to the user's URL.
+ * @return string              The BP member's URL.
+ */
+function bbp_get_user_url( $user_id = 0, $path_chunks = array() ) {
+	$url = '';
+	if ( function_exists( 'bp_core_get_query_parser' ) ) {
+		$url = bp_members_get_user_url( $user_id, bp_members_get_path_chunks( $path_chunks ) );
+	} else {
+		$url = bp_core_get_user_domain( $user_id );
+
+		if ( $path_chunks ) {
+			$action_variables = end( $path_chunks );
+			if ( is_array( $action_variables ) ) {
+				array_pop( $path_chunks );
+				$path_chunks = array_merge( $path_chunks, $action_variables );
+			}
+
+			$url .= trailingslashit( implode( '/', $path_chunks ) );
+		}
+	}
+
+	return $url;
+}
+
+/**
+ * Returns a BP group's URL according to their ID for BuddyPress >= 12.0 & < 12.0.
+ *
+ * @since 2.6.10
+ *
+ * @param BP_Groups_Group $group       The group object.
+ * @param array           $path_chunks A list of URL chunks to add to the group's URL.
+ * @param string          $context     Whether the URL should be generated for the `admin` context or not.
+ * @return string                      The BP member's URL.
+ */
+function bbp_get_group_url( $group = null, $path_chunks = array(), $context = '' ) {
+	$url = '';
+
+	// BuddyPress 12.0 & up.
+	if ( function_exists( 'bp_core_get_query_parser' ) ) {
+		if ( 'admin' === $context ) {
+			$url = bp_get_group_manage_url(
+				$group,
+				bp_groups_get_path_chunks( $path_chunks, 'manage' )
+			);
+		} else {
+			$url = bp_get_group_url(
+				$group,
+				bp_groups_get_path_chunks( $path_chunks )
+			);
+		}
+
+		// BuddyPress < 12.0.
+	} else {
+		if ( 'admin' === $context ) {
+			$url = trailingslashit( bp_get_group_admin_permalink( $group ) );
+		} else {
+			$url = trailingslashit( bp_get_group_permalink( $group ) );
+		}
+
+		if ( $path_chunks ) {
+			$action_variables = end( $path_chunks );
+			if ( is_array( $action_variables ) ) {
+				array_pop( $path_chunks );
+				$path_chunks = array_merge( $path_chunks, $action_variables );
+			}
+
+			$url .= trailingslashit( implode( '/', $path_chunks ) );
+		}
+	}
+
+	return $url;
+}
+
 /** BuddyPress Helpers ********************************************************/
 
 /**
diff --git src/includes/extend/buddypress/groups.php src/includes/extend/buddypress/groups.php
index 147486de..7ca1c08e 100644
--- src/includes/extend/buddypress/groups.php
+++ src/includes/extend/buddypress/groups.php
@@ -33,44 +33,80 @@ class BBP_Forums_Group_Extension extends BP_Group_Extension {
 	 * @since 2.1.0 bbPress (r3552)
 	 */
 	public function __construct() {
-		$this->setup_variables();
+		parent::init(
+			array(
+				'slug'              => 'forum',
+				'name'              => esc_html__( 'Forum', 'bbpress' ),
+				'nav_item_name'     => esc_html__( 'Forum', 'bbpress' ),
+				'visibility'        => 'public',
+				'nav_item_position' => 10,
+				'enable_nav_item'   => true,
+				'template_file'     => 'groups/single/plugins',
+				'display_hook'      => 'bp_template_content',
+				'screens'           => array(
+					'create' => array(
+						'position'             => 15,
+						'enabled'              => true,
+						'screen_callback'      => array( $this, 'create_screen' ),
+						'screen_save_callback' => array( $this, 'create_screen_save' ),
+					),
+					'edit'   => array(
+						'enabled'              => true,
+						'screen_callback'      => array( $this, 'edit_screen' ),
+						'screen_save_callback' => array( $this, 'edit_screen_save' ),
+					),
+				),
+				'show_tab_callback' => array( $this, 'show_tab' ),
+			)
+		);
+
+		// Component slugs (hardcoded to match bbPress 1.x functionality)
+		$this->slug       = 'forum';
+		$this->topic_slug = 'topic';
+		$this->reply_slug = 'reply';
+
 		$this->setup_actions();
 		$this->setup_filters();
-		$this->maybe_unset_forum_menu();
 		$this->fully_loaded();
 	}
 
 	/**
-	 * Setup the group forums class variables
+	 * Only set the group forum nav item if group does have a forum.
 	 *
-	 * @since 2.1.0 bbPress (r3552)
+	 * @since 2.6.10
+	 *
+	 * @return string 'anyone' or 'member' if group does have a forum. 'noone' otherwise.
 	 */
-	private function setup_variables() {
-
-		// Component Name
-		$this->name          = esc_html__( 'Forum', 'bbpress' );
-		$this->nav_item_name = esc_html__( 'Forum', 'bbpress' );
-
-		// Component slugs (hardcoded to match bbPress 1.x functionality)
-		$this->slug          = 'forum';
-		$this->topic_slug    = 'topic';
-		$this->reply_slug    = 'reply';
-
-		// Forum component is visible
-		$this->visibility = 'public';
+	public function show_tab() {
+		$visibility = 'noone';
+
+		$current_group = groups_get_current_group();
+		if ( $current_group && groups_get_groupmeta( $current_group->id, 'forum_id' ) ) {
+			switch ( $current_group->status ) {
+				case 'public':
+					$visibility = 'anyone';
+					break;
 
-		// Set positions towards end
-		$this->create_step_position = 15;
-		$this->nav_item_position    = 10;
+				default:
+					$visibility = 'member';
+					break;
+			}
+		}
 
-		// Allow create step and show in nav
-		$this->enable_create_step   = true;
-		$this->enable_nav_item      = true;
-		$this->enable_edit_item     = true;
+		return $visibility;
+	}
 
-		// Template file to load, and action to hook display on to
-		$this->template_file        = 'groups/single/plugins';
-		$this->display_hook         = 'bp_template_content';
+	/**
+	 * Maybe unset the group forum nav item if group does not have a forum.
+	 *
+	 * @since 2.3.0 bbPress (r4552)
+	 * @deprecated 2.6.10
+	 *
+	 * @return boolean False if not viewing a single group.
+	 */
+	public function maybe_unset_forum_menu() {
+		_deprecated_function( __METHOD__, '2.6.10' );
+		return ! $this->show_group_tab();
 	}
 
 	/**
@@ -232,27 +268,6 @@ class BBP_Forums_Group_Extension extends BP_Group_Extension {
 		$this->display_forums( 0 );
 	}
 
-	/**
-	 * Maybe unset the group forum nav item if group does not have a forum
-	 *
-	 * @since 2.3.0 bbPress (r4552)
-	 *
-	 * @return If not viewing a single group
-	 */
-	public function maybe_unset_forum_menu() {
-
-		// Bail if not viewing a single group
-		if ( ! bp_is_group() ) {
-			return;
-		}
-
-		// Are forums enabled for this group?
-		$checked = bp_get_new_group_enable_forum() || groups_get_groupmeta( bp_get_new_group_id(), 'forum_id' );
-
-		// Tweak the nav item variable based on if group has forum or not
-		$this->enable_nav_item = (bool) $checked;
-	}
-
 	/**
 	 * Allow group members to have advanced privileges in group forum topics.
 	 *
@@ -613,7 +628,7 @@ class BBP_Forums_Group_Extension extends BP_Group_Extension {
 
 		// Redirect after save when not in admin
 		if ( ! is_admin() ) {
-			bp_core_redirect( trailingslashit( bp_get_group_permalink( buddypress()->groups->current_group ) . '/admin/' . $this->slug ) );
+			bp_core_redirect( bbp_get_group_url( groups_get_current_group(), array( $this->slug ), 'admin' ) );
 		}
 	}
 
@@ -1269,7 +1284,14 @@ class BBP_Forums_Group_Extension extends BP_Group_Extension {
 		if ( bp_is_group() ) {
 			$topic        = bbp_get_topic( $topic_id );
 			$topic_hash   = '#post-' . $topic_id;
-			$redirect_url = trailingslashit( bp_get_group_permalink( groups_get_current_group() ) ) . trailingslashit( $this->slug ) . trailingslashit( $this->topic_slug ) . trailingslashit( $topic->post_name ) . $topic_hash;
+			$redirect_url = trailingslashit(
+				bbp_get_group_url(
+					groups_get_current_group(),
+					array( $this->slug, $this->topic_slug, $topic->post_name )
+				)
+			);
+
+			$redirect_url .= $topic_hash;
 		}
 
 		return $redirect_url;
@@ -1288,17 +1310,15 @@ class BBP_Forums_Group_Extension extends BP_Group_Extension {
 			$reply_position = bbp_get_reply_position( $reply_id, $topic_id );
 			$reply_page     = ceil( (int) $reply_position / (int) bbp_get_replies_per_page() );
 			$reply_hash     = '#post-' . $reply_id;
-			$topic_url      = trailingslashit( bp_get_group_permalink( groups_get_current_group() ) ) . trailingslashit( $this->slug ) . trailingslashit( $this->topic_slug ) . trailingslashit( $topic->post_name );
-
-			// Don't include pagination if on first page
-			if ( 1 >= $reply_page ) {
-				$redirect_url = trailingslashit( $topic_url ) . $reply_hash;
+			$reply_url_args = array( $this->slug, $this->topic_slug, $topic->post_name );
 
-			// Include pagination
-			} else {
-				$redirect_url = trailingslashit( $topic_url ) . trailingslashit( bbp_get_paged_slug() ) . trailingslashit( $reply_page ) . $reply_hash;
+			// Include pagination.
+			if ( 1 < $reply_page ) {
+				array_push( $reply_url_args, bbp_get_paged_slug(), $reply_page );
 			}
 
+			$redirect_url = bbp_get_group_url( groups_get_current_group(), $reply_url_args ) . $reply_hash;
+
 			// Add topic view query arg back to end if it is set
 			if ( bbp_get_view_all() ) {
 				$redirect_url = bbp_add_view_all( $redirect_url );
@@ -1315,12 +1335,9 @@ class BBP_Forums_Group_Extension extends BP_Group_Extension {
 	 */
 	public function edit_redirect_to( $redirect_url = '' ) {
 
-		// Get the current group, if there is one
-		$group = groups_get_current_group();
-
 		// If this is a group of any kind, empty out the redirect URL
 		if ( bp_is_group_admin_screen( $this->slug ) ) {
-			$redirect_url = trailingslashit( bp_get_root_domain() . '/' . bp_get_groups_root_slug() . '/' . $group->slug . '/admin/' . $this->slug );
+			$redirect_url = bbp_get_group_url( groups_get_current_group(), array( $this->slug ), 'admin' );
 		}
 
 		return $redirect_url;
@@ -1444,36 +1461,38 @@ class BBP_Forums_Group_Extension extends BP_Group_Extension {
 	/** Permalink Mappers *****************************************************/
 
 	/**
-	 * Maybe map a bbPress forum/topic/reply permalink to the corresponding group
+	 * Maybe map a bbPress forum/topic/reply permalink to the corresponding group.
 	 *
 	 * @since 2.2.0 bbPress (r4266)
 	 *
-	 * @param int $post_id
-	 * @return Bail early if not a group forum post
+	 * @param int    $post_id          The object ID.
+	 * @param string $url              The original URL.
+	 * @param array  $additional_chunks URL chunk to add to original URL.
 	 * @return string
 	 */
-	private function maybe_map_permalink_to_group( $post_id = 0, $url = false ) {
+	private function maybe_map_permalink_to_group( $post_id = 0, $url = false, $additional_chunks = array() ) {
 
 		switch ( get_post_type( $post_id ) ) {
 
 			// Reply
 			case bbp_get_reply_post_type() :
-				$topic_id = bbp_get_reply_topic_id( $post_id );
-				$forum_id = bbp_get_reply_forum_id( $post_id );
-				$url_end  = trailingslashit( $this->reply_slug ) . get_post_field( 'post_name', $post_id );
+				$topic_id   = bbp_get_reply_topic_id( $post_id );
+				$forum_id   = bbp_get_reply_forum_id( $post_id );
+				$url_chunks = array( $this->reply_slug, get_post_field( 'post_name', $post_id ) );
+
 				break;
 
 			// Topic
 			case bbp_get_topic_post_type() :
-				$topic_id = $post_id;
-				$forum_id = bbp_get_topic_forum_id( $post_id );
-				$url_end  = trailingslashit( $this->topic_slug ) . get_post_field( 'post_name', $post_id );
+				$topic_id   = $post_id;
+				$forum_id   = bbp_get_topic_forum_id( $post_id );
+				$url_chunks = array( $this->topic_slug, get_post_field( 'post_name', $post_id ) );
 				break;
 
 			// Forum
 			case bbp_get_forum_post_type() :
-				$forum_id = $post_id;
-				$url_end  = ''; //get_post_field( 'post_name', $post_id );
+				$forum_id   = $post_id;
+				$url_chunks = array();
 				break;
 
 			// Unknown
@@ -1481,6 +1500,10 @@ class BBP_Forums_Group_Extension extends BP_Group_Extension {
 				return $url;
 		}
 
+		if ( $additional_chunks ) {
+			$url_chunks = array_merge( $url_chunks, $additional_chunks );
+		}
+
 		// Get group ID's for this forum
 		$group_ids = bbp_get_forum_group_ids( $forum_id );
 
@@ -1492,14 +1515,15 @@ class BBP_Forums_Group_Extension extends BP_Group_Extension {
 		// @todo Multiple group forums/forum groups
 		$group_id = $group_ids[0];
 		$group    = groups_get_group( array( 'group_id' => $group_id ) );
+		array_unshift( $url_chunks, $this->slug );
 
 		if ( bp_is_group_admin_screen( $this->slug ) ) {
-			$group_permalink = trailingslashit( bp_get_group_admin_permalink( $group ) );
+			$group_permalink = bbp_get_group_url( $group, $url_chunks, 'admin' );
 		} else {
-			$group_permalink = trailingslashit( bp_get_group_permalink( $group ) );
+			$group_permalink = bbp_get_group_url( $group, $url_chunks );
 		}
 
-		return trailingslashit( trailingslashit( $group_permalink . $this->slug ) . $url_end );
+		return $group_permalink;
 	}
 
 	/**
@@ -1551,13 +1575,13 @@ class BBP_Forums_Group_Extension extends BP_Group_Extension {
 	 * @return string
 	 */
 	public function map_reply_edit_url_to_group( $url, $reply_id ) {
-		$new = $this->maybe_map_permalink_to_group( $reply_id );
+		$edit_url = $this->maybe_map_permalink_to_group( $reply_id, $url, array( bbpress()->edit_id ) );
 
-		if ( empty( $new ) ) {
+		if ( empty( $edit_url ) ) {
 			return $url;
 		}
 
-		return trailingslashit( $new ) . bbpress()->edit_id  . '/';
+		return $edit_url;
 	}
 
 	/**
@@ -1612,13 +1636,13 @@ class BBP_Forums_Group_Extension extends BP_Group_Extension {
 	 * @return array
 	 */
 	public function topic_pagination( $args ) {
-		$new = $this->maybe_map_permalink_to_group( bbp_get_forum_id() );
+		$pagination_base = $this->maybe_map_permalink_to_group( bbp_get_forum_id(), '', array( bbp_get_paged_slug(), '%#%' ) );
 
-		if ( empty( $new ) ) {
+		if ( empty( $pagination_base ) ) {
 			return $args;
 		}
 
-		$args['base'] = trailingslashit( $new ) . bbp_get_paged_slug() . '/%#%/';
+		$args['base'] = $pagination_base;
 
 		return $args;
 	}
@@ -1632,12 +1656,13 @@ class BBP_Forums_Group_Extension extends BP_Group_Extension {
 	 * @return array
 	 */
 	public function replies_pagination( $args ) {
-		$new = $this->maybe_map_permalink_to_group( bbp_get_topic_id() );
-		if ( empty( $new ) ) {
+		$pagination_base = $this->maybe_map_permalink_to_group( bbp_get_topic_id(), '', array( bbp_get_paged_slug(), '%#%' ) );
+
+		if ( empty( $pagination_base ) ) {
 			return $args;
 		}
 
-		$args['base'] = trailingslashit( $new ) . bbp_get_paged_slug() . '/%#%/';
+		$args['base'] = $pagination_base;
 
 		return $args;
 	}
@@ -1680,15 +1705,14 @@ class BBP_Forums_Group_Extension extends BP_Group_Extension {
 		// Use the first group ID
 		$group_id 	 = $group_ids[0];
 		$group    	 = groups_get_group( array( 'group_id' => $group_id ) );
-		$group_link  = trailingslashit( bp_get_group_permalink( $group ) );
-		$redirect_to = trailingslashit( $group_link . $this->slug );
+		$url_chunks  = array( $this->slug );
 
 		// Add topic slug to URL
 		if ( bbp_is_single_topic() ) {
-			$redirect_to  = trailingslashit( $redirect_to . $this->topic_slug . '/' . $slug );
+			array_push( $url_chunks, $this->topic_slug, $slug );
 		}
 
-		bp_core_redirect( $redirect_to );
+		bp_core_redirect( bbp_get_group_url( $group, $url_chunks ) );
 	}
 
 	/** Activity **************************************************************/
diff --git src/includes/extend/buddypress/loader.php src/includes/extend/buddypress/loader.php
index 1e0d59eb..cd1b9006 100644
--- src/includes/extend/buddypress/loader.php
+++ src/includes/extend/buddypress/loader.php
@@ -30,6 +30,19 @@ if ( ! class_exists( 'BBP_Forums_Component' ) ) :
  * @subpackage BuddyPress
  */
 class BBP_Forums_Component extends BP_Component {
+	/**
+	 * Member profile modifications.
+	 *
+	 * @var null|BBP_BuddyPress_Members
+	 */
+	public $members = null;
+
+	/**
+	 * BuddyPress Activity extension.
+	 *
+	 * @var null|BBP_BuddyPress_Activity
+	 */
+	public $activity = null;
 
 	/**
 	 * Start the forums component creation process
@@ -42,9 +55,7 @@ class BBP_Forums_Component extends BP_Component {
 			esc_html__( 'Forums', 'bbpress' ),
 			bbpress()->includes_dir . 'extend/buddypress/'
 		);
-		$this->includes();
-		$this->setup_globals();
-		$this->setup_actions();
+
 		$this->fully_loaded();
 	}
 
@@ -52,12 +63,13 @@ class BBP_Forums_Component extends BP_Component {
 	 * Include BuddyPress classes and functions
 	 */
 	public function includes( $includes = array() ) {
+		$includes = array(
+			// Helper BuddyPress functions.
+			'functions.php',
 
-		// Helper BuddyPress functions
-		$includes[] = 'functions.php';
-
-		// Members modifications
-		$includes[] = 'members.php';
+			// Members modifications.
+			'members.php',
+		);
 
 		// BuddyPress Notfications Extension functions
 		if ( bp_is_active( 'notifications' ) ) {
@@ -74,19 +86,7 @@ class BBP_Forums_Component extends BP_Component {
 			$includes[] = 'groups.php';
 		}
 
-		// Require files if they exist
-		foreach ( $includes as $file ) {
-			if ( @is_file( $this->path . $file ) ) {
-				require $this->path . $file;
-			}
-		}
-
-		/**
-		 * Hook for plugins to include files, if necessary.
-		 *
-		 * @since 2.6.0 bbPress (r3552)
-		 */
-		do_action( "bp_{$this->id}_includes" );
+		parent::includes( $includes );
 	}
 
 	/**
@@ -135,6 +135,10 @@ class BBP_Forums_Component extends BP_Component {
 		// Setup the components
 		add_action( 'bp_init', array( $this, 'setup_components' ), 7 );
 
+		// Adjust `WP_Query` paged var.
+		add_action( 'bp_members_parse_query', array( $this, 'setup_pagination' ) );
+		add_action( 'bp_groups_parse_query',  array( $this, 'setup_pagination' ) );
+
 		parent::setup_actions();
 	}
 
@@ -159,6 +163,24 @@ class BBP_Forums_Component extends BP_Component {
 		}
 	}
 
+	/**
+	 * Adjusts the `WP_Query` paged var.
+	 *
+	 * @since 2.6.10
+	 *
+	 * @param WP_Query $query The WP Query pasded by reference.
+	 */
+	public function setup_pagination( &$query ) {
+		if ( ( bp_is_user() && bp_is_current_component( 'forums' ) ) || ( bp_is_group() && bp_is_current_action( 'forum' ) ) ) {
+			$action_variables = (array) bp_action_variables();
+			$is_paged         = array_search( bbp_get_paged_slug(), $action_variables, true );
+
+			if ( false !== $is_paged ) {
+				$query->set( 'paged', (int) bp_action_variable( $is_paged + 1 ) );
+			}
+		}
+	}
+
 	/**
 	 * Allow the variables, actions, and filters to be modified by third party
 	 * plugins and themes.
@@ -170,19 +192,18 @@ class BBP_Forums_Component extends BP_Component {
 	}
 
 	/**
-	 * Setup BuddyBar navigation
+	 * Register component navigation.
 	 *
-	 * @since 2.1.0 bbPress (r3552)
+	 * @since 2.6.10
+	 *
+	 * @see `BP_Component::register_nav()` for a description of arguments.
+	 *
+	 * @param array $main_nav Optional. See `BP_Component::register_nav()` for
+	 *                        description.
+	 * @param array $sub_nav  Optional. See `BP_Component::register_nav()` for
+	 *                        description.
 	 */
-	public function setup_nav( $main_nav = array(), $sub_nav = array() ) {
-
-		// Stop if there is no user displayed or logged in
-		if ( ! is_user_logged_in() && !bp_displayed_user_id() ) {
-			return;
-		}
-
-		// Define local variable(s)
-		$user_domain = '';
+	public function register_nav( $main_nav = array(), $sub_nav = array() ) {
 
 		// Add 'Forums' to the main navigation
 		$main_nav = array(
@@ -194,23 +215,10 @@ class BBP_Forums_Component extends BP_Component {
 			'item_css_id'         => $this->id
 		);
 
-		// Determine user to use
-		if ( bp_displayed_user_id() ) {
-			$user_domain = bp_displayed_user_domain();
-		} elseif ( bp_loggedin_user_domain() ) {
-			$user_domain = bp_loggedin_user_domain();
-		} else {
-			return;
-		}
-
-		// User link
-		$forums_link = trailingslashit( $user_domain . $this->slug );
-
 		// Topics started
 		$sub_nav[] = array(
 			'name'            => esc_html__( 'Topics Started', 'bbpress' ),
 			'slug'            => bbp_get_topic_archive_slug(),
-			'parent_url'      => $forums_link,
 			'parent_slug'     => $this->slug,
 			'screen_function' => 'bbp_member_forums_screen_topics',
 			'position'        => 20,
@@ -221,7 +229,6 @@ class BBP_Forums_Component extends BP_Component {
 		$sub_nav[] = array(
 			'name'            => esc_html__( 'Replies Created', 'bbpress' ),
 			'slug'            => bbp_get_reply_archive_slug(),
-			'parent_url'      => $forums_link,
 			'parent_slug'     => $this->slug,
 			'screen_function' => 'bbp_member_forums_screen_replies',
 			'position'        => 40,
@@ -233,7 +240,6 @@ class BBP_Forums_Component extends BP_Component {
 			$sub_nav[] = array(
 				'name'            => esc_html__( 'Engagements', 'bbpress' ),
 				'slug'            => bbp_get_user_engagements_slug(),
-				'parent_url'      => $forums_link,
 				'parent_slug'     => $this->slug,
 				'screen_function' => 'bbp_member_forums_screen_engagements',
 				'position'        => 60,
@@ -246,7 +252,6 @@ class BBP_Forums_Component extends BP_Component {
 			$sub_nav[] = array(
 				'name'            => esc_html__( 'Favorites', 'bbpress' ),
 				'slug'            => bbp_get_user_favorites_slug(),
-				'parent_url'      => $forums_link,
 				'parent_slug'     => $this->slug,
 				'screen_function' => 'bbp_member_forums_screen_favorites',
 				'position'        => 80,
@@ -255,18 +260,69 @@ class BBP_Forums_Component extends BP_Component {
 		}
 
 		// Subscribed topics (my profile only)
-		if ( bp_is_my_profile() && bbp_is_subscriptions_active() ) {
+		if ( bbp_is_subscriptions_active() ) {
 			$sub_nav[] = array(
-				'name'            => esc_html__( 'Subscriptions', 'bbpress' ),
-				'slug'            => bbp_get_user_subscriptions_slug(),
-				'parent_url'      => $forums_link,
-				'parent_slug'     => $this->slug,
-				'screen_function' => 'bbp_member_forums_screen_subscriptions',
-				'position'        => 100,
-				'item_css_id'     => 'subscriptions'
+				'name'                     => esc_html__( 'Subscriptions', 'bbpress' ),
+				'slug'                     => bbp_get_user_subscriptions_slug(),
+				'parent_slug'              => $this->slug,
+				'screen_function'          => 'bbp_member_forums_screen_subscriptions',
+				'position'                 => 100,
+				'item_css_id'              => 'subscriptions',
+				'user_has_access'          => false,
+				'user_has_access_callback' => 'bp_is_my_profile',
 			);
 		}
 
+		if ( method_exists( get_parent_class( $this ), 'register_nav' ) ) {
+			parent::register_nav( $main_nav, $sub_nav );
+
+		} else {
+			return array(
+				'main_nav' => $main_nav,
+				'sub_nav'  => $sub_nav,
+			);
+		}
+	}
+
+	/**
+	 * Setup BuddyBar navigation
+	 *
+	 * @since 2.1.0 bbPress (r3552)
+	 */
+	public function setup_nav( $main_nav = array(), $sub_nav = array() ) {
+		if ( ! method_exists( get_parent_class( $this ), 'register_nav' ) ) {
+			$nav = $this->register_nav();
+
+			// Define local variable(s)
+			$user_id = 0;
+
+			// Determine user to use
+			if ( bp_displayed_user_id() ) {
+				$user_id = bp_displayed_user_id();
+			} elseif ( bp_loggedin_user_id() ) {
+				$user_id = bp_loggedin_user_id();
+			} else {
+				return;
+			}
+
+			// User link
+			$forums_link = bbp_get_user_url( $user_id, array( $this->slug ) );
+
+			// The parent URL is only necessary when BP < 12.0
+			foreach ( $nav['sub_nav'] as $key_sub_nav => $data_sub_nav ) {
+				if ( isset( $data_sub_nav['user_has_access_callback'] ) ) {
+					$data_sub_nav['user_has_access'] = call_user_func( $data_sub_nav['user_has_access_callback'] );
+					unset( $data_sub_nav['user_has_access_callback'] );
+				}
+
+				$data_sub_nav['parent_url']     = $forums_link;
+				$nav['sub_nav'][ $key_sub_nav ] = $data_sub_nav;
+			}
+
+			$main_nav = $nav['main_nav'];
+			$sub_nav  = $nav['sub_nav'];
+		}
+
 		parent::setup_nav( $main_nav, $sub_nav );
 	}
 
@@ -293,15 +349,14 @@ class BBP_Forums_Component extends BP_Component {
 			} else {
 
 				// Setup the logged in user variables
-				$user_domain = bp_loggedin_user_domain();
-				$forums_link = trailingslashit( $user_domain . $this->slug );
-
-				$my_account_link       = trailingslashit( $forums_link );
-				$my_topics_link        = trailingslashit( $forums_link . bbp_get_topic_archive_slug() );
-				$my_replies_link       = trailingslashit( $forums_link . bbp_get_reply_archive_slug() );
-				$my_engagements_link   = trailingslashit( $forums_link . bbp_get_user_engagements_slug() );
-				$my_favorites_link     = trailingslashit( $forums_link . bbp_get_user_favorites_slug() );
-				$my_subscriptions_link = trailingslashit( $forums_link . bbp_get_user_subscriptions_slug() );
+				$user_id = bp_loggedin_user_id();
+
+				$my_account_link       = bbp_get_user_url( $user_id, array( $this->slug ) );
+				$my_topics_link        = bbp_get_user_url( $user_id, array( $this->slug, bbp_get_topic_archive_slug() ) );
+				$my_replies_link       = bbp_get_user_url( $user_id, array( $this->slug, bbp_get_reply_archive_slug() ) );
+				$my_engagements_link   = bbp_get_user_url( $user_id, array( $this->slug, bbp_get_user_engagements_slug() ) );
+				$my_favorites_link     = bbp_get_user_url( $user_id, array( $this->slug, bbp_get_user_favorites_slug() ) );
+				$my_subscriptions_link = bbp_get_user_url( $user_id, array( $this->slug, bbp_get_user_subscriptions_slug() ) );
 			}
 
 			// Add the "My Account" sub menus
diff --git src/includes/extend/buddypress/members.php src/includes/extend/buddypress/members.php
index ddeb5cdc..79926c6f 100644
--- src/includes/extend/buddypress/members.php
+++ src/includes/extend/buddypress/members.php
@@ -225,17 +225,16 @@ class BBP_BuddyPress_Members {
 			return false;
 		}
 
-		// Setup profile URL
-		$url = array( bp_core_get_user_domain( $user_id ) );
+		// Init URL chunks.
+		$path_chunks = array();
 
 		// Maybe push slug to end of URL array
 		if ( ! empty( $slug ) ) {
-			array_push( $url, bbpress()->extend->buddypress->slug );
-			array_push( $url, $slug );
+			$path_chunks = array( bbpress()->extend->buddypress->slug, $slug );
 		}
 
 		// Return
-		return implode( '', array_map( 'trailingslashit', $url ) );
+		return bbp_get_user_url( $user_id, $path_chunks );
 	}
 }
 endif;
