Index: bp-core/bp-core-widgets.php
--- bp-core/bp-core-widgets.php
+++ bp-core/bp-core-widgets.php
@@ -100,8 +100,10 @@
 
 		<?php endif; ?>
 
-		<?php echo $after_widget; ?>
-	<?php
+		<?php echo $after_widget;
+
+		// Reset the members query
+		bp_reset_members_query();
 	}
 
 	function update( $new_instance, $old_instance ) {
@@ -189,8 +191,10 @@
 
 		<?php endif; ?>
 
-		<?php echo $after_widget; ?>
-	<?php
+		<?php echo $after_widget;
+
+		// Reset the members query
+		bp_reset_members_query();
 	}
 
 	function update( $new_instance, $old_instance ) {
@@ -258,8 +262,10 @@
 
 		<?php endif; ?>
 
-		<?php echo $after_widget; ?>
-	<?php
+		<?php echo $after_widget;
+
+		// Reset the members query
+		bp_reset_members_query();
 	}
 
 	function update( $new_instance, $old_instance ) {
Index: bp-loader.php
--- bp-loader.php
+++ bp-loader.php
@@ -96,6 +96,11 @@
 	 */
 	public $active_components = array();
 
+	/**
+	 * @var array Main query loops (akin to $wp_the_query)
+	 */
+	public $main_queries = array();
+
 	/** Option Overload *******************************************************/
 
 	/**
Index: bp-members/bp-members-template.php
--- bp-members/bp-members-template.php
+++ bp-members/bp-members-template.php
@@ -253,8 +253,97 @@
 		if ( 0 == $this->current_member )
 			do_action( 'member_loop_start' );
 	}
+
+	/**
+	 * Is this the main members query?
+	 *
+	 * @since BuddyPress (1.9)
+	 *
+	 * @return boolean
+	 */
+	public function is_main_query() {
+		return (bool) ( self::get_main_query() === $this );
+	}
+
+	/**
+	 * @since BuddyPress (1.9)
+	 */
+	public function set_main_query( $members_query = '' ) {
+		$bp = buddypress();
+
+		// Bail if no members component (how did this happen)
+		if ( empty( $bp->members->id ) ) {
+			return;
+		}
+
+		// Use the current object if no query passed
+		if ( empty( $members_query ) ) {
+			$members_query = $this;
+		}
+
+		// Set the main query
+		$bp->main_queries[ $bp->members->id ] = $members_query;
+	}
+
+	/** Static Methods ********************************************************/
+
+	/**
+	 * @since BuddyPress (1.9)
+	 */
+	public static function get_main_query() {
+		$bp = buddypress();
+
+		// Bail if no members component (how did this happen)
+		if ( empty( $bp->members->id ) ) {
+			return false;
+		}
+
+		// Bail if no main query already set
+		if ( empty( $bp->main_queries[ $bp->members->id ] ) ) {
+			return false;
+		}
+
+		// Get and return the main members query
+		return $bp->main_queries[ $bp->members->id ];
+	}
+
+	/**
+	 *
+	 * @since BuddyPress (1.9)
+	 * @global type $members_template
+	 */
+	public static function reset_query() {
+		global $members_template;
+
+		$main_query = self::get_main_query();
+
+		if ( false !== $main_query ) {
+			$members_template = $main_query;
+		} else {
+			unset( $members_template );
+		}
+	}
 }
 
+/**
+ * Destroy the previous members query and set up a new members query.
+ *
+ * This should be used after {@link bp_has_members()} and before another {@link
+ * bp_has_members()}. This will remove obscure bugs that occur when the previous
+ * BP_Core_Members_Template object is not destroyed properly before another is
+ * set up. (This is akin to wp_reset_query() in WordPress core.)
+ *
+ * @since BuddyPress (1.9)
+ *
+ * @uses $members_template
+ * @uses BP_Core_Members_Template::reset_query()
+ */
+function bp_reset_members_query() {
+	global $members_template;
+
+	$members_template->reset_query();
+}
+
 function bp_rewind_members() {
 	global $members_template;
 
@@ -315,7 +404,20 @@
 	if ( !empty( $max ) && ( $per_page > $max ) )
 		$per_page = $max;
 
-	$members_template = new BP_Core_Members_Template( $type, $page, $per_page, $max, $user_id, $search_terms, $include, (bool)$populate_extras, $exclude, $meta_key, $meta_value, $page_arg );
+	// Query for members
+	$members_query = new BP_Core_Members_Template( $type, $page, $per_page, $max, $user_id, $search_terms, $include, (bool)$populate_extras, $exclude, $meta_key, $meta_value, $page_arg );
+
+	// Setup the main query
+	if ( empty( $members_template ) ) {
+		$members_query->set_main_query();
+	}
+
+	// Setup the members template with the most recent query
+	$members_template = $members_query;
+
+	// Clean up
+	unset( $members_query );
+
 	return apply_filters( 'bp_has_members', $members_template->has_members(), $members_template );
 }
 
