Index: bp-core/admin/bp-core-admin.php
===================================================================
--- bp-core/admin/bp-core-admin.php	(revision 4468)
+++ bp-core/admin/bp-core-admin.php	(working copy)
@@ -16,7 +16,11 @@ add_action( 'in_plugin_update_message-buddypress/bp-loader.php', 'bp_core_update
  * @package BuddyPress Core
  * @since {@internal Unknown}}
  */
-function bp_core_admin_dashboard() { ?>
+function bp_core_admin_dashboard() { 
+	$base_url = bp_core_do_network_admin() ? network_admin_url( 'admin.php' ) : admin_url( 'admin.php' );
+	
+	$action = add_query_arg( array( 'page' => 'bp-general-settings' ), $base_url );
+	?>
 	<div class="wrap" id="bp-admin">
 
 		<div id="bp-admin-header">
@@ -26,7 +30,7 @@ function bp_core_admin_dashboard() { ?>
 
 		<?php do_action( 'bp_admin_notices' ); ?>
 
-		<form action="<?php echo network_admin_url( 'admin.php?page=bp-general-settings' ) ?>" method="post" id="bp-admin-form">
+		<form action="<?php echo $action ?>" method="post" id="bp-admin-form">
 			<div id="bp-admin-content">
 				<p>[TODO: All sorts of awesome things will go here. Latest plugins and themes, stats, version check, support topics, news, tips]</p>
 			</div>
@@ -193,7 +197,9 @@ function bp_core_admin_component_setup_handler() {
 			bp_core_update_page_meta( $directory_pages );
 		}
 
-		wp_redirect( network_admin_url( add_query_arg( array( 'page' => 'bp-general-settings', 'updated' => 'true' ), 'admin.php' ) ) );
+		$base_url = bp_core_do_network_admin() ? network_admin_url( 'admin.php' ) : admin_url( 'admin.php' );
+
+		wp_redirect( add_query_arg( array( 'page' => 'bp-general-settings', 'updated' => 'true' ), $base_url ) );
 	}
 }
 add_action( 'admin_init', 'bp_core_admin_component_setup_handler' );
@@ -356,11 +362,6 @@ function bp_core_admin_component_options() {
 function bp_core_admin_page_options() {
 	global $bp;
 	
-	if ( !bp_is_root_blog() ) {
-		$bp->is_switched = 1;
-		switch_to_blog( BP_ROOT_BLOG );
-	}
-		
 	// Get the existing WP pages
 	$existing_pages = bp_core_get_page_meta();
 
@@ -448,11 +449,6 @@ function bp_core_admin_page_options() {
 	</table>
 
 	<?php
-	
-	if ( isset( $bp->is_switched ) ) {
-		restore_current_blog();
-		unset( $bp->is_switched );
-	}
 }
 
 /**
Index: bp-core/admin/bp-core-update.php
===================================================================
--- bp-core/admin/bp-core-update.php	(revision 4468)
+++ bp-core/admin/bp-core-update.php	(working copy)
@@ -145,7 +145,7 @@ class BP_Core_Setup_Wizard {
 
 				$step_count  = count( $this->steps ) - 1;
 				$wiz_or_set  = $this->current_step >= $step_count ? 'bp-general-settings' : 'bp-wizard';
-				$form_action = is_multisite() ? network_admin_url( add_query_arg( array( 'page' => $wiz_or_set ), 'admin.php' ) ) : admin_url( add_query_arg( array( 'page' => $wiz_or_set ), 'admin.php' ) );
+				$form_action = bp_core_update_do_network_admin() ? network_admin_url( add_query_arg( array( 'page' => $wiz_or_set ), 'admin.php' ) ) : admin_url( add_query_arg( array( 'page' => $wiz_or_set ), 'admin.php' ) );
 			?>
 
 			<form action="<?php echo $form_action; ?>" method="post" id="bp-admin-form">
@@ -1004,7 +1004,7 @@ class BP_Core_Setup_Wizard {
 			require_once( WP_PLUGIN_DIR . '/buddypress/bp-core/bp-core-loader.php' );
 
 			// Redirect to the BuddyPress dashboard
-			$redirect = is_multisite() ? add_query_arg( array( 'page' => 'bp-general-settings' ), network_admin_url( 'admin.php' ) ) : add_query_arg( array( 'page' => 'bp-general-settings' ), admin_url( 'admin.php' ) );
+			$redirect = bp_core_update_do_network_admin() ? add_query_arg( array( 'page' => 'bp-general-settings' ), network_admin_url( 'admin.php' ) ) : add_query_arg( array( 'page' => 'bp-general-settings' ), admin_url( 'admin.php' ) );
 
 			wp_redirect( $redirect );
 
@@ -1055,7 +1055,7 @@ function bp_core_setup_wizard_init() {
 
 	$bp_wizard = new BP_Core_Setup_Wizard;
 }
-add_action( is_multisite() ? 'network_admin_menu' : 'admin_menu', 'bp_core_setup_wizard_init', 7 );
+add_action( bp_core_update_admin_hook(), 'bp_core_setup_wizard_init', 7 );
 
 function bp_core_install( $active_components = false ) {
 	global $wpdb;
@@ -1150,7 +1150,7 @@ add_action( 'bp_admin_notices', 'bp_core_wizard_message' );
 // Alter thickbox screens so the entire plugin download and install
 // interface is contained within.
 function bp_core_wizard_thickbox() {
-	$form_action = is_multisite() ? network_admin_url( add_query_arg( array( 'page' => 'bp-wizard', 'updated' => '1' ), 'admin.php' ) ) : admin_url( add_query_arg( array( 'page' => 'bp-wizard', 'updated' => '1' ), 'admin.php' ) ); ?>
+	$form_action = bp_core_update_do_network_admin() ? network_admin_url( add_query_arg( array( 'page' => 'bp-wizard', 'updated' => '1' ), 'admin.php' ) ) : admin_url( add_query_arg( array( 'page' => 'bp-wizard', 'updated' => '1' ), 'admin.php' ) ); ?>
 
 	<script type="text/javascript">
 		jQuery('p.action-button a').attr( 'target', '' );
@@ -1200,7 +1200,7 @@ function bp_core_update_add_admin_menu() {
 	// Add a hook for css/js
 	add_action( "admin_print_styles-$hook", 'bp_core_update_add_admin_menu_styles' );
 }
-add_action( is_multisite() ? 'network_admin_menu' : 'admin_menu',  'bp_core_update_add_admin_menu', 9 );
+add_action( bp_core_update_admin_hook(),  'bp_core_update_add_admin_menu', 9 );
 
 function bp_core_update_add_admin_menu_styles() {
 	if ( defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG )
@@ -1253,6 +1253,21 @@ function bp_core_update_get_page_meta() {
 	return apply_filters( 'bp_core_update_get_page_meta', $blog_page_ids );
 }
 
+function bp_core_update_do_network_admin() {
+	$do_network_admin = false;
+	
+	if ( is_multisite() && ( !defined( 'BP_ENABLE_MULTIBLOG' ) || !BP_ENABLE_MULTIBLOG ) )
+		$do_network_admin = true;
+	
+	return apply_filters( 'bp_core_do_network_admin', $do_network_admin );
+}
+
+function bp_core_update_admin_hook() {
+	$hook = bp_core_update_do_network_admin() ? 'network_admin_menu' : 'admin_menu';
+	
+	return apply_filters( 'bp_core_admin_hook', $hook );
+}
+
 /**
  * Adds an admin nag about running the BP upgrade/install wizard
  *
@@ -1269,7 +1284,7 @@ function bp_core_update_nag() {
 	if ( 'admin.php' == $pagenow && ( empty( $_GET['page'] ) || 'bp-wizard' == $_GET['page'] ) )
 		return;
 
-	$url = is_multisite() ? network_admin_url( 'admin.php?page=bp-wizard' ) : admin_url( 'admin.php?page=bp-wizard' );
+	$url = bp_core_update_do_network_admin() ? network_admin_url( 'admin.php?page=bp-wizard' ) : admin_url( 'admin.php?page=bp-wizard' );
 
 	switch( $bp->maintenence_mode ) {
 		case 'update':
Index: bp-core/bp-core-functions.php
===================================================================
--- bp-core/bp-core-functions.php	(revision 4468)
+++ bp-core/bp-core-functions.php	(working copy)
@@ -159,6 +159,21 @@ function bp_core_component_slug_from_root_slug( $root_slug ) {
  	return apply_filters( 'bp_core_component_slug_from_root_slug', $slug, $root_slug );
 }
 
+function bp_core_do_network_admin() {
+	$do_network_admin = false;
+	
+	if ( is_multisite() && ( !defined( 'BP_ENABLE_MULTIBLOG' ) || !BP_ENABLE_MULTIBLOG ) )
+		$do_network_admin = true;
+	
+	return apply_filters( 'bp_core_do_network_admin', $do_network_admin );
+}
+
+function bp_core_admin_hook() {
+	$hook = bp_core_do_network_admin() ? 'network_admin_menu' : 'admin_menu';
+	
+	return apply_filters( 'bp_core_admin_hook', $hook );
+}
+
 /**
  * Initializes the wp-admin area "BuddyPress" menus and sub menus.
  *
@@ -168,10 +183,12 @@ function bp_core_component_slug_from_root_slug( $root_slug ) {
 function bp_core_admin_menu_init() {
 	if ( !is_super_admin() )
 		return false;
+	
+	add_action( bp_core_admin_hook(), 'bp_core_add_admin_menu', 9 );
 
 	require ( BP_PLUGIN_DIR . '/bp-core/admin/bp-core-admin.php' );
 }
-add_action( is_multisite() ? 'network_admin_menu' : 'admin_menu', 'bp_core_admin_menu_init' );
+add_action( 'bp_init', 'bp_core_admin_menu_init' );
 
 /**
  * Adds the "BuddyPress" admin submenu item to the Site Admin tab.
@@ -202,7 +219,6 @@ function bp_core_add_admin_menu() {
 	foreach( $hooks as $hook )
 		add_action( "admin_print_styles-$hook", 'bp_core_add_admin_menu_styles' );
 }
-add_action( is_multisite() ? 'network_admin_menu' : 'admin_menu', 'bp_core_add_admin_menu', 9 );
 
 /**
  * Print admin messages to admin_notices or network_admin_notices
@@ -224,8 +240,9 @@ function bp_core_print_admin_notices() {
 	if ( !is_super_admin() )
 		return;
 	
-	// On multisite installs, don't show on the Site Admin of a non-root blog
-	if ( !bp_is_root_blog() )
+	// On multisite installs, don't show on the Site Admin of a non-root blog, unless
+	// do_network_admin is overridden
+	if ( is_multisite() && bp_core_do_network_admin() && !bp_is_root_blog() )
 		return;
 		
 	// Show the messages
@@ -283,9 +300,10 @@ function bp_core_activation_notice() {
 	// Only the super admin gets warnings
 	if ( !is_super_admin() )
 		return;
-	
-	// On multisite installs, don't log on a non-root blog
-	if ( !bp_is_root_blog() )
+		
+	// On multisite installs, don't load on a non-root blog, unless do_network_admin is
+	// overridden
+	if ( is_multisite() && bp_core_do_network_admin() && !bp_is_root_blog() )
 		return;
 		
 	// Don't show these messages during setup or upgrade
@@ -360,7 +378,9 @@ function bp_core_activation_notice() {
 			$edit_pages_links[] = sprintf( '<a href="%1$s">%2$s</a>', admin_url( 'post.php?action=edit&post=' . $op['id'] ), $op['title'] );
 		}
 		
-		$notice = sprintf( __( 'Some of your WordPress pages are linked to BuddyPress components that have been disabled. These pages may continue to show up in your site navigation. Consider <a href="%1$s">reactivating the components</a>, or unpublishing the pages: <strong>%2$s</strong>', 'buddypress' ), network_admin_url( 'admin.php?page=bp-general-settings' ), implode( ', ', $edit_pages_links ) );
+		$admin_url = bp_core_do_network_admin() ? network_admin_url( 'admin.php?page=bp-general-settings' ) : admin_url( 'admin.php?page=bp-general-settings' );
+		
+		$notice = sprintf( __( 'Some of your WordPress pages are linked to BuddyPress components that have been disabled. These pages may continue to show up in your site navigation. Consider <a href="%1$s">reactivating the components</a>, or unpublishing the pages: <strong>%2$s</strong>', 'buddypress' ), $admin_url, implode( ', ', $edit_pages_links ) );
 		
 		bp_core_add_admin_notice( $notice );
 	}
@@ -403,7 +423,9 @@ function bp_core_activation_notice() {
 	}
 	
 	if ( !empty( $orphaned_components ) ) {
-		$notice = sprintf( __( 'Some BuddyPress components must be associated with WordPress pages for your site to work properly. The following components are missing their required WP pages: <strong>%1$s</strong>. Visit the <a href="%2$s">BuddyPress Components</a> panel, where you can either deactivate unused components or complete the page setup.', 'buddypress' ), implode( ', ', $orphaned_components ), network_admin_url( 'admin.php?page=bp-general-settings' ) );
+		$admin_url = bp_core_do_network_admin() ? network_admin_url( 'admin.php?page=bp-general-settings' ) : admin_url( 'admin.php?page=bp-general-settings' );
+		
+		$notice = sprintf( __( 'Some BuddyPress components must be associated with WordPress pages for your site to work properly. The following components are missing their required WP pages: <strong>%1$s</strong>. Visit the <a href="%2$s">BuddyPress Components</a> panel, where you can either deactivate unused components or complete the page setup.', 'buddypress' ), implode( ', ', $orphaned_components ), $admin_url );
 		
 		bp_core_add_admin_notice( $notice );
 	}
Index: bp-forums/bp-forums-admin.php
===================================================================
--- bp-forums/bp-forums-admin.php	(revision 4468)
+++ bp-forums/bp-forums-admin.php	(working copy)
@@ -10,10 +10,16 @@ function bp_forums_add_admin_menu() {
 	$hook = add_submenu_page( 'bp-general-settings', __( 'Forums Setup', 'buddypress' ), __( 'Forums Setup', 'buddypress' ), 'manage_options', 'bb-forums-setup', "bp_forums_bbpress_admin" );
 	add_action( "admin_print_styles-$hook", 'bp_core_add_admin_menu_styles' );
 }
-add_action( is_multisite() ? 'network_admin_menu' : 'admin_menu', 'bp_forums_add_admin_menu' );
+add_action( is_multisite() && bp_core_do_network_admin() ? 'network_admin_menu' : 'admin_menu', 'bp_forums_add_admin_menu' );
 
 function bp_forums_bbpress_admin() {
-	global $bp; ?>
+	global $bp; 
+	
+	$base_url = bp_core_do_network_admin() ? network_admin_url( 'admin.php' ) : admin_url( 'admin.php' );
+	
+	$action = add_query_arg( array( 'page' => 'bb-forums-setup', 'reinstall' => '1' ), $base_url );
+	
+	?>
 
 	<div class="wrap">
 		<?php screen_icon( 'buddypress' ); ?>
@@ -35,7 +41,7 @@ function bp_forums_bbpress_admin() {
 
 		else : ?>
 
-			<p><?php printf( __( 'bbPress forum integration in BuddyPress has been set up correctly. If you are having problems you can <a href="%s" title="Reinstall bbPress">re-install</a>', 'buddypress' ), network_admin_url( 'admin.php?page=bb-forums-setup&reinstall=1' ) ); ?>
+			<p><?php printf( __( 'bbPress forum integration in BuddyPress has been set up correctly. If you are having problems you can <a href="%s" title="Reinstall bbPress">re-install</a>.', 'buddypress' ), $action ); ?>
 			<p><?php _e( 'NOTE: The forums directory will only work if your bbPress tables are in the same database as your WordPress tables. If you are not using an existing bbPress install you can ignore this message.', 'buddypress' ) ?></p>
 
 		<?php endif; ?>
Index: bp-xprofile/bp-xprofile-buddybar.php
===================================================================
--- bp-xprofile/bp-xprofile-buddybar.php	(revision 4468)
+++ bp-xprofile/bp-xprofile-buddybar.php	(working copy)
@@ -24,7 +24,7 @@ function xprofile_add_admin_menu() {
 	$hook = add_submenu_page( 'bp-general-settings', __( 'Profile Fields', 'buddypress' ), __( 'Profile Fields', 'buddypress' ), 'manage_options', 'bp-profile-setup', 'xprofile_admin' );
 	add_action( "admin_print_styles-$hook", 'bp_core_add_admin_menu_styles' );
 }
-add_action( is_multisite() ? 'network_admin_menu' : 'admin_menu', 'xprofile_add_admin_menu' );
+add_action( bp_core_admin_hook(), 'xprofile_add_admin_menu' );
 
 /**
  * Adds an admin bar menu to any profile page providing site admin options
Index: bp-xprofile/bp-xprofile-cssjs.php
===================================================================
--- bp-xprofile/bp-xprofile-cssjs.php	(revision 4468)
+++ bp-xprofile/bp-xprofile-cssjs.php	(working copy)
@@ -7,7 +7,7 @@ function xprofile_add_admin_css() {
 			wp_enqueue_style( 'xprofile-admin-css', BP_PLUGIN_URL . '/bp-xprofile/admin/css/admin.css', array(), BP_VERSION );
 	}
 }
-add_action( is_multisite() ? 'network_admin_menu' : 'admin_menu', 'xprofile_add_admin_css' );
+add_action( bp_core_admin_hook(), 'xprofile_add_admin_css' );
 
 function xprofile_add_admin_js() {
 	if ( !empty( $_GET['page'] ) && strpos( $_GET['page'], 'bp-profile-setup' ) !== false ) {
@@ -24,5 +24,5 @@ function xprofile_add_admin_js() {
 			wp_enqueue_script( 'xprofile-admin-js', BP_PLUGIN_URL . '/bp-xprofile/admin/js/admin.js', array( 'jquery', 'jquery-ui-sortable' ), BP_VERSION );
 	}
 }
-add_action( is_multisite() ? 'network_admin_menu' : 'admin_menu', 'xprofile_add_admin_js', 1 );
+add_action( bp_core_admin_hook(), 'xprofile_add_admin_js', 1 );
 ?>
\ No newline at end of file
