Index: src/bp-members/bp-members-admin.php
--- src/bp-members/bp-members-admin.php
+++ src/bp-members/bp-members-admin.php
@@ -760,8 +760,7 @@
 			);
 
 			// Member Type metabox. Only added if member types have been registered.
-			$member_types = bp_get_member_types();
-			if ( ! empty( $member_types ) ) {
+			if ( bp_get_member_types() ) {
 				add_meta_box(
 					'bp_members_admin_member_type',
 					_x( 'Member Type', 'members user-admin edit screen', 'buddypress' ),
@@ -1090,9 +1089,8 @@
 			return;
 		}
 
-		$types = bp_get_member_types( array(), 'objects' );
-		$current_type = bp_get_member_type( $user->ID );
-		?>
+		$types        = bp_get_member_types();
+		$current_type = bp_get_member_type( $user->ID ); ?>
 
 		<select name="bp-members-profile-member-type">
 			<option value="" <?php selected( '', $current_type ); ?>><?php /* translators: no option picked in select box */ esc_attr_e( '----', 'buddypress' ) ?></option>
Index: src/bp-members/bp-members-functions.php
--- src/bp-members/bp-members-functions.php
+++ src/bp-members/bp-members-functions.php
@@ -2479,19 +2479,21 @@
 		'labels' => array(),
 	), 'register_member_type' );
 
-	$type = (object) $r;
-
 	// Store the post type name as data in the object (not just as the array key).
-	$type->name = $member_type;
+	$r['name'] = $member_type;
 
 	// Make sure the relevant labels have been filled in.
-	$default_name = isset( $r['labels']['name'] ) ? $r['labels']['name'] : ucfirst( $type->name );
-	$r['labels'] = array_merge( array(
+	$default_name = isset( $r['labels']['name'] )
+		? $r['labels']['name']
+		: ucfirst( $r['name'] );
+
+	$r['labels']  = array_merge( array(
 		'name'          => $default_name,
 		'singular_name' => $default_name,
 	), $r['labels'] );
 
-	$bp->members->types[ $member_type ] = $type;
+	// Add the member type
+	$bp->members->types[ $member_type ] = $type = (object) $r;
 
 	/**
 	 * Fires after a member type is registered.
@@ -2511,13 +2513,13 @@
  *
  * @since BuddyPress (2.2.0)
  *
- * @param  string $post_type The name of the member type.
+ * @param  string $member_type The name of the member type.
  * @return object A member type object.
  */
 function bp_get_member_type_object( $member_type ) {
-	$types = bp_get_member_types( array(), 'objects' );
+	$types = bp_get_member_types();
 
-	if ( empty( $types[ $member_type ] ) ) {
+	if ( ! isset( $types[ $member_type ] ) ) {
 		return null;
 	}
 
@@ -2530,42 +2532,44 @@
  * @since BuddyPress (2.2.0)
  *
  * @see bp_register_member_type() for accepted arguments.
- *
- * @param array|string $args     Optional. An array of key => value arguments to match against
- *                               the member type objects. Default empty array.
- * @param string       $output   Optional. The type of output to return. Accepts 'names'
- *                               or 'objects'. Default 'names'.
- * @param string       $operator Optional. The logical operation to perform. 'or' means only one
- *                               element from the array needs to match; 'and' means all elements
- *                               must match. Accepts 'or' or 'and'. Default 'and'.
  * @return array A list of member type names or objects.
  */
-function bp_get_member_types( $args = array(), $output = 'names', $operator = 'and' ) {
+function bp_get_member_types() {
+
+	// Get member types objects
 	$types = buddypress()->members->types;
 
-	$field = 'names' == $output ? 'name' : false;
-
-	$types = wp_filter_object_list( $types, $args, $operator );
-
 	/**
 	 * Filters the array of member type objects.
 	 *
-	 * This filter is run before the $output filter has been applied, so that
-	 * filtering functions have access to the entire member type objects.
-	 *
 	 * @since BuddyPress (2.2.0)
 	 *
-	 * @param array  $types     Member type objects, keyed by name.
-	 * @param array  $args      Array of key=>value arguments for filtering.
-	 * @param string $operator  'or' to match any of $args, 'and' to require all.
+	 * @param array $types Member type objects, keyed by name.
 	 */
-	$types = apply_filters( 'bp_get_member_types', $types, $args, $operator );
+	return apply_filters( 'bp_get_member_types', $types );
+}
 
-	if ( 'names' === $output ) {
-		$types = wp_list_pluck( $types, 'name' );
-	}
+/**
+ * Get a filtered list of all registered member type objects.
+ *
+ * @since BuddyPress (2.2.0)
+ *
+ * @see bp_register_member_type() for accepted arguments.
+ *
+ * @param array|string $args     Optional. An array of key => value arguments to match against
+ *                               the member type objects. Default empty array.
+ * @param string       $operator Optional. The logical operation to perform. 'or' means only one
+ *                               element from the array needs to match; 'and' means all elements
+ *                               must match. Accepts 'or' or 'and'. Default 'and'.
+ * @param string       $field    Optional. The type of output to return. Accepts 'names'
+ *                               or 'objects'. Default 'names'.
+ * @return array A list of member type names or objects.
+ */
+function bp_filter_member_types( $args = array(), $operator = 'and', $field = false ) {
+	$types = bp_get_member_types();
 
-	return $types;
+	// Filter type objects based on passed parameters
+	return wp_filter_object_list( $types, $args, $operator, $field );	
 }
 
 /**
