Index: bp-activity.php
===================================================================
--- bp-activity.php	(revision 3437)
+++ bp-activity.php	(working copy)
@@ -67,7 +67,7 @@
 function bp_activity_directory_activity_setup() {
 	global $bp;
 
-	if ( $bp->current_component == $bp->activity->slug && empty( $bp->current_action ) ) {
+	if ( is_front_page() && bp_is_component_front_page( $bp->activity->slug ) || $bp->current_component == $bp->activity->slug && empty( $bp->current_action ) ) {
 		$bp->is_directory = true;
 
 		do_action( 'bp_activity_directory_activity_setup' );
Index: bp-themes/bp-default/functions.php
===================================================================
--- bp-themes/bp-default/functions.php	(revision 3437)
+++ bp-themes/bp-default/functions.php	(working copy)
@@ -107,76 +107,60 @@
 }
 
 /**
- * Filter the dropdown for selecting the page to show on front to include "Activity Stream"
+ * In BuddyPress 1.2.x, this function filtered the dropdown on the Settings > Reading screen for selecting
+ * the page to show on front to include "Activity Stream."
+ * As of 1.3.x, it is no longer required.
  *
+ * @deprecated 1.3
+ * @deprecated Don't use this, really.
  * @param string $page_html A list of pages as a dropdown (select list)
- * @see wp_dropdown_pages()
  * @return string
- * @package BuddyPress Theme
+ * @see wp_dropdown_pages()
  * @since 1.2
  */
 function bp_dtheme_wp_pages_filter( $page_html ) {
-	if ( !bp_is_active( 'activity' ) )
-		return $page_html;
-
-	if ( 'page_on_front' != substr( $page_html, 14, 13 ) )
-		return $page_html;
-
-	$selected = false;
-	$page_html = str_replace( '</select>', '', $page_html );
-
-	if ( bp_dtheme_page_on_front() == 'activity' )
-		$selected = ' selected="selected"';
-
-	$page_html .= '<option class="level-0" value="activity"' . $selected . '>' . __( 'Activity Stream', 'buddypress' ) . '</option></select>';
+	_deprecated_function( __FUNCTION__, '1.3', "Don't use this, really." );
 	return $page_html;
 }
-add_filter( 'wp_dropdown_pages', 'bp_dtheme_wp_pages_filter' );
 
 /**
- * Hijack the saving of page on front setting to save the activity stream setting
+ * In BuddyPress 1.2.x, this function hijacked the saving of page on front setting to save the activity stream setting.
+ * As of 1.3.x, it is no longer required.
  *
+ * @deprecated 1.3
+ * @deprecated Don't use this, really.
  * @param $string $oldvalue Previous value of get_option( 'page_on_front' )
  * @param $string $oldvalue New value of get_option( 'page_on_front' )
  * @return string
- * @package BuddyPress Theme
  * @since 1.2
  */
 function bp_dtheme_page_on_front_update( $oldvalue, $newvalue ) {
+	_deprecated_function( __FUNCTION__, '1.3', "Don't use this, really." );
 	if ( !is_admin() || !is_super_admin() )
 		return false;
 
-	if ( 'activity' == $_POST['page_on_front'] )
-		return 'activity';
-	else
-		return $oldvalue;
+	return $oldvalue;
 }
-add_action( 'pre_update_option_page_on_front', 'bp_dtheme_page_on_front_update', 10, 2 );
 
 /**
- * Load the activity stream template if settings allow
+ * In BuddyPress 1.2.x, this function loaded the activity stream template if the front page display settings allow.
+ * As of 1.3.x, it is no longer required.
  *
+ * @deprecated 1.3
+ * @deprecated Don't use this, really.
  * @param string $template Absolute path to the page template 
  * @return string
- * @global WP_Query $wp_query WordPress query object
- * @package BuddyPress Theme
  * @since 1.2
  */
 function bp_dtheme_page_on_front_template( $template ) {
-	global $wp_query;
-
-	if ( empty( $wp_query->post->ID ) )
-		return locate_template( array( 'activity/index.php' ), false );
-	else
-		return $template;
+	_deprecated_function( __FUNCTION__, '1.3', "Don't use this, really." );
+	return $template;
 }
-add_filter( 'page_template', 'bp_dtheme_page_on_front_template' );
 
 /**
  * Return the ID of a page set as the home page.
  *
  * @return false|int ID of page set as the home page
- * @package BuddyPress Theme
  * @since 1.2
  */
 function bp_dtheme_page_on_front() {
@@ -187,39 +171,31 @@
 }
 
 /**
- * Force the page ID as a string to stop the get_posts query from kicking up a fuss.
+ * In BuddyPress 1.2.x, this forced the page ID as a string to stop the get_posts query from kicking up a fuss.
+ * As of 1.3.x, it is no longer required.
  *
- * @global WP_Query $wp_query WordPress query object
- * @package BuddyPress Theme
+ * @deprecated 1.3
+ * @deprecated Don't use this, really.
  * @since 1.2
  */
 function bp_dtheme_fix_get_posts_on_activity_front() {
-	global $wp_query;
-
-	if ( !empty($wp_query->query_vars['page_id']) && 'activity' == $wp_query->query_vars['page_id'] )
-		$wp_query->query_vars['page_id'] = '"activity"';
+	_deprecated_function( __FUNCTION__, '1.3', "Don't use this, really." );
 }
-add_action( 'pre_get_posts', 'bp_dtheme_fix_get_posts_on_activity_front' );
 
 /**
- * WP 3.0 requires there to be a non-null post in the posts array
+ * In BuddyPress 1.3, this was used as part of the code that set the activity stream to be on the front page.
+ * As of 1.3.x, it is no longer required.
  *
+ * @deprecated 1.3
+ * @deprecated Don't use this, really.
  * @param array $posts Posts as retrieved by WP_Query
- * @global WP_Query $wp_query WordPress query object
  * @return array
- * @package BuddyPress Theme
  * @since 1.2.5
  */
 function bp_dtheme_fix_the_posts_on_activity_front( $posts ) {
-	global $wp_query;
-
-	// NOTE: the double quotes around '"activity"' are thanks to our previous function bp_dtheme_fix_get_posts_on_activity_front()
-	if ( empty( $posts ) && !empty( $wp_query->query_vars['page_id'] ) && '"activity"' == $wp_query->query_vars['page_id'] )
-		$posts = array( (object) array( 'ID' => 'activity' ) );
-
+	_deprecated_function( __FUNCTION__, '1.3', "Don't use this, really." );
 	return $posts;
 }
-add_filter( 'the_posts', 'bp_dtheme_fix_the_posts_on_activity_front' );
 
 /**
  * Add secondary avatar image to this activity stream's record, if supported
@@ -358,7 +334,7 @@
 function bp_dtheme_main_nav( $args ) {
 ?>
 	<ul id="nav">
-		<li<?php if ( bp_is_front_page() ) : ?> class="selected"<?php endif; ?>>
+		<li<?php if ( is_front_page() ) : ?> class="selected"<?php endif; ?>>
 			<a href="<?php echo site_url() ?>" title="<?php _e( 'Home', 'buddypress' ) ?>"><?php _e( 'Home', 'buddypress' ) ?></a>
 		</li>
 
Index: bp-core/bp-core-templatetags.php
===================================================================
--- bp-core/bp-core-templatetags.php	(revision 3437)
+++ bp-core/bp-core-templatetags.php	(working copy)
@@ -1503,6 +1503,32 @@
 
 /* Template is_() functions to determine the current page */
 
+/**
+ * Checks if the site's front page is set to the specified BuddyPress component page in wp-admin's Settings > Reading screen.
+ *
+ * @global $bp The global BuddyPress settings variable created in bp_core_setup_globals()
+ * @global $current_blog WordPress global containing information and settings for the current blog being viewed.
+ * @param string $component Optional; name of the component to check for. If not specified, uses $bp->current_component.
+ * @return bool True if the specified component is set to be the site's front page.
+ * @since 1.3
+ */
+function bp_is_component_front_page( $component='' ) {
+	global $bp, $current_blog;
+
+	if ( !$component && !empty( $bp->current_component ) )
+		$component = $bp->current_component;
+
+	if ( is_main_site() )
+		$path = bp_core_get_site_path();
+	else
+		$path = $current_blog->path;
+		
+	if ( 'page' != get_option( 'show_on_front' ) || !$component || !isset( $bp->pages ) || !isset( $bp->pages->{$component} ) || $_SERVER['REQUEST_URI'] != $path )
+		return false;
+
+	return apply_filters( 'bp_is_front_page_set_to', ( $bp->pages->{$component}->id == get_option( 'page_on_front' ) ), $component );
+}
+
 function bp_is_blog_page() {
 	global $bp, $is_member_page, $wp_query;
 
@@ -1527,26 +1553,18 @@
 }
 function bp_is_home() { return bp_is_my_profile(); }
 
+/**
+ * Is the user on the front page of the site?
+ *
+ * @deprecated 1.3
+ * @deprecated Use is_front_page()
+ * @return bool
+ */
 function bp_is_front_page() {
-	if ( 'posts' == get_option('show_on_front') && is_home() )
-		return true;
-	else if ( bp_is_activity_front_page() )
-		return true;
-	else
-		return is_front_page();
+	_deprecated_function( __FUNCTION__, '1.3', "is_front_page()" );
+	return is_front_page();
 }
 
-function bp_is_activity_front_page() {
-	global $current_blog;
-
-	if ( is_main_site() )
-		$path = bp_core_get_site_path();
-	else
-		$path = $current_blog->path;
-
-	return ( 'page' == get_option('show_on_front') && 'activity' == get_option('page_on_front') && $_SERVER['REQUEST_URI'] == $path );
-}
-
 function bp_is_directory() {
 	global $bp;
 
@@ -1965,7 +1983,7 @@
 
 		$bp_classes = array();
 
-		if ( bp_is_front_page() )
+		if ( is_front_page() )
 			$bp_classes[] = 'home-page';
 
 		if ( bp_is_directory() )
@@ -1974,19 +1992,19 @@
 		if ( bp_is_user_profile() && !bp_is_blog_page() )
 			$bp_classes[] = 'profile';
 
-		if ( bp_is_activity_component() && !bp_is_blog_page() || ( bp_is_activity_front_page() && bp_is_front_page() ) )
+		if ( bp_is_activity_component() && !bp_is_blog_page() || is_front_page() && bp_is_active( 'activity' ) && bp_is_component_front_page( $bp->activity->slug ) )
 			$bp_classes[] = 'activity';
 
-		if ( bp_is_blogs_component() && !bp_is_blog_page()  )
+		if ( bp_is_blogs_component() && !bp_is_blog_page() || is_front_page() && bp_is_active( 'blogs' ) && bp_is_component_front_page( $bp->blogs->slug ) )
 			$bp_classes[] = 'blogs';
 
 		if ( bp_is_messages_component() && !bp_is_blog_page()  )
 			$bp_classes[] = 'messages';
 
-		if ( bp_is_friends_component() && !bp_is_blog_page()  )
+		if ( bp_is_friends_component() && !bp_is_blog_page() || is_front_page() && bp_is_active( 'members' ) && bp_is_component_front_page( $bp->members->slug ) )
 			$bp_classes[] = 'friends';
 
-		if ( bp_is_groups_component() && !bp_is_blog_page()  )
+		if ( bp_is_groups_component() && !bp_is_blog_page() || is_front_page() && bp_is_active( 'groups' ) && bp_is_component_front_page( $bp->groups->slug ) )
 			$bp_classes[] = 'groups';
 
 		if ( bp_is_settings_component() && !bp_is_blog_page()  )
Index: bp-core/bp-core-catchuri.php
===================================================================
--- bp-core/bp-core-catchuri.php	(revision 3439)
+++ bp-core/bp-core-catchuri.php	(working copy)
@@ -222,8 +222,9 @@
 	global $post, $bp, $wpdb, $wp_query, $bp_unfiltered_uri, $bp_unfiltered_uri_offset;
 
 	// Determine if the root object WP page exists for this request (TODO: is there an API function for this?
-	if ( !$page_exists = $wpdb->get_var( $wpdb->prepare( "SELECT ID FROM {$wpdb->posts} WHERE post_name = %s", $bp_unfiltered_uri[$bp_unfiltered_uri_offset] ) ) )
-		return false;
+	if ( isset( $bp_unfiltered_uri[$bp_unfiltered_uri_offset] ) )
+		if ( !$page_exists = $wpdb->get_var( $wpdb->prepare( "SELECT ID FROM {$wpdb->posts} WHERE post_name = %s", $bp_unfiltered_uri[$bp_unfiltered_uri_offset] ) ) )
+			return false;
 
 	// Set the root object as the current wp_query-ied item
 	$object_id = 0;
Index: bp-blogs.php
===================================================================
--- bp-blogs.php	(revision 3437)
+++ bp-blogs.php	(working copy)
@@ -71,7 +71,7 @@
 function bp_blogs_directory_blogs_setup() {
 	global $bp;
 
-	if ( is_multisite() && $bp->current_component == $bp->blogs->slug && empty( $bp->current_action ) ) {
+	if ( is_multisite() && ( is_front_page() && bp_is_component_front_page( $bp->blogs->slug ) || $bp->current_component == $bp->blogs->slug && empty( $bp->current_action ) ) ) {
 		$bp->is_directory = true;
 
 		do_action( 'bp_blogs_directory_blogs_setup' );
Index: bp-forums.php
===================================================================
--- bp-forums.php	(revision 3437)
+++ bp-forums.php	(working copy)
@@ -44,7 +44,7 @@
 function bp_forums_directory_forums_setup() {
 	global $bp;
 
-	if ( $bp->current_component == $bp->forums->slug ) {
+	if ( bp_forums_is_installed_correctly() && is_front_page() && bp_is_component_front_page( $bp->forums->slug ) || $bp->current_component == $bp->forums->slug ) {
 		if ( (int) $bp->site_options['bp-disable-forum-directory'] || !bp_is_active( 'groups' ) )
 			return false;
 
Index: bp-groups.php
===================================================================
--- bp-groups.php	(revision 3437)
+++ bp-groups.php	(working copy)
@@ -156,7 +156,7 @@
 function groups_directory_groups_setup() {
 	global $bp;
 
-	if ( $bp->current_component == $bp->groups->slug && empty( $bp->current_action ) && empty( $bp->current_item ) ) {
+	if ( is_front_page() && bp_is_component_front_page( $bp->groups->slug ) || $bp->current_component == $bp->groups->slug && empty( $bp->current_action ) && empty( $bp->current_item ) ) {
 		$bp->is_directory = true;
 
 		do_action( 'groups_directory_groups_setup' );
Index: bp-core.php
===================================================================
--- bp-core.php	(revision 3437)
+++ bp-core.php	(working copy)
@@ -399,7 +399,7 @@
 function bp_core_action_directory_members() {
 	global $bp;
 
-	if ( is_null( $bp->displayed_user->id ) && $bp->current_component == $bp->members->slug ) {
+	if ( is_front_page() && bp_is_component_front_page( $bp->members->slug ) || is_null( $bp->displayed_user->id ) && $bp->current_component == $bp->members->slug ) {
 		$bp->is_directory = true;
 
 		do_action( 'bp_core_action_directory_members' );
