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
@@ -170,7 +170,13 @@
 	var $total_member_count;
 
 	function __construct( $type, $page_number, $per_page, $max, $user_id, $search_terms, $include, $populate_extras, $exclude, $meta_key, $meta_value, $page_arg = 'upage' ) {
+		global $members_template;
 
+		// Setup the main query
+		if ( empty( $members_template ) ) {
+			$this->set_main_query();
+		}
+
 		$this->pag_page = !empty( $_REQUEST[$page_arg] ) ? intval( $_REQUEST[$page_arg] ) : (int) $page_number;
 		$this->pag_num  = !empty( $_REQUEST['num'] )   ? intval( $_REQUEST['num'] )   : (int) $per_page;
 		$this->type     = $type;
@@ -253,8 +259,92 @@
 		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 );
+	}
+
+	/** 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)
+	 */
+	public static function set_main_query( $members_query ) {
+		$bp = buddypress();
+
+		// Bail if no members component (how did this happen)
+		if ( empty( $bp->members->id ) ) {
+			return;
+		}
+
+		// Set the main query
+		$bp->main_queries[ $bp->members->id ] = $members_query;
+	}
+
+	/**
+	 *
+	 * @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;
 
