Index: bp-core/bp-core-classes.php
===================================================================
--- bp-core/bp-core-classes.php	(revision 4336)
+++ bp-core/bp-core-classes.php	(working copy)
@@ -109,7 +109,7 @@ class BP_Core_User {
 
 	/** Static Functions ******************************************************/
 
-	function get_users( $type, $limit = 0, $page = 1, $user_id = 0, $include = false, $search_terms = false, $populate_extras = true, $exclude = false ) {
+	function get_users( $type, $limit = 0, $page = 1, $user_id = 0, $include = false, $search_terms = false, $populate_extras = true, $exclude = false, $meta_key = false, $meta_value = false ) {
 		global $wpdb, $bp;
 
 		$sql = array();
@@ -124,11 +124,21 @@ class BP_Core_User {
 
 		if ( 'alphabetical' == $type )
 			$sql['select_alpha'] = ", pd.value as fullname";
+		
+		if ( $meta_key ) {
+			$sql['select_meta'] = ", umm.meta_key";
+			
+			if ( $meta_value )
+				$sql['select_meta'] .= ", umm.meta_value";
+		}
 
 		$sql['from'] = "FROM " . CUSTOM_USER_TABLE . " u LEFT JOIN " . CUSTOM_USER_META_TABLE . " um ON um.user_id = u.ID";
 
 		if ( $search_terms && bp_is_active( 'xprofile' ) || 'alphabetical' == $type )
 			$sql['join_profiledata'] = "LEFT JOIN {$bp->profile->table_name_data} pd ON u.ID = pd.user_id";
+			
+		if ( $meta_key )
+			$sql['join_meta']	= "LEFT JOIN {$wpdb->usermeta} umm ON umm.user_id = u.ID";
 
 		$sql['where'] = 'WHERE ' . bp_core_get_status_sql( 'u.' );
 
@@ -174,6 +184,15 @@ class BP_Core_User {
 			$search_terms             = like_escape( $wpdb->escape( $search_terms ) );
 			$sql['where_searchterms'] = "AND pd.value LIKE '%%$search_terms%%'";
 		}
+		
+		if ( $meta_key ) {
+			$sql['where_meta']	= $wpdb->prepare( " AND umm.meta_key = %s", $meta_key );
+			
+			// If a meta value is provided, match it
+			if ( $meta_value ) {
+				$sql['where_meta'] .= $wpdb->prepare( " AND umm.meta_value = %s", $meta_value );
+			}
+		}
 
 		switch ( $type ) {
 			case 'active': case 'online': default:
Index: bp-members/bp-members-functions.php
===================================================================
--- bp-members/bp-members-functions.php	(revision 4336)
+++ bp-members/bp-members-functions.php	(working copy)
@@ -60,6 +60,8 @@ function bp_core_get_users( $args = '' ) {
 		'user_id'         => false,    // Pass a user_id to limit to only friend connections for this user
 		'exclude'         => false,    // Users to exclude from results
 		'search_terms'    => false,    // Limit to users that match these search terms
+		'meta_key'	  => false,    // Limit to users who have this piece of usermeta
+		'meta_value'	  => false,    // With meta_key, limit to users where usermeta matches this value
 
 		'include'         => false,    // Pass comma separated list of user_ids to limit to only these users
 		'per_page'        => 20,       // The number of results to return per page
@@ -70,7 +72,7 @@ function bp_core_get_users( $args = '' ) {
 	$params = wp_parse_args( $args, $defaults );
 	extract( $params, EXTR_SKIP );
 
-	return apply_filters( 'bp_core_get_users', BP_Core_User::get_users( $type, $per_page, $page, $user_id, $include, $search_terms, $populate_extras, $exclude ), $params );
+	return apply_filters( 'bp_core_get_users', BP_Core_User::get_users( $type, $per_page, $page, $user_id, $include, $search_terms, $populate_extras, $exclude, $meta_key, $meta_value ), $params );
 }
 
 /**
Index: bp-members/bp-members-template.php
===================================================================
--- bp-members/bp-members-template.php	(revision 4336)
+++ bp-members/bp-members-template.php	(working copy)
@@ -139,11 +139,11 @@ class BP_Core_Members_Template {
 	var $pag_links;
 	var $total_member_count;
 
-	function bp_core_members_template( $type, $page_number, $per_page, $max, $user_id, $search_terms, $include, $populate_extras, $exclude ) {
-		$this->__construct( $type, $page_number, $per_page, $max, $user_id, $search_terms, $include, $populate_extras, $exclude );
+	function bp_core_members_template( $type, $page_number, $per_page, $max, $user_id, $search_terms, $include, $populate_extras, $exclude, $meta_key, $meta_value ) {
+		$this->__construct( $type, $page_number, $per_page, $max, $user_id, $search_terms, $include, $populate_extras, $exclude, $meta_key, $meta_value );
 	}
 
-	function __construct( $type, $page_number, $per_page, $max, $user_id, $search_terms, $include, $populate_extras, $exclude ) {
+	function __construct( $type, $page_number, $per_page, $max, $user_id, $search_terms, $include, $populate_extras, $exclude, $meta_key, $meta_value ) {
 		global $bp;
 		
 		$this->pag_page  = !empty( $_REQUEST['upage'] ) ? intval( $_REQUEST['upage'] ) : (int)$page_number;
@@ -155,7 +155,7 @@ class BP_Core_Members_Template {
 		else if ( false !== $include )
 			$this->members = BP_Core_User::get_specific_users( $include, $this->pag_num, $this->pag_page, $populate_extras );
 		else
-			$this->members = bp_core_get_users( array( 'type' => $this->type, 'per_page' => $this->pag_num, 'page' => $this->pag_page, 'user_id' => $user_id, 'include' => $include, 'search_terms' => $search_terms, 'populate_extras' => $populate_extras, 'exclude' => $exclude ) );
+			$this->members = bp_core_get_users( array( 'type' => $this->type, 'per_page' => $this->pag_num, 'page' => $this->pag_page, 'user_id' => $user_id, 'include' => $include, 'search_terms' => $search_terms, 'populate_extras' => $populate_extras, 'exclude' => $exclude, 'meta_key' => $meta_key, 'meta_value' => $meta_value ) );
 
 		if ( !$max || $max >= (int)$this->members['total'] )
 			$this->total_member_count = (int)$this->members['total'];
@@ -267,6 +267,9 @@ function bp_has_members( $args = '' ) {
 
 		'user_id'         => $user_id,      // Pass a user_id to only show friends of this user
 		'search_terms'    => $search_terms, // Pass search_terms to filter users by their profile data
+		
+		'meta_key'	  => false,	    // Only return users with this usermeta
+		'meta_value'	  => false,	    // Only return users where the usermeta value matches. Requires meta_key
 
 		'populate_extras' => true           // Fetch usermeta? Friend count, last active etc.
 	);
@@ -290,7 +293,7 @@ function bp_has_members( $args = '' ) {
 	if ( empty( $include ) && bp_is_friends_component() && bp_is_current_action( 'requests' ) )
 		return false;
 
-	$members_template = new BP_Core_Members_Template( $type, $page, $per_page, $max, $user_id, $search_terms, $include, (bool)$populate_extras, $exclude );
+	$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 );
 	return apply_filters( 'bp_has_members', $members_template->has_members(), $members_template );
 }
 
