Index: bp-xprofile/bp-xprofile-functions.php
===================================================================
--- bp-xprofile/bp-xprofile-functions.php	(revision 7056)
+++ bp-xprofile/bp-xprofile-functions.php	(working copy)
@@ -199,7 +199,7 @@
  * @param $value The value for the field you want to set for the user.
  * @global BuddyPress $bp The one true BuddyPress instance
  * @uses xprofile_get_field_id_from_name() Gets the ID for the field based on the name.
- * @return true on success, false on failure.
+ * @return true on success, WP_Error on failure.
  */
 function xprofile_set_field_data( $field, $user_id, $value, $is_required = false ) {
 
@@ -209,10 +209,10 @@
 		$field_id = xprofile_get_field_id_from_name( $field );
 
 	if ( empty( $field_id ) )
-		return false;
+		return new WP_Error( 'empty_field_id', __( 'Could not find profile field ID given field name', 'buddypress' ) );
 
 	if ( $is_required && ( empty( $value ) || !is_array( $value ) && !strlen( trim( $value ) ) ) )
-		return false;
+		return new WP_Error( 'empty_required_field', __( 'Required field must have a value', 'buddypress' ) );
 
 	$field = new BP_XProfile_Field( $field_id );
 
@@ -243,15 +243,15 @@
 			$value = array_merge( array(), $value );
 		} else {
 			if ( !in_array( $value, $possible_values ) ) {
-				return false;
+				return new WP_Error( 'value_not_in_possible_values', __( 'Field value entered is not in possible values', 'buddypress' ) );
 			}
 		}
 	}
 
-	$field           = new BP_XProfile_ProfileData();
-	$field->field_id = $field_id;
-	$field->user_id  = $user_id;
-	$field->value    = maybe_serialize( $value );
+	$field = new BP_XProfile_ProfileData( $field_id, $user_id );
+	if ( $field->exists() && $value == $field->value )
+		return new WP_Error( 'same_value', __( 'Field value entered is the same as the current value', 'buddypress' ) );
+	$field->value = maybe_serialize( $value );
 
 	return $field->save();
 }
Index: bp-xprofile/bp-xprofile-classes.php
===================================================================
--- bp-xprofile/bp-xprofile-classes.php	(revision 7056)
+++ bp-xprofile/bp-xprofile-classes.php	(working copy)
@@ -1030,6 +1030,15 @@
 		return apply_filters_ref_array( 'xprofile_data_is_valid_field', array( (bool)$retval, $this ) );
 	}
 
+	/**
+	 * save()
+	 *
+	 * Save the profile field data to the database.
+	 *
+	 * @global object $wpdb
+	 * @global object $bp
+	 * @return true on success, WP_Error on failure
+	 */
 	function save() {
 		global $wpdb, $bp;
 
@@ -1054,14 +1063,20 @@
 			}
 
 			if ( false === $result )
-				return false;
+				return new WP_Error( 'db_error', __( 'Could not update or insert profile data into the database', 'buddypress' ), $wpdb->last_error );
 
 			do_action_ref_array( 'xprofile_data_after_save', array( $this ) );
 
+			if ( bp_is_active( 'activity' ) ) {
+				$field = new BP_XProfile_Field( $this->id, $this->user_id, false );
+				bp_activity_add( array( 'action' => sprintf( __( '%s edited %s on their profile', 'buddypress' ), bp_core_get_userlink( $this->user_id ), $field->name ),
+					'component' => 'xprofile', 'primary_link' => bp_loggedin_user_domain() . BP_XPROFILE_SLUG, 'type' => 'profile_updated', 'item_id' => $this->id ) );
+			}
+
 			return true;
 		}
 
-		return false;
+		return new WP_Error( 'invalid_field', __( 'The field ID is invalid', 'buddypress' ) );
 	}
 
 	function delete() {
Index: bp-xprofile/bp-xprofile-screens.php
===================================================================
--- bp-xprofile/bp-xprofile-screens.php	(revision 7056)
+++ bp-xprofile/bp-xprofile-screens.php	(working copy)
@@ -111,9 +111,10 @@
 					$value = $_POST['field_' . $field_id];
 				}
 
-				if ( !xprofile_set_field_data( $field_id, bp_displayed_user_id(), $value, $is_required[$field_id] ) ) {
+				$saved = xprofile_set_field_data( $field_id, bp_displayed_user_id(), $value, $is_required[$field_id] );
+				if ( is_wp_error( $saved ) && $saved->get_error_code() != 'same_value' ) {
 					$errors = true;
-				} else {
+				} else if ( is_bool( $saved ) && $saved ) {
 					do_action( 'xprofile_profile_field_data_updated', $field_id, $value );
 				}
 
