diff --git src/bp-members/admin/css/admin-rtl.css src/bp-members/admin/css/admin-rtl.css
index 3b11ec412..d5f4175de 100644
--- src/bp-members/admin/css/admin-rtl.css
+++ src/bp-members/admin/css/admin-rtl.css
@@ -21,6 +21,10 @@ div#community-profile-page #profile-nav {
 	margin-bottom: 1em;
 }
 
+div#community-profile-page #bp-members-profile-member-type {
+	width: 100%;
+}
+
 #bp_members_admin_user_stats ul {
 	margin-bottom: 0;
 }
diff --git src/bp-members/admin/css/admin.css src/bp-members/admin/css/admin.css
index ff65e5aa3..01f38f31a 100644
--- src/bp-members/admin/css/admin.css
+++ src/bp-members/admin/css/admin.css
@@ -21,6 +21,10 @@ div#community-profile-page #profile-nav {
 	margin-bottom: 1em;
 }
 
+div#community-profile-page #bp-members-profile-member-type {
+	width: 100%;
+}
+
 #bp_members_admin_user_stats ul {
 	margin-bottom: 0;
 }
diff --git src/bp-members/bp-members-functions.php src/bp-members/bp-members-functions.php
index c55e942c6..88a81b2da 100644
--- src/bp-members/bp-members-functions.php
+++ src/bp-members/bp-members-functions.php
@@ -2993,17 +2993,25 @@ add_action( bp_get_member_type_tax_name() . '_add_form', 'bp_insert_member_types
  * Set type for a member.
  *
  * @since 2.2.0
+ * @since 7.0.0 $member_type parameter also accepts an array of member type names.
  *
- * @param int    $user_id     ID of the user.
- * @param string $member_type Member type.
- * @param bool   $append      Optional. True to append this to existing types for user,
- *                            false to replace. Default: false.
+ * @param int          $user_id     ID of the user.
+ * @param string|array $member_type The member type name or an array of member type names.
+ * @param bool         $append      Optional. True to append this to existing types for user,
+ *                                  false to replace. Default: false.
  * @return false|array $retval See {@see bp_set_object_terms()}.
  */
 function bp_set_member_type( $user_id, $member_type, $append = false ) {
 	// Pass an empty $member_type to remove a user's type.
-	if ( ! empty( $member_type ) && ! bp_get_member_type_object( $member_type ) ) {
-		return false;
+	if ( ! empty( $member_type ) ) {
+		$member_types = (array) $member_type;
+		$valid_types  = array_filter( array_map( 'bp_get_member_type_object', $member_types ) );
+
+		if ( $valid_types ) {
+			$member_type = wp_list_pluck( $valid_types, 'name' );
+		} else {
+			return false;
+		}
 	}
 
 	$retval = bp_set_object_terms( $user_id, $member_type, bp_get_member_type_tax_name(), $append );
@@ -3017,9 +3025,9 @@ function bp_set_member_type( $user_id, $member_type, $append = false ) {
 		 *
 		 * @since 2.2.0
 		 *
-		 * @param int    $user_id     ID of the user whose member type has been updated.
-		 * @param string $member_type Member type.
-		 * @param bool   $append      Whether the type is being appended to existing types.
+		 * @param int          $user_id     ID of the user whose member type has been updated.
+		 * @param string|array $member_type The member type name or an array of member type names.
+		 * @param bool         $append      Whether the type is being appended to existing types.
 		 */
 		do_action( 'bp_set_member_type', $user_id, $member_type, $append );
 	}
@@ -3122,9 +3130,9 @@ function bp_get_member_type( $user_id, $single = true, $use_db = true ) {
 	 *
 	 * @since 2.2.0
 	 *
-	 * @param string $type    Member type.
-	 * @param int    $user_id ID of the user.
-	 * @param bool   $single  Whether to return a single type string, or an array.
+	 * @param string|array|bool $type    Member type.
+	 * @param int               $user_id ID of the user.
+	 * @param bool              $single  Whether to return a single type string, or an array.
 	 */
 	return apply_filters( 'bp_get_member_type', $type, $user_id, $single );
 }
diff --git src/bp-members/classes/class-bp-members-admin.php src/bp-members/classes/class-bp-members-admin.php
index d344b5d7c..ff0a60d3b 100644
--- src/bp-members/classes/class-bp-members-admin.php
+++ src/bp-members/classes/class-bp-members-admin.php
@@ -1286,26 +1286,29 @@ class BP_Members_Admin {
 			return;
 		}
 
-		$types = bp_get_member_types( array(), 'objects' );
-		$current_type = bp_get_member_type( $user->ID );
+		$types        = bp_get_member_types( array(), 'objects' );
+		$current_type = bp_get_member_type( $user->ID, false );
 		?>
 
-		<label for="bp-members-profile-member-type" class="screen-reader-text"><?php
+		<label for="bp-members-profile-member-type" class="screen-reader-text">
+			<?php
 			/* translators: accessibility text */
 			esc_html_e( 'Select member type', 'buddypress' );
-		?></label>
-		<select name="bp-members-profile-member-type" id="bp-members-profile-member-type">
-			<option value="" <?php selected( '', $current_type ); ?>><?php
-				/* translators: no option picked in select box */
-				esc_attr_e( '----', 'buddypress' );
-			?></option>
+			?>
+		</label>
+		<select name="bp-members-profile-member-type[]" id="bp-members-profile-member-type" multiple="multiple">
+			<option value="" <?php selected( ! $current_type ); ?>>
+				<?php
+					/* translators: no option picked in select box */
+					esc_attr_e( '----', 'buddypress' );
+				?>
+			</option>
 			<?php foreach ( $types as $type ) : ?>
-				<option value="<?php echo esc_attr( $type->name ) ?>" <?php selected( $type->name, $current_type ) ?>><?php echo esc_html( $type->labels['singular_name'] ) ?></option>
+				<option value="<?php echo esc_attr( $type->name ) ?>" <?php selected( in_array( $type->name, (array) $current_type, true ) ) ?>><?php echo esc_html( $type->labels['singular_name'] ) ?></option>
 			<?php endforeach; ?>
 		</select>
 
 		<?php
-
 		wp_nonce_field( 'bp-member-type-change-' . $user->ID, 'bp-member-type-nonce' );
 	}
 
@@ -1328,11 +1331,9 @@ class BP_Members_Admin {
 			return;
 		}
 
-		// Member type string must either reference a valid member type, or be empty.
-		$member_type = stripslashes( $_POST['bp-members-profile-member-type'] );
-		if ( ! empty( $member_type ) && ! bp_get_member_type_object( $member_type ) ) {
-			return;
-		}
+		// Member type [string] must either reference a valid member type, or be empty.
+		$member_type = wp_parse_slug_list( wp_unslash( $_POST['bp-members-profile-member-type'] ) );
+		$member_type = array_filter( $member_type );
 
 		/*
 		 * If an invalid member type is passed, someone's doing something
@@ -2387,25 +2388,22 @@ class BP_Members_Admin {
 			foreach ( (array) $_REQUEST['users'] as $user_id ) {
 				$user_id = (int) $user_id;
 
-				// Get the old member type to check against.
-				$member_type = bp_get_member_type( $user_id );
+				// Get the old member types to check against.
+				$current_types = bp_get_member_type( $user_id, false );
 
-				if ( 'remove_member_type' === $new_type ) {
-					// Remove the current member type, if there's one to remove.
-					if ( $member_type ) {
-						$removed = bp_remove_member_type( $user_id, $member_type );
-						if ( false === $removed || is_wp_error( $removed ) ) {
-							$error = true;
-						}
-					}
-				} else {
+				if ( $current_types && 'remove_member_type' === $new_type ) {
+					$member_types = array();
+				} elseif ( 1 !== count( $current_types ) || $new_type !== $current_types[0] ) {
 					// Set the new member type.
-					if ( $new_type !== $member_type ) {
-						$set = bp_set_member_type( $user_id, $new_type );
-						if ( false === $set || is_wp_error( $set ) ) {
-							$error = true;
-						}
+					$member_types = array( $new_type );
+				}
+
+				if ( isset( $member_types ) ) {
+					$set = bp_set_member_type( $user_id, $member_types );
+					if ( false === $set || is_wp_error( $set ) ) {
+						$error = true;
 					}
+					unset( $member_types );
 				}
 			}
 		}
@@ -2477,12 +2475,26 @@ class BP_Members_Admin {
 		}
 
 		// Get the member type.
-		$type = bp_get_member_type( $user_id );
+		$member_type = bp_get_member_type( $user_id, false );
+
+		// Build the Output.
+		if ( $member_type ) {
+			$member_types = array_filter( array_map( 'bp_get_member_type_object', $member_type ) );
+			if ( ! $member_types ) {
+				return $retval;
+			}
+
+			$type_links = array();
+			foreach ( $member_types as $type ) {
+				$url          = add_query_arg( array( 'bp-member-type' => urlencode( $type->name ) ) );
+				$type_links[] = sprintf(
+					'<a href="%1$s">%2$s</a>',
+					esc_url( $url ),
+					esc_html( $type->labels['singular_name'] )
+				);
+			}
 
-		// Output the
-		if ( $type_obj = bp_get_member_type_object( $type ) ) {
-			$url = add_query_arg( array( 'bp-member-type' => urlencode( $type ) ) );
-			$retval = '<a href="' . esc_url( $url ) . '">' . esc_html( $type_obj->labels['singular_name'] ) . '</a>';
+			$retval = implode( ', ', $type_links );
 		}
 
 		return $retval;
