Index: bp-xprofile/bp-xprofile-screens.php
===================================================================
--- bp-xprofile/bp-xprofile-screens.php	(revision 8629)
+++ bp-xprofile/bp-xprofile-screens.php	(working copy)
@@ -108,15 +108,7 @@
 				// Certain types of fields (checkboxes, multiselects) may come through empty. Save them as an empty array so that they don't get overwritten by the default on the next edit.
 				$value = isset( $_POST['field_' . $field_id] ) ? $_POST['field_' . $field_id] : '';
 
-				if ( !xprofile_set_field_data( $field_id, bp_displayed_user_id(), $value, $is_required[$field_id] ) ) {
-					$errors = true;
-				} else {
-					do_action( 'xprofile_profile_field_data_updated', $field_id, $value );
-				}
-
-				// Save the visibility level
 				$visibility_level = !empty( $_POST['field_' . $field_id . '_visibility'] ) ? $_POST['field_' . $field_id . '_visibility'] : 'public';
-				xprofile_set_field_visibility_level( $field_id, bp_displayed_user_id(), $visibility_level );
 
 				// Save the old and new values. They will be
 				// passed to the filter and used to determine
@@ -129,6 +121,15 @@
 					'value'      => $value,
 					'visibility' => $visibility_level,
 				);
+
+				if ( !xprofile_set_field_data( $field_id, bp_displayed_user_id(), $value, $is_required[$field_id] ) ) {
+					$errors = true;
+				} else {
+					do_action( 'xprofile_profile_field_data_updated', $field_id, $value );
+				}
+
+				// Save the visibility level
+				xprofile_set_field_visibility_level( $field_id, bp_displayed_user_id(), $visibility_level );
 			}
 
 			do_action( 'xprofile_updated_profile', bp_displayed_user_id(), $posted_field_ids, $errors, $old_values, $new_values );
