diff --git bp-groups/bp-groups-classes.php bp-groups/bp-groups-classes.php
index 401c3a3..09f26d4 100644
--- bp-groups/bp-groups-classes.php
+++ bp-groups/bp-groups-classes.php
@@ -965,6 +965,8 @@ class BP_Groups_Group {
  * @since BuddyPress (1.8)
  */
 class BP_Group_Member_Query extends BP_User_Query {
+	protected $group_member_ids;
+
 	/**
 	 * Set up action hooks
 	 *
@@ -978,6 +980,9 @@ class BP_Group_Member_Query extends BP_User_Query {
 			$this->query_vars_raw['type'] = 'last_modified';
 		}
 
+		// Set the sort order
+		add_action( 'bp_pre_user_query', array( $this, 'set_orderby' ) );
+
 		// Set up our populate_extras method
 		add_action( 'bp_user_query_populate_extras', array( $this, 'populate_group_member_extras' ), 10, 2 );
 	}
@@ -1028,6 +1033,10 @@ class BP_Group_Member_Query extends BP_User_Query {
 	protected function get_group_member_ids() {
 		global $wpdb;
 
+		if ( is_array( $this->group_member_ids ) ) {
+			return $this->group_member_ids;
+		}
+
 		$bp  = buddypress();
 		$sql = array(
 			'select'  => "SELECT user_id FROM {$bp->groups->table_name_members}",
@@ -1107,9 +1116,30 @@ class BP_Group_Member_Query extends BP_User_Query {
 
 		/** LIMIT clause ******************************************************/
 
-		$ids = $wpdb->get_col( "{$sql['select']} {$sql['where']} {$sql['orderby']} {$sql['order']} {$sql['limit']}" );
+		$this->group_member_ids = $wpdb->get_col( "{$sql['select']} {$sql['where']} {$sql['orderby']} {$sql['order']} {$sql['limit']}" );
 
-		return $ids;
+		return $this->group_member_ids;
+	}
+
+	/**
+	 * Tell BP_User_Query to order by the order of our query results
+	 *
+	 * This implementation assumes the 'last_modified' sort order
+	 * hardcoded in BP_Group_Member_Query::get_group_member_ids().
+	 *
+	 * @param object $query BP_User_Query object
+	 */
+	public function set_orderby( $query ) {
+		$gm_ids = $this->get_group_member_ids();
+		if ( empty( $gm_ids ) ) {
+			$gm_ids = array( 0 );
+		}
+
+		// The first param in the FIELD() clause is the sort column id
+		$gm_ids = array_merge( array( 'u.id' ), wp_parse_id_list( $gm_ids ) );
+		$gm_ids_sql = implode( ',', $gm_ids );
+
+		$query->uid_clauses['orderby'] = "ORDER BY FIELD(" . $gm_ids_sql . ")";
 	}
 
 	/**
diff --git tests/testcases/groups/template.php tests/testcases/groups/template.php
index ff617a6..b484600 100644
--- tests/testcases/groups/template.php
+++ tests/testcases/groups/template.php
@@ -351,4 +351,38 @@ class BP_Tests_Groups_Template extends BP_UnitTestCase {
 		$this->assertEquals( array( $u1, $u2, ), $ids );
 	}
 
+	/**
+	 * Default sort order should be the joined date
+	 *
+	 * @tickett BP5106
+	 * @group bp_group_has_members
+	 */
+	public function test_bp_group_has_members_default_order() {
+		$u1 = $this->create_user( array(
+			'last_activity' => gmdate( 'Y-m-d H:i:s', time() - 60 ),
+		) );
+		$u2 = $this->create_user( array(
+			'last_activity' => gmdate( 'Y-m-d H:i:s', time() - 600 ),
+		) );
+
+		$g = $this->factory->group->create();
+
+		$this->add_user_to_group( $u1, $g, array(
+			'date_modified' => gmdate( 'Y-m-d H:i:s', time() - 6000 ),
+		) );
+
+		$this->add_user_to_group( $u2, $g, array(
+			'date_modified' => gmdate( 'Y-m-d H:i:s', time() - 3000 ),
+		) );
+
+		global $members_template;
+		bp_group_has_members( array(
+			'group_id' => $g,
+			'exclude_banned' => 0,
+			'exclude_admins_mods' => false,
+		) );
+
+		$ids = wp_parse_id_list( wp_list_pluck( $members_template->members, 'user_id' ) );
+		$this->assertEquals( array( $u2, $u1, ), $ids );
+	}
 }
