diff --git src/bp-templates/bp-legacy/buddypress/members/single/profile/edit.php src/bp-templates/bp-legacy/buddypress/members/single/profile/edit.php
index 029f669..7fe800f 100644
--- src/bp-templates/bp-legacy/buddypress/members/single/profile/edit.php
+++ src/bp-templates/bp-legacy/buddypress/members/single/profile/edit.php
@@ -63,7 +63,7 @@ if ( bp_has_profile( 'profile_group_id=' . bp_get_current_profile_group_id() ) )
 		<input type="submit" name="profile-group-edit-submit" id="profile-group-edit-submit" value="<?php esc_attr_e( 'Save Changes', 'buddypress' ); ?> " />
 	</div>
 
-	<input type="hidden" name="field_ids" id="field_ids" value="<?php bp_the_profile_group_field_ids(); ?>" />
+	<input type="hidden" name="field_ids" id="field_ids" value="<?php bp_the_profile_field_ids(); ?>" />
 
 	<?php wp_nonce_field( 'bp_xprofile_edit' ); ?>
 
diff --git src/bp-templates/bp-legacy/buddypress/members/single/settings/profile.php src/bp-templates/bp-legacy/buddypress/members/single/settings/profile.php
index 4e5f1b2..0fdae6f 100644
--- src/bp-templates/bp-legacy/buddypress/members/single/settings/profile.php
+++ src/bp-templates/bp-legacy/buddypress/members/single/settings/profile.php
@@ -46,7 +46,7 @@
 
 	<?php wp_nonce_field( 'bp_xprofile_settings' ); ?>
 
-	<input type="hidden" name="field_ids" id="field_ids" value="<?php bp_the_profile_group_field_ids(); ?>" />
+	<input type="hidden" name="field_ids" id="field_ids" value="<?php bp_the_profile_field_ids(); ?>" />
 
 </form>
 
diff --git src/bp-xprofile/bp-xprofile-actions.php src/bp-xprofile/bp-xprofile-actions.php
index b361ca9..d45211e 100644
--- src/bp-xprofile/bp-xprofile-actions.php
+++ src/bp-xprofile/bp-xprofile-actions.php
@@ -85,6 +85,17 @@ function bp_xprofile_action_settings() {
 		// Get the POST'ed field ID's
 		$posted_field_ids = explode( ',', $_POST['field_ids'] );
 
+		// Backward compatibility: a bug in BP 2.0 caused only a single
+		// group's field IDs to be submitted. Look for values submitted
+		// in the POST request that may not appear in 'field_ids', and
+		// add them to the list of IDs to save.
+		foreach ( $_POST as $posted_key => $posted_value ) {
+			preg_match( '/^field_([0-9]+)_visibility$/', $posted_key, $matches );
+			if ( ! empty( $matches[1] ) && ! in_array( $matches[1], $posted_field_ids ) ) {
+				$posted_field_ids[] = $matches[1];
+			}
+		}
+
 		// Save the visibility settings
 		foreach ( $posted_field_ids as $field_id ) {
 
diff --git src/bp-xprofile/bp-xprofile-template.php src/bp-xprofile/bp-xprofile-template.php
index a95f90d..e62e739 100644
--- src/bp-xprofile/bp-xprofile-template.php
+++ src/bp-xprofile/bp-xprofile-template.php
@@ -314,6 +314,34 @@ function bp_the_profile_group_field_ids() {
 		return substr( $field_ids, 0, -1 );
 	}
 
+/**
+ * Output a comma-separated list of field IDs that are to be submitted on profile edit.
+ *
+ * @since BuddyPress (2.1.0)
+ */
+function bp_the_profile_field_ids() {
+	echo bp_get_the_profile_field_ids();
+}
+	/**
+	 * Generate a comma-separated list of field IDs that are to be submitted on profile edit.
+	 *
+	 * @since BuddyPress (2.1.0)
+	 *
+	 * @return string
+	 */
+	function bp_get_the_profile_field_ids() {
+		global $profile_template;
+
+		$field_ids = array();
+		foreach ( $profile_template->groups as $group ) {
+			$field_ids = array_merge( $field_ids, wp_list_pluck( $group->fields, 'id' ) );
+		}
+
+		$field_ids = implode( ',', wp_parse_id_list( $field_ids ) );
+
+		return apply_filters( 'bp_get_tthe_profile_field_ids', $field_ids );
+	}
+
 function bp_profile_fields() {
 	global $profile_template;
 	return $profile_template->profile_fields();
