diff --git a/bp-activity/bp-activity-functions.php b/bp-activity/bp-activity-functions.php
index 59ce01e..da96d81 100644
--- a/bp-activity/bp-activity-functions.php
+++ b/bp-activity/bp-activity-functions.php
@@ -291,16 +291,30 @@ function bp_activity_add_user_favorite( $activity_id, $user_id = 0 ) {
 		$user_id = bp_loggedin_user_id();
 
 	// Update the user's personal favorites
-	$my_favs   = bp_get_user_meta( bp_loggedin_user_id(), 'bp_favorite_activities', true );
-	$my_favs[] = $activity_id;
-
-	// Update the total number of users who have favorited this activity
-	$fav_count = bp_activity_get_meta( $activity_id, 'favorite_count' );
-	$fav_count = !empty( $fav_count ) ? (int) $fav_count + 1 : 1;
+	$my_favs = bp_get_user_meta( bp_loggedin_user_id(), 'bp_favorite_activities', true );
+	if ( !$my_favs ) {
+		$my_favs = array();
+	}
 
-	// Update user meta
+	if ( !in_array( $activity_id, $my_favs ) ) {
+		$my_favs[] = $activity_id;
+	}
 	bp_update_user_meta( bp_loggedin_user_id(), 'bp_favorite_activities', $my_favs );
 
+	// Update the users that favorited this activity
+        $fav_users = bp_activity_get_meta( $activity_id, 'favorited_users');
+	if ( !$fav_users ) {
+		$fav_users = array();
+	}
+
+	if ( !in_array( $user_id, $fav_users ) ) {
+		$fav_users[] = $user_id;
+	}
+        bp_activity_update_meta( $activity_id, 'favorited_users', $fav_users );
+
+	// Update the total number of users who have favorited this activity
+	$fav_count = count( $fav_users );
+
 	// Update activity meta counts
 	if ( true === bp_activity_update_meta( $activity_id, 'favorite_count', $fav_count ) ) {
 
@@ -351,37 +365,47 @@ function bp_activity_remove_user_favorite( $activity_id, $user_id = 0 ) {
 	$my_favs = array_flip( (array) $my_favs );
 	unset( $my_favs[$activity_id] );
 	$my_favs = array_unique( array_flip( $my_favs ) );
+	bp_update_user_meta( $user_id, 'bp_favorite_activities', $my_favs );
 
-	// Update the total number of users who have favorited this activity
-	if ( $fav_count = bp_activity_get_meta( $activity_id, 'favorite_count' ) ) {
-
-		// Deduct from total favorites
-		if ( bp_activity_update_meta( $activity_id, 'favorite_count', (int) $fav_count - 1 ) ) {
+	// Remove the user from the list of those who have favorited this activity
+	$fav_users = bp_activity_get_meta( $activity_id, 'favorited_users' );
+	$fav_users = array_flip( (array) $fav_users );
+	unset( $my_favs[$activity_id] );
+	$fav_users = array_unique( array_flip( $fav_users ) );
+	bp_activity_update_meta( $activity_id, 'favorited_users', $fav_users );
 
-			// Update users favorites
-			if ( bp_update_user_meta( $user_id, 'bp_favorite_activities', $my_favs ) ) {
+	// Update the total number of users who have favorited this activity
+	$fav_count = count( $fav_users );
+	bp_activity_update_meta( $activity_id, 'favorite_count', $fav_count );
 
-				// Execute additional code
-				do_action( 'bp_activity_remove_user_favorite', $activity_id, $user_id );
+	// Execute additional code
+	do_action( 'bp_activity_remove_user_favorite', $activity_id, $user_id );
 
-				// Success
-				return true;
+	return true;
+}
 
-			// Error updating
-			} else {
-				return false;
-			}
+/**
+ * When an activity item is deleted, delete it from all lists of user favorites
+ *
+ * @since BuddyPress (1.7)
+ */
+function bp_activity_favorite_deleted( $args ) {
+	if ( isset( $args['id'] ) ) {
+		$activity_id = $args['id'];
+	}
 
-		// Error updating favorite count
-		} else {
-			return false;
+	if ( !empty( $activity_id ) ) {
+		$fav_users = bp_activity_get_meta( $activity_id, 'favorited_users' );
+		foreach( (array) $fav_users as $user_id ) {
+			$user_favs = bp_get_user_meta( $user_id, 'bp_favorite_activities', true );
+			$user_favs = array_flip( $user_favs );
+			unset( $user_favs[$activity_id] );
+			$user_favs = array_flip( $user_favs );
+			bp_update_user_meta( $user_id, 'bp_favorite_activities', $user_favs );
 		}
-
-	// Error getting favorite count
-	} else {
-		return false;
 	}
 }
+add_action( 'bp_activity_delete', 'bp_activity_favorite_deleted' );
 
 /**
  * Check if activity exists by scanning content
