Index: bp-blogs/bp-blogs-template.php
===================================================================
--- bp-blogs/bp-blogs-template.php	(revision 4482)
+++ bp-blogs/bp-blogs-template.php	(working copy)
@@ -362,10 +362,7 @@ function bp_total_blog_count_for_user( $user_id = 0 ) {
 function bp_blog_signup_enabled() {
 	global $bp;
 
-	$active_signup = $bp->site_options['registration'];
-
-	if ( !$active_signup )
-		$active_signup = 'all';
+	$active_signup = isset( $bp->site_options['registration'] ) ? $bp->site_options['registration'] : 'all';
 
 	$active_signup = apply_filters( 'wpmu_active_signup', $active_signup ); // return "all", "none", "blog" or "user"
 
Index: bp-core/admin/bp-core-admin.php
===================================================================
--- bp-core/admin/bp-core-admin.php	(revision 4482)
+++ bp-core/admin/bp-core-admin.php	(working copy)
@@ -58,7 +58,7 @@ function bp_core_admin_settings() {
 
 		// Settings form submitted, now save the settings.
 		foreach ( (array)$_POST['bp-admin'] as $key => $value )
-			update_site_option( $key, $value );
+			bp_update_option( $key, $value );
 
 	} ?>
 
@@ -86,8 +86,8 @@ function bp_core_admin_settings() {
 						<tr>
 							<th scope="row"><?php _e( 'Disable BuddyPress to WordPress profile syncing?', 'buddypress' ) ?>:</th>
 							<td>
-								<input type="radio" name="bp-admin[bp-disable-profile-sync]"<?php if ( (int)get_site_option( 'bp-disable-profile-sync' ) ) : ?> checked="checked"<?php endif; ?> id="bp-disable-profile-sync" value="1" /> <?php _e( 'Yes', 'buddypress' ) ?> &nbsp;
-								<input type="radio" name="bp-admin[bp-disable-profile-sync]"<?php if ( !(int)get_site_option( 'bp-disable-profile-sync' ) || '' == get_site_option( 'bp-disable-profile-sync' ) ) : ?> checked="checked"<?php endif; ?> id="bp-disable-profile-sync" value="0" /> <?php _e( 'No', 'buddypress' ) ?>
+								<input type="radio" name="bp-admin[bp-disable-profile-sync]"<?php if ( (int)bp_get_option( 'bp-disable-profile-sync' ) ) : ?> checked="checked"<?php endif; ?> id="bp-disable-profile-sync" value="1" /> <?php _e( 'Yes', 'buddypress' ) ?> &nbsp;
+								<input type="radio" name="bp-admin[bp-disable-profile-sync]"<?php if ( !(int)bp_get_option( 'bp-disable-profile-sync' ) || '' == bp_get_option( 'bp-disable-profile-sync' ) ) : ?> checked="checked"<?php endif; ?> id="bp-disable-profile-sync" value="0" /> <?php _e( 'No', 'buddypress' ) ?>
 							</td>
 						</tr>
 
@@ -96,24 +96,24 @@ function bp_core_admin_settings() {
 					<tr>
 						<th scope="row"><?php _e( 'Hide admin bar for logged out users?', 'buddypress' ) ?>:</th>
 						<td>
-							<input type="radio" name="bp-admin[hide-loggedout-adminbar]"<?php if ( (int)get_site_option( 'hide-loggedout-adminbar' ) ) : ?> checked="checked"<?php endif; ?> id="bp-admin-hide-loggedout-adminbar-yes" value="1" /> <?php _e( 'Yes', 'buddypress' ) ?> &nbsp;
-							<input type="radio" name="bp-admin[hide-loggedout-adminbar]"<?php if ( !(int)get_site_option( 'hide-loggedout-adminbar' ) ) : ?> checked="checked"<?php endif; ?> id="bp-admin-hide-loggedout-adminbar-no" value="0" /> <?php _e( 'No', 'buddypress' ) ?>
+							<input type="radio" name="bp-admin[hide-loggedout-adminbar]"<?php if ( (int)bp_get_option( 'hide-loggedout-adminbar' ) ) : ?> checked="checked"<?php endif; ?> id="bp-admin-hide-loggedout-adminbar-yes" value="1" /> <?php _e( 'Yes', 'buddypress' ) ?> &nbsp;
+							<input type="radio" name="bp-admin[hide-loggedout-adminbar]"<?php if ( !(int)bp_get_option( 'hide-loggedout-adminbar' ) ) : ?> checked="checked"<?php endif; ?> id="bp-admin-hide-loggedout-adminbar-no" value="0" /> <?php _e( 'No', 'buddypress' ) ?>
 						</td>
 					</tr>
 
 					<tr>
 						<th scope="row"><?php _e( 'Disable avatar uploads? (Gravatars will still work)', 'buddypress' ) ?>:</th>
 						<td>
-							<input type="radio" name="bp-admin[bp-disable-avatar-uploads]"<?php if ( (int)get_site_option( 'bp-disable-avatar-uploads' ) ) : ?> checked="checked"<?php endif; ?> id="bp-admin-disable-avatar-uploads-yes" value="1" /> <?php _e( 'Yes', 'buddypress' ) ?> &nbsp;
-							<input type="radio" name="bp-admin[bp-disable-avatar-uploads]"<?php if ( !(int)get_site_option( 'bp-disable-avatar-uploads' ) ) : ?> checked="checked"<?php endif; ?> id="bp-admin-disable-avatar-uploads-no" value="0" /> <?php _e( 'No', 'buddypress' ) ?>
+							<input type="radio" name="bp-admin[bp-disable-avatar-uploads]"<?php if ( (int)bp_get_option( 'bp-disable-avatar-uploads' ) ) : ?> checked="checked"<?php endif; ?> id="bp-admin-disable-avatar-uploads-yes" value="1" /> <?php _e( 'Yes', 'buddypress' ) ?> &nbsp;
+							<input type="radio" name="bp-admin[bp-disable-avatar-uploads]"<?php if ( !(int)bp_get_option( 'bp-disable-avatar-uploads' ) ) : ?> checked="checked"<?php endif; ?> id="bp-admin-disable-avatar-uploads-no" value="0" /> <?php _e( 'No', 'buddypress' ) ?>
 						</td>
 					</tr>
 
 					<tr>
 						<th scope="row"><?php _e( 'Disable user account deletion?', 'buddypress' ) ?>:</th>
 						<td>
-							<input type="radio" name="bp-admin[bp-disable-account-deletion]"<?php if ( (int)get_site_option( 'bp-disable-account-deletion' ) ) : ?> checked="checked"<?php endif; ?> id="bp-disable-account-deletion" value="1" /> <?php _e( 'Yes', 'buddypress' ) ?> &nbsp;
-							<input type="radio" name="bp-admin[bp-disable-account-deletion]"<?php if ( !(int)get_site_option( 'bp-disable-account-deletion' ) ) : ?> checked="checked"<?php endif; ?> id="bp-disable-account-deletion" value="0" /> <?php _e( 'No', 'buddypress' ) ?>
+							<input type="radio" name="bp-admin[bp-disable-account-deletion]"<?php if ( (int)bp_get_option( 'bp-disable-account-deletion' ) ) : ?> checked="checked"<?php endif; ?> id="bp-disable-account-deletion" value="1" /> <?php _e( 'Yes', 'buddypress' ) ?> &nbsp;
+							<input type="radio" name="bp-admin[bp-disable-account-deletion]"<?php if ( !(int)bp_get_option( 'bp-disable-account-deletion' ) ) : ?> checked="checked"<?php endif; ?> id="bp-disable-account-deletion" value="0" /> <?php _e( 'No', 'buddypress' ) ?>
 						</td>
 					</tr>
 
@@ -122,8 +122,8 @@ function bp_core_admin_settings() {
 						<tr>
 							<th scope="row"><?php _e( 'Disable global forum directory?', 'buddypress' ) ?>:</th>
 							<td>
-								<input type="radio" name="bp-admin[bp-disable-forum-directory]"<?php if ( (int)get_site_option( 'bp-disable-forum-directory' ) ) : ?> checked="checked"<?php endif; ?> id="bp-disable-forum-directory" value="1" /> <?php _e( 'Yes', 'buddypress' ) ?> &nbsp;
-								<input type="radio" name="bp-admin[bp-disable-forum-directory]"<?php if ( !(int)get_site_option( 'bp-disable-forum-directory' ) ) : ?> checked="checked"<?php endif; ?> id="bp-disable-forum-directory" value="0" /> <?php _e( 'No', 'buddypress' ) ?>
+								<input type="radio" name="bp-admin[bp-disable-forum-directory]"<?php if ( (int)bp_get_option( 'bp-disable-forum-directory' ) ) : ?> checked="checked"<?php endif; ?> id="bp-disable-forum-directory" value="1" /> <?php _e( 'Yes', 'buddypress' ) ?> &nbsp;
+								<input type="radio" name="bp-admin[bp-disable-forum-directory]"<?php if ( !(int)bp_get_option( 'bp-disable-forum-directory' ) ) : ?> checked="checked"<?php endif; ?> id="bp-disable-forum-directory" value="0" /> <?php _e( 'No', 'buddypress' ) ?>
 							</td>
 						</tr>
 
@@ -134,8 +134,8 @@ function bp_core_admin_settings() {
 						<tr>
 							<th scope="row"><?php _e( 'Disable activity stream commenting on blog and forum posts?', 'buddypress' ) ?>:</th>
 							<td>
-								<input type="radio" name="bp-admin[bp-disable-blogforum-comments]"<?php if ( (int)get_site_option( 'bp-disable-blogforum-comments' ) || false === get_site_option( 'bp-disable-blogforum-comments' ) ) : ?> checked="checked"<?php endif; ?> id="bp-disable-blogforum-comments" value="1" /> <?php _e( 'Yes', 'buddypress' ) ?> &nbsp;
-								<input type="radio" name="bp-admin[bp-disable-blogforum-comments]"<?php if ( !(int)get_site_option( 'bp-disable-blogforum-comments' ) ) : ?> checked="checked"<?php endif; ?> id="bp-disable-blogforum-comments" value="0" /> <?php _e( 'No', 'buddypress' ) ?>
+								<input type="radio" name="bp-admin[bp-disable-blogforum-comments]"<?php if ( (int)bp_get_option( 'bp-disable-blogforum-comments' ) || false === bp_get_option( 'bp-disable-blogforum-comments' ) ) : ?> checked="checked"<?php endif; ?> id="bp-disable-blogforum-comments" value="1" /> <?php _e( 'Yes', 'buddypress' ) ?> &nbsp;
+								<input type="radio" name="bp-admin[bp-disable-blogforum-comments]"<?php if ( !(int)bp_get_option( 'bp-disable-blogforum-comments' ) ) : ?> checked="checked"<?php endif; ?> id="bp-disable-blogforum-comments" value="0" /> <?php _e( 'No', 'buddypress' ) ?>
 							</td>
 						</tr>
 
@@ -146,8 +146,8 @@ function bp_core_admin_settings() {
 						<tr>
 							<th scope="row"><?php _e( 'Restrict group creation to Site Admins?', 'buddypress' ) ?>:</th>
 							<td>
-								<input type="radio" name="bp-admin[bp_restrict_group_creation]"<?php checked( '1', get_site_option( 'bp_restrict_group_creation', '0' ) ); ?>id="bp-restrict-group-creation" value="1" /> <?php _e( 'Yes', 'buddypress' ) ?> &nbsp;
-								<input type="radio" name="bp-admin[bp_restrict_group_creation]"<?php checked( '0', get_site_option( 'bp_restrict_group_creation', '0' ) ); ?>id="bp-restrict-group-creation" value="0" /> <?php _e( 'No', 'buddypress' ) ?>
+								<input type="radio" name="bp-admin[bp_restrict_group_creation]"<?php checked( '1', bp_get_option( 'bp_restrict_group_creation', '0' ) ); ?>id="bp-restrict-group-creation" value="1" /> <?php _e( 'Yes', 'buddypress' ) ?> &nbsp;
+								<input type="radio" name="bp-admin[bp_restrict_group_creation]"<?php checked( '0', bp_get_option( 'bp_restrict_group_creation', '0' ) ); ?>id="bp-restrict-group-creation" value="0" /> <?php _e( 'No', 'buddypress' ) ?>
 							</td>
 						</tr>
 
@@ -183,7 +183,7 @@ function bp_core_admin_component_setup_handler() {
 		// Settings form submitted, now save the settings. First, set active components
 		if ( isset( $_POST['bp_components'] ) ) {
 			$bp->active_components = stripslashes_deep( $_POST['bp_components'] );
-			update_site_option( 'bp-active-components', $bp->active_components );
+			bp_update_option( 'bp-active-components', $bp->active_components );
 		}
 
 		// Then, update the directory pages
@@ -262,8 +262,10 @@ function bp_core_admin_component_setup() {
  */
 function bp_core_admin_component_options() {
 	global $bp_wizard;
+			
+	require_once( BP_PLUGIN_DIR . '/bp-core/bp-core-functions.php' );
 
-	$active_components = apply_filters( 'bp_active_components', get_site_option( 'bp-active-components' ) );
+	$active_components = apply_filters( 'bp_active_components', bp_get_option( 'bp-active-components' ) );
 	
 	// An array of strings looped over to create component setup markup
 	$optional_components = array(
Index: bp-core/admin/bp-core-schema.php
===================================================================
--- bp-core/admin/bp-core-schema.php	(revision 4482)
+++ bp-core/admin/bp-core-schema.php	(working copy)
@@ -204,8 +204,8 @@ function bp_core_install_extended_profiles() {
 	$charset_collate = bp_core_set_charset();
 	$bp_prefix = bp_core_get_table_prefix();
 
-	update_site_option( 'bp-xprofile-base-group-name', _x( 'Base', 'First XProfile group name', 'buddypress' ) );
-	update_site_option( 'bp-xprofile-fullname-field-name', _x( 'Name', 'XProfile fullname field name', 'buddypress' ) );
+	bp_update_option( 'bp-xprofile-base-group-name', _x( 'Base', 'First XProfile group name', 'buddypress' ) );
+	bp_update_option( 'bp-xprofile-fullname-field-name', _x( 'Name', 'XProfile fullname field name', 'buddypress' ) );
 
 	$sql[] = "CREATE TABLE {$bp_prefix}bp_xprofile_groups (
 			    id bigint(20) unsigned NOT NULL AUTO_INCREMENT PRIMARY KEY,
@@ -262,10 +262,10 @@ function bp_core_install_extended_profiles() {
 	$insert_sql = array();
 
 	if ( !$wpdb->get_var( "SELECT id FROM {$bp_prefix}bp_xprofile_groups WHERE id = 1" ) )
-		$insert_sql[] = "INSERT INTO {$bp_prefix}bp_xprofile_groups ( name, description, can_delete ) VALUES ( " . $wpdb->prepare( '%s', stripslashes( get_site_option( 'bp-xprofile-base-group-name' ) ) ) . ", '', 0 );";
+		$insert_sql[] = "INSERT INTO {$bp_prefix}bp_xprofile_groups ( name, description, can_delete ) VALUES ( " . $wpdb->prepare( '%s', stripslashes( bp_get_option( 'bp-xprofile-base-group-name' ) ) ) . ", '', 0 );";
 
 	if ( !$wpdb->get_var( "SELECT id FROM {$bp_prefix}bp_xprofile_fields WHERE id = 1" ) )
-		$insert_sql[] = "INSERT INTO {$bp_prefix}bp_xprofile_fields ( group_id, parent_id, type, name, description, is_required, can_delete ) VALUES ( 1, 0, 'textbox', " . $wpdb->prepare( '%s', stripslashes( get_site_option( 'bp-xprofile-fullname-field-name' ) ) ) . ", '', 1, 0 );";
+		$insert_sql[] = "INSERT INTO {$bp_prefix}bp_xprofile_fields ( group_id, parent_id, type, name, description, is_required, can_delete ) VALUES ( 1, 0, 'textbox', " . $wpdb->prepare( '%s', stripslashes( bp_get_option( 'bp-xprofile-fullname-field-name' ) ) ) . ", '', 1, 0 );";
 
 	dbDelta( $insert_sql );
 }
Index: bp-core/admin/bp-core-update.php
===================================================================
--- bp-core/admin/bp-core-update.php	(revision 4482)
+++ bp-core/admin/bp-core-update.php	(working copy)
@@ -252,11 +252,13 @@ class BP_Core_Setup_Wizard {
 	<?php
 	}
 
-	function step_ms_update() {
+	function step_ms_update() {			
+		require_once( BP_PLUGIN_DIR . '/bp-core/bp-core-functions.php' );
+		
 		if ( !current_user_can( 'activate_plugins' ) )
 			return false;
 
-		$active_components = get_site_option( 'bp-active-components' );
+		$active_components = bp_get_option( 'bp-active-components' );
 
 		if ( defined( 'BP_BLOGS_SLUG' ) )
 			$blogs_slug = constant( 'BP_BLOGS_SLUG' );
@@ -264,9 +266,7 @@ class BP_Core_Setup_Wizard {
 			$blogs_slug = 'blogs';
 
  		// Call up old bp-pages to see if a page has been previously linked to Blogs
-		$page_blog_id 		= is_multisite() && defined( 'BP_ENABLE_MULTIBLOG' ) && BP_ENABLE_MULTIBLOG ? get_current_blog_id() : BP_ROOT_BLOG;
-		$existing_pages_data 	= get_blog_option( $page_blog_id, 'bp-pages' );
-		$existing_pages 	= $existing_pages_data[$page_blog_id];
+		$existing_pages = bp_get_option( 'bp-pages' );
 
 		if ( !empty( $existing_pages['blogs'] ) )
 			$existing_blog_page = '&selected=' . $existing_pages['blogs'];
@@ -362,9 +362,21 @@ class BP_Core_Setup_Wizard {
 			return false;
 
 		$existing_pages = bp_core_update_get_page_meta();
+		
+		// Provide empty indexes to avoid PHP errors with wp_dropdown_pages()
+		$indexes = array( 'members', 'activity', 'groups', 'forums', 'blogs', 'register', 'activate' );
+		foreach ( $indexes as $index ) {
+			if ( !isset( $existing_pages[$index] ) )
+				$existing_pages[$index] = '';
+		}
+		
+		if ( !empty( $existing_pages['blogs'] ) )
+			$existing_blog_page = '&selected=' . $existing_pages['blogs'];
+		else
+			$existing_blog_page = '';
 
 		// Get active components
-		$active_components = apply_filters( 'bp_active_components', get_site_option( 'bp-active-components' ) );
+		$active_components = apply_filters( 'bp_active_components', bp_get_option( 'bp-active-components' ) );
 
 		// Check for defined slugs
 		$members_slug    = !empty( $bp->members->slug    ) ? $bp->members->slug    : __( 'members',  'buddypress' );
@@ -758,16 +770,12 @@ class BP_Core_Setup_Wizard {
 					switch_to_blog( BP_ROOT_BLOG );
 
 				// Move bp-pages data from the blog options table to site options
-				$page_blog_id 		= is_multisite() && defined( 'BP_ENABLE_MULTIBLOG' ) && BP_ENABLE_MULTIBLOG ? get_current_blog_id() : BP_ROOT_BLOG;
-				$existing_pages_data 	= get_blog_option( $page_blog_id, 'bp-pages' );
-				$existing_pages 	= $existing_pages_data[$page_blog_id];
+				$existing_pages_data 	= bp_get_option( 'bp-pages' );
 
 				$bp_pages       	= $this->setup_pages( (array)$_POST['bp_pages'] );
 				$bp_pages       	= array_merge( (array)$existing_pages, (array)$bp_pages );
 
-				$existing_pages_data[$page_blog_id] = $bp_pages;
-
-				update_site_option( 'bp-pages', $existing_pages_data );
+				bp_update_option( 'bp-pages', $bp_pages );
 
 				if ( !empty( $wpdb->blogid ) && ( $wpdb->blogid != BP_ROOT_BLOG ) && ( !defined( 'BP_ENABLE_MULTIBLOG' ) ) )
 					restore_current_blog();
@@ -775,7 +783,7 @@ class BP_Core_Setup_Wizard {
 				bp_core_install( $active_components );
 			}
 
-			update_site_option( 'bp-active-components', $active_components );
+			bp_update_option( 'bp-active-components', $active_components );
 
 			return true;
 		}
@@ -793,8 +801,10 @@ class BP_Core_Setup_Wizard {
 			// Settings form submitted, now save the settings.
 			foreach ( (array)$_POST['bp_components'] as $key => $value )
 				$active_components[$key] = 1;
+			
+			require_once( BP_PLUGIN_DIR . '/bp-core/bp-core-functions.php' );
 
-			update_site_option( 'bp-active-components', $active_components );
+			bp_update_option( 'bp-active-components', $active_components );
 
 			wp_cache_flush();
 			bp_core_install();
@@ -822,10 +832,8 @@ class BP_Core_Setup_Wizard {
 				wp_delete_post( $page_id, true );
 
 			$blog_pages 	= $this->setup_pages( (array)$_POST['bp_pages'] );
-			$page_blog_id 	= is_multisite() && defined( 'BP_ENABLE_MULTIBLOG' ) && BP_ENABLE_MULTIBLOG ? get_current_blog_id() : BP_ROOT_BLOG;
-			$bp_pages	= array( $page_blog_id => $blog_pages );
 
-			update_site_option( 'bp-pages', $bp_pages );
+			bp_update_option( 'bp-pages', $blog_pages );
 
 			if ( !empty( $wpdb->blogid ) && ( $wpdb->blogid != BP_ROOT_BLOG ) && ( !defined( 'BP_ENABLE_MULTIBLOG' ) ) )
 				restore_current_blog();
@@ -994,14 +1002,16 @@ class BP_Core_Setup_Wizard {
 			check_admin_referer( 'bpwizard_finish' );
 
 			// Update the DB version in the database
+			// Stored in sitemeta. Do not use bp_update_option()
 			update_site_option( 'bp-db-version', constant( 'BP_DB_VERSION' ) );
 			delete_site_option( 'bp-core-db-version' );
 
 			// Delete the setup cookie
 			@setcookie( 'bp-wizard-step', '', time() - 3600, COOKIEPATH );
 
-			// Load BP, so that the redirect is successful
+			// Load BP and hook the admin menu, so that the redirect is successful
 			require_once( WP_PLUGIN_DIR . '/buddypress/bp-core/bp-core-loader.php' );
+			bp_core_add_admin_menu();
 
 			// Redirect to the BuddyPress dashboard
 			$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' ) );
@@ -1061,7 +1071,7 @@ function bp_core_install( $active_components = false ) {
 	global $wpdb;
 
 	if ( empty( $active_components ) )
-		$active_components = apply_filters( 'bp_active_components', get_site_option( 'bp-active-components' ) );
+		$active_components = apply_filters( 'bp_active_components', bp_get_option( 'bp-active-components' ) );
 
 	require_once( dirname( __FILE__ ) . '/bp-core-schema.php' );
 
@@ -1117,7 +1127,7 @@ function bp_update_db_stuff() {
 	// On first installation - record all existing blogs in the system.
 	if ( !(int)$bp->site_options['bp-blogs-first-install'] && is_multisite() ) {
 		bp_blogs_record_existing_blogs();
-		add_site_option( 'bp-blogs-first-install', 1 );
+		update_site_option( 'bp-blogs-first-install', 1 );
 	}
 
 	if ( is_multisite() )
@@ -1234,23 +1244,20 @@ function bp_core_update_add_admin_menu_styles() {
 add_action( 'admin_head', 'bp_core_update_add_admin_menu_styles' );
 
 /**
- * Fetches BP pages from the meta table, depending on setup
+ * Fetches BP pages from the meta table
  *
  * @package BuddyPress Core
  * @since 1.3
  *
  * @return array $page_ids
  */
-function bp_core_update_get_page_meta() {
-	$page_ids = get_site_option( 'bp-pages' );
-
-	$is_enable_multiblog = is_multisite() && defined( 'BP_ENABLE_MULTIBLOG' ) && BP_ENABLE_MULTIBLOG ? true : false;
-
-	$page_blog_id = $is_enable_multiblog ? get_current_blog_id() : BP_ROOT_BLOG;
-
-	$blog_page_ids = !empty( $page_ids[$page_blog_id] ) ? $page_ids[$page_blog_id] : false;
+function bp_core_update_get_page_meta() {			
+	require_once( BP_PLUGIN_DIR . '/bp-core/bp-core-functions.php' );
+	
+	if ( !$page_ids = bp_get_option( 'bp-pages' ) )
+		$page_ids = array();
 
-	return apply_filters( 'bp_core_update_get_page_meta', $blog_page_ids );
+	return apply_filters( 'bp_core_update_get_page_meta', $page_ids );
 }
 
 function bp_core_update_do_network_admin() {
Index: bp-core/bp-core-buddybar.php
===================================================================
--- bp-core/bp-core-buddybar.php	(revision 4482)
+++ bp-core/bp-core-buddybar.php	(working copy)
@@ -321,7 +321,7 @@ function bp_core_admin_bar() {
 	if ( defined( 'BP_DISABLE_ADMIN_BAR' ) && BP_DISABLE_ADMIN_BAR )
 		return false;
 
-	if ( (int)get_site_option( 'hide-loggedout-adminbar' ) && !is_user_logged_in() )
+	if ( (int)bp_get_option( 'hide-loggedout-adminbar' ) && !is_user_logged_in() )
 		return false;
 
 	$bp->doing_admin_bar = true;
@@ -486,7 +486,7 @@ function bp_core_load_admin_bar() {
 		// Keep the WP admin bar from loading
 		show_admin_bar( false );
 
-		if ( (int)get_site_option( 'hide-loggedout-adminbar' ) && !is_user_logged_in() )
+		if ( (int)bp_get_option( 'hide-loggedout-adminbar' ) && !is_user_logged_in() )
 			return;
 
 		// Admin bar styles
Index: bp-core/bp-core-functions.php
===================================================================
--- bp-core/bp-core-functions.php	(revision 4482)
+++ bp-core/bp-core-functions.php	(working copy)
@@ -1,6 +1,92 @@
 <?php
 
 /**
+ * Retrieve an option
+ *
+ * This is a wrapper for get_blog_option(), which in turn stores settings data (such as bp-pages)
+ * on the appropriate blog, given your current setup.
+ *
+ * The 'bp_get_option' filter is primarily for backward-compatibility.
+ *
+ * @package BuddyPress
+ * @since 1.3
+ *
+ * @uses bp_get_option_blog_id()
+ * @param str $option_name The option to be retrieved
+ * @param str $default Optional. Default value to be returned if the option isn't set
+ * @return mixed The value for the option
+ */
+function bp_get_option( $option_name, $default = false ) {
+	$value = get_blog_option( bp_get_option_blog_id( $option_name ), $option_name, $default );
+	
+	return apply_filters( 'bp_get_option', $value );
+}
+
+/**
+ * Save an option
+ *
+ * This is a wrapper for update_blog_option(), which in turn stores settings data (such as bp-pages)
+ * on the appropriate blog, given your current setup.
+ *
+ * @package BuddyPress
+ * @since 1.3
+ *
+ * @uses bp_get_option_blog_id()
+ * @param str $option_name The option key to be set
+ * @param str $value The value to be set
+ */
+function bp_update_option( $option_name, $value ) {
+	// update_blog_option() does not return anything on success/failure, so neither can we
+	update_blog_option( bp_get_option_blog_id( $option_name ), $option_name, $value );
+}
+
+/**
+ * Delete an option
+ *
+ * This is a wrapper for delete_blog_option(), which in turn deletes settings data (such as
+ * bp-pages) on the appropriate blog, given your current setup.
+ *
+ * @package BuddyPress
+ * @since 1.3
+ *
+ * @uses bp_get_option_blog_id()
+ * @param str $option_name The option key to be set
+ */
+function bp_delete_option( $option_name ) {
+	// update_blog_option() does not return anything on success/failure, so neither can we
+	delete_blog_option( bp_get_option_blog_id( $option_name ), $option_name );
+}
+
+/**
+ * Retrieve the filterable blog_id of the blog where the option is question is saved
+ *
+ * @package BuddyPress
+ * @since 1.3
+ *
+ * @see bp_get_option()
+ * @see bp_update_option()
+ * @uses apply_filters() Filter bp_get_option_blog_id to change this setting
+ * @return int $blog_id
+ */
+function bp_get_option_blog_id( $option_name ) {
+	$blog_specific_options = apply_filters( 'bp_blog_specific_options', array(
+		'bp-pages'
+	) );
+	
+	if ( in_array( $option_name, $blog_specific_options ) ) {
+		if ( defined( 'BP_ENABLE_MULTIBLOG' ) && BP_ENABLE_MULTIBLOG ) {
+			$blog_id = get_current_blog_id();
+		} else {
+			$blog_id = BP_ROOT_BLOG;
+		}
+	} else {
+		$blog_id = BP_ROOT_BLOG;
+	}
+
+	return apply_filters( 'bp_get_option_blog_id', $blog_id );
+}
+
+/**
  * Allow filtering of database prefix. Intended for use in multinetwork installations.
  *
  * @global object $wpdb WordPress database object
@@ -22,48 +108,26 @@ function bp_core_get_table_prefix() {
  *       people running trunk installations. Leave for a version or two, then remove.
  */
 function bp_core_get_page_meta() {
-	$page_ids = get_site_option( 'bp-pages' );
-	
-	$is_enable_multiblog = is_multisite() && defined( 'BP_ENABLE_MULTIBLOG' ) && BP_ENABLE_MULTIBLOG ? true : false;
-
-	$page_blog_id = $is_enable_multiblog ? get_current_blog_id() : BP_ROOT_BLOG;
+	$page_ids = bp_get_option( 'bp-pages' );
 
 	// Upgrading from an earlier version of BP pre-1.3
-	if ( empty( $page_ids ) || isset( $page_ids['members'] ) ) {		
-		if ( empty( $page_ids ) ) {		
-			// We're probably coming from an old multisite install
-			$old_page_ids = get_blog_option( $page_blog_id, 'bp-pages' );
-		} else {
-			// We're probably coming from an old single-WP install
-			$old_page_ids = $page_ids;
-		}
-		
-		/**
-		 * If $page_ids is found in a blog_option, and it's formatted in the new way (keyed
-		 * by blog_id), it means that this is an MS upgrade. Return false and let the
-		 * upgrade wizard handle the migration.
-		 */
-		if ( !isset( $old_page_ids['members'] ) )
-			return false;
-			
-		// Finally, move the page ids over to site options
-		$new_page_ids = array(
-			$page_blog_id => $old_page_ids
-		);
+	if ( !isset( $page_ids['members'] ) && $ms_page_ids = get_site_option( 'bp-pages' ) ) {
+		$is_enable_multiblog = is_multisite() && defined( 'BP_ENABLE_MULTIBLOG' ) && BP_ENABLE_MULTIBLOG ? true : false;
 
-		update_site_option( 'bp-pages', $new_page_ids );
+		$page_blog_id = $is_enable_multiblog ? get_current_blog_id() : BP_ROOT_BLOG;
+		
+		if ( isset( $ms_page_ids[$page_blog_id] ) ) {
+			$page_ids = $ms_page_ids[$page_blog_id];
+		
+			bp_update_option( 'bp-pages', $page_ids );
+		}
 	}
 	
-	$blog_page_ids = !empty( $page_ids[$page_blog_id] ) ? $page_ids[$page_blog_id] : false;
-	
-	return apply_filters( 'bp_core_get_page_meta', $blog_page_ids );
+	return apply_filters( 'bp_core_get_page_meta', $page_ids );
 }
 
 /**
- * Stores BP pages in the meta table, depending on setup
- *
- * bp-pages data is stored in site_options (falls back to options on non-MS), in an array keyed by
- * blog_id. This allows you to change your BP_ROOT_BLOG and go through the setup process again.
+ * Stores BP pages in the meta table
  *
  * @package BuddyPress Core 
  * @since 1.3
@@ -71,15 +135,7 @@ function bp_core_get_page_meta() {
  * @param array $blog_page_ids The IDs of the WP pages corresponding to BP component directories
  */
 function bp_core_update_page_meta( $blog_page_ids ) {
-	if ( !$page_ids = get_site_option( 'bp-pages' ) )
-		$page_ids = array();
-
-	// Generally, we key by the BP_ROOT_BLOG. Exception: when BP_ENABLE_MULTIBLOG is turned on
-	$key = is_multisite() && defined( 'BP_ENABLE_MULTIBLOG' ) && BP_ENABLE_MULTIBLOG ? get_current_blog_id() : BP_ROOT_BLOG;
-	
-	$page_ids[$key] = $blog_page_ids;
-
-	update_site_option( 'bp-pages', $page_ids );
+	bp_update_option( 'bp-pages', $blog_page_ids );
 }
 
 /**
@@ -874,6 +930,7 @@ add_action( 'bp_init', 'bp_core_add_ajax_hook' );
  * site options.
  *
  * @package BuddyPress Core
+ * @todo Does this need to be here anymore after the introduction of bp_get_option etc?
  */
 function bp_core_activate_site_options( $keys = array() ) {
 	global $bp;
@@ -883,9 +940,9 @@ function bp_core_activate_site_options( $keys = array() ) {
 
 		foreach ( $keys as $key => $default ) {
 			if ( empty( $bp->site_options[ $key ] ) ) {
-				$bp->site_options[ $key ] = get_blog_option( BP_ROOT_BLOG, $key, $default );
+				$bp->site_options[ $key ] = bp_get_option( $key, $default );
 
-				if ( !update_site_option( $key, $bp->site_options[ $key ] ) )
+				if ( !bp_update_option( $key, $bp->site_options[ $key ] ) )
 					$errors = true;
 			}
 		}
@@ -907,7 +964,7 @@ function bp_core_activate_site_options( $keys = array() ) {
 function bp_core_get_site_options() {
 	global $bp, $wpdb;
 
-	// These options come from the options table in WP single, and sitemeta in MS
+	// These options come from the options table
 	$site_options = apply_filters( 'bp_core_site_options', array(
 		'bp-deactivated-components',
 		'bp-blogs-first-install',
@@ -935,10 +992,41 @@ function bp_core_get_site_options() {
 
 	$meta_keys = "'" . implode( "','", (array)$site_options ) ."'";
 
-	if ( is_multisite() )
-		$site_meta = $wpdb->get_results( "SELECT meta_key AS name, meta_value AS value FROM {$wpdb->sitemeta} WHERE meta_key IN ({$meta_keys}) AND site_id = {$wpdb->siteid}" );
-	else
-		$site_meta = $wpdb->get_results( "SELECT option_name AS name, option_value AS value FROM {$wpdb->options} WHERE option_name IN ({$meta_keys})" );
+	$site_meta = $wpdb->get_results( "SELECT option_name AS name, option_value AS value FROM {$wpdb->options} WHERE option_name IN ({$meta_keys})" );
+	
+	// Backward compatibility - moves sitemeta to the blog
+	if ( empty( $site_meta ) || ( count( $site_meta ) < count( $site_options ) ) ) {
+		if ( is_multisite() ) {
+			$ms_site_meta = $wpdb->get_results( "SELECT meta_key AS name, meta_value AS value FROM {$wpdb->sitemeta} WHERE meta_key IN ({$meta_keys}) AND site_id = {$wpdb->siteid}" );
+		} else {
+			$ms_site_meta = $wpdb->get_results( "SELECT option_name AS name, option_value AS value FROM {$wpdb->options} WHERE option_name IN ({$meta_keys})" );
+		}
+		
+		$settings_to_move = array(
+			'bp-deactivated-components',
+			'bp-blogs-first-install',
+			'bp-disable-blog-forum-comments',
+			'bp-xprofile-base-group-name',
+			'bp-xprofile-fullname-field-name',
+			'bp-disable-profile-sync',
+			'bp-disable-avatar-uploads',
+			'bp-disable-account-deletion',
+			'bp-disable-forum-directory',
+			'bp-disable-blogforum-comments',
+			'bb-config-location',
+			'hide-loggedout-adminbar',
+		);
+		
+		foreach( (array)$ms_site_meta as $meta ) {	
+			if ( isset( $meta->name ) && in_array( $meta->name, $settings_to_move ) ) {
+				bp_update_option( $meta->name, $meta->value );
+						
+				if ( empty( $site_meta[$meta->name] ) ) {
+					$site_meta[$meta->name] = $meta->value;
+				}
+			}
+		}
+	}
 
 	$root_blog_meta_keys  = "'" . implode( "','", (array)$root_blog_options ) ."'";
 	$root_blog_meta_table = $wpdb->get_blog_prefix( BP_ROOT_BLOG ) . 'options';
@@ -948,7 +1036,8 @@ function bp_core_get_site_options() {
 	foreach( array( $site_meta, $root_blog_meta ) as $meta ) {
 		if ( !empty( $meta ) ) {
 			foreach( (array)$meta as $meta_item ) {
-				$site_options[$meta_item->name] = $meta_item->value;
+				if ( isset( $meta_item->name ) )
+					$site_options[$meta_item->name] = $meta_item->value;
 			}
 		}
 	}
Index: bp-core/bp-core-loader.php
===================================================================
--- bp-core/bp-core-loader.php	(revision 4482)
+++ bp-core/bp-core-loader.php	(working copy)
@@ -21,6 +21,11 @@ require_once( BP_PLUGIN_DIR . '/bp-core/deprecated/1.3.php'    );
 if ( !defined( 'BP_DISABLE_ADMIN_BAR' ) )
 	require_once( BP_PLUGIN_DIR . '/bp-core/bp-core-adminbar.php'  );
 
+// Move active components from sitemeta, if necessary
+// Provides backpat with earlier versions of BP 
+if ( is_multisite() && $active_components = get_site_option( 'bp-active-components' ) )
+	bp_update_option( 'bp-active-components', $active_components );
+
 /** "And now for something completely different" ******************************/
 
 class BP_Core extends BP_Component {
@@ -60,12 +65,12 @@ class BP_Core extends BP_Component {
 		$bp->required_components    = apply_filters( 'bp_required_components',    array( 'members', ) );
 
 		// Get a list of activated components
-		if ( $active_components = get_site_option( 'bp-active-components' ) ) {
+		if ( $active_components = bp_get_option( 'bp-active-components' ) ) {
 			$bp->active_components      = apply_filters( 'bp_active_components',      $active_components );
 			$bp->deactivated_components = apply_filters( 'bp_deactivated_components', array_values( array_diff( array_values( array_merge( $bp->optional_components, $bp->required_components ) ), array_keys( $bp->active_components ) ) ) );
 
 		// Pre 1.3 Backwards compatibility
-		} elseif ( $deactivated_components = get_site_option( 'bp-deactivated-components' ) ) {
+		} elseif ( $deactivated_components = bp_get_option( 'bp-deactivated-components' ) ) {
 			// Trim off namespace and filename
 			foreach ( $deactivated_components as $component => $value )
 				$trimmed[] = str_replace( '.php', '', str_replace( 'bp-', '', $component ) );
Index: bp-core/bp-core-template.php
===================================================================
--- bp-core/bp-core-template.php	(revision 4482)
+++ bp-core/bp-core-template.php	(working copy)
@@ -538,17 +538,6 @@ function bp_registration_needs_activation() {
 	return apply_filters( 'bp_registration_needs_activation', true );
 }
 
-function bp_get_option( $option_name ) {
-	global $bp;
-
-	if ( !empty( $bp->site_options[$option_name] ) )
-		$retval = $bp->site_options[$option_name];
-	else
-		$retval = false;
-
-	return apply_filters( 'bp_get_option', $retval );
-}
-
 /**
  * Allow templates to pass parameters directly into the template loops via AJAX
  *
Index: bp-core/bp-core-wpabstraction.php
===================================================================
--- bp-core/bp-core-wpabstraction.php	(revision 4482)
+++ bp-core/bp-core-wpabstraction.php	(working copy)
@@ -16,13 +16,19 @@ if ( !is_multisite() ) {
 	global $wpdb;
 
 	$wpdb->base_prefix = $wpdb->prefix;
-	$wpdb->blogid      = 1;
+	$wpdb->blogid      = BP_ROOT_BLOG;
 
 	if ( !function_exists( 'get_blog_option' ) ) {
 		function get_blog_option( $blog_id, $option_name, $default = false ) {
 			return get_option( $option_name, $default );
 		}
 	}
+	
+	if ( !function_exists( 'update_blog_option' ) ) {
+		function update_blog_option( $blog_id, $option_name, $value ) {
+			return update_option( $option_name, $value );
+		}
+	}
 
 	if ( !function_exists( 'switch_to_blog' ) ) {
 		function switch_to_blog() {
Index: bp-forums/bp-forums-admin.php
===================================================================
--- bp-forums/bp-forums-admin.php	(revision 4482)
+++ bp-forums/bp-forums-admin.php	(working copy)
@@ -143,7 +143,7 @@ function bp_forums_configure_existing_install() {
 		$_REQUEST['bbconfigloc'] .= 'bb-config.php';
 	}
 
-	update_site_option( 'bb-config-location', $_REQUEST['bbconfigloc'] );
+	bp_update_option( 'bb-config-location', $_REQUEST['bbconfigloc'] );
 
 	if ( !file_exists( $_REQUEST['bbconfigloc'] ) )
 		return false;
@@ -214,7 +214,7 @@ function bp_forums_bbpress_install() {
 		$initial_write = $file;
 	}
 
-	update_site_option( 'bb-config-location', ABSPATH . 'bb-config.php' );
+	bp_update_option( 'bb-config-location', ABSPATH . 'bb-config.php' );
 	return $initial_write;
 }
 
Index: bp-groups/bp-groups-template.php
===================================================================
--- bp-groups/bp-groups-template.php	(revision 4482)
+++ bp-groups/bp-groups-template.php	(working copy)
@@ -1740,7 +1740,7 @@ function bp_group_member_admin_pagination() {
  * @since BuddyPress 1.3
  *
  * @uses apply_filters() To call 'bp_user_can_create_groups'.
- * @uses get_site_option() To retrieve value of 'bp_restrict_group_creation'. Defaults to 0.
+ * @uses bp_get_option() To retrieve value of 'bp_restrict_group_creation'. Defaults to 0.
  * @uses is_super_admin() To determine if current user if super admin.
  *
  * @return bool True if user can create groups. False otherwise.
@@ -1751,7 +1751,7 @@ function bp_user_can_create_groups() {
 		return true;
 
 	// Get group creation option, default to 0 (allowed)
-	$restricted = (int) get_site_option( 'bp_restrict_group_creation', 0 );
+	$restricted = (int) bp_get_option( 'bp_restrict_group_creation', 0 );
 
 	// Allow by default
 	$can_create = true;
Index: bp-members/bp-members-functions.php
===================================================================
--- bp-members/bp-members-functions.php	(revision 4482)
+++ bp-members/bp-members-functions.php	(working copy)
@@ -535,7 +535,6 @@ function bp_core_get_all_posts_for_user( $user_id = 0 ) {
  * @uses is_super_admin() Checks to see if the user is a site administrator.
  * @uses wpmu_delete_user() Deletes a user from the system on multisite installs.
  * @uses wp_delete_user() Deletes a user from the system on singlesite installs.
- * @uses get_site_option Checks if account deletion is allowed
  */
 function bp_core_delete_account( $user_id = 0 ) {
 	global $bp, $wp_version;
Index: bp-xprofile/bp-xprofile-admin.php
===================================================================
--- bp-xprofile/bp-xprofile-admin.php	(revision 4482)
+++ bp-xprofile/bp-xprofile-admin.php	(working copy)
@@ -49,7 +49,7 @@ function xprofile_admin( $message = '', $type = 'error' ) {
 		</h2>
 
 		<p><?php _e( 'Your users will distinguish themselves through their profile page. You must give them profile fields that allow them to describe themselves in a way that is relevant to the theme of your social network.', 'buddypress'); ?></p>
-		<p><?php echo sprintf( __( 'NOTE: Any fields in the "%s" group will appear on the signup page.', 'buddypress' ), esc_html( stripslashes( get_site_option( 'bp-xprofile-base-group-name' ) ) ) ) ?></p>
+		<p><?php echo sprintf( __( 'NOTE: Any fields in the "%s" group will appear on the signup page.', 'buddypress' ), esc_html( stripslashes( bp_get_option( 'bp-xprofile-base-group-name' ) ) ) ) ?></p>
 
 		<form action="" id="profile-field-form" method="post">
 
