diff --git src/bp-activity/bp-activity-classes.php src/bp-activity/bp-activity-classes.php
index f1e6054..3bef7b4 100644
--- src/bp-activity/bp-activity-classes.php
+++ src/bp-activity/bp-activity-classes.php
@@ -337,6 +337,24 @@ class BP_Activity_Activity {
 			$where_conditions['search_sql'] = "a.content LIKE '%%" . esc_sql( like_escape( $search_terms ) ) . "%%'";
 		}
 
+		// User Favorites
+		if ( ! empty( $filter['action'] ) && 'user_favorites' == $filter['action'] ) {
+			$meta_query_args = array(
+					'key'     => 'user_favorites',
+					'compare' => 'EXISTS'
+			);
+
+			if ( ! empty( $filter['user_id'] ) ) {
+				$meta_query_args['compare'] = '=';
+				$meta_query_args['value'] = absint( $filter['user_id'] );
+				unset( $filter['user_id'] );
+			}
+
+			$meta_query = array( $meta_query_args );
+
+			unset( $filter['action'] );
+		}
+
 		// Filtering
 		if ( $filter && $filter_sql = BP_Activity_Activity::get_filter_sql( $filter ) )
 			$where_conditions['filter_sql'] = $filter_sql;
@@ -465,6 +483,9 @@ class BP_Activity_Activity {
 		// Generate action strings
 		$activities = BP_Activity_Activity::generate_action_strings( $activities );
 
+		// Append favorites
+		$activities = self::append_favorites( $activities );
+
 		// If $max is set, only return up to the max results
 		if ( !empty( $max ) ) {
 			if ( (int) $total_activities > (int) $max )
@@ -1105,6 +1126,26 @@ class BP_Activity_Activity {
 	}
 
 	/**
+	 * Append user who favorited activities.
+	 *
+	 * @since BuddyPress (2.1)
+	 *
+	 * @param array $activities Activities to fetch comments for.
+	 * @param bool $spam Optional. 'ham_only' (default), 'spam_only' or 'all'.
+	 * @return array The updated activities with nested comments.
+	 */
+	public static function append_favorites( $activities = array() ) {
+		$user_favorites = array();
+
+		// Now fetch the user who favorited matching activities.
+		foreach ( (array) $activities as $key => $activity ) {
+			$activities[$key]->user_favorites = bp_activity_get_meta( $activity->id, 'user_favorites', false );
+		}
+
+		return $activities;
+	}
+
+	/**
 	 * Get a list of components that have recorded activity associated with them.
 	 *
 	 * @param bool $skip_last_activity If true, components will not be
@@ -1283,10 +1324,12 @@ class BP_Activity_Activity {
 	 * @return int A count of the user's favorites.
 	 */
 	public static function total_favorite_count( $user_id ) {
-		if ( !$favorite_activity_entries = bp_get_user_meta( $user_id, 'bp_favorite_activities', true ) )
+		$favorite_activity_entries = self::get_activity_ids_by_meta( 'user_favorites', $user_id );
+		
+		if ( empty( $favorite_activity_entries ) )
 			return 0;
 
-		return count( maybe_unserialize( $favorite_activity_entries ) );
+		return count( $favorite_activity_entries );
 	}
 
 	/**
@@ -1312,6 +1355,43 @@ class BP_Activity_Activity {
 
 		return $wpdb->get_var( $wpdb->prepare( "UPDATE {$bp->activity->table_name} SET hide_sitewide = 1 WHERE user_id = %d", $user_id ) );
 	}
+
+	/**
+	 * Get an array of activity ids for given metadata.
+	 *
+	 * @since BuddyPress (2.1)
+	 * 
+	 * @param string $meta_key.
+	 * @param mixed  $meta_value.
+	 * @return array Activity ids
+	 */
+	public static function get_activity_ids_by_meta( $meta_key = '', $meta_value = '' ) {
+		global $wpdb;
+		$bp = buddypress();
+
+		$activity_ids = array();
+
+		if ( empty( $meta_key ) || empty( $meta_value ) )
+			return $activity_ids;
+
+		$meta_key   = wp_unslash( $meta_key );
+		$meta_value = wp_unslash( $meta_value );
+		$meta_value = sanitize_meta( $meta_key, $meta_value, 'activity' );
+		$meta_value = maybe_serialize( $meta_value );
+
+		$sql['select']            = "SELECT activity_id FROM {$bp->activity->table_name_meta}";
+		$sql['where']['meta_key'] = $wpdb->prepare( "meta_key = %s", $meta_key );
+
+		if ( is_numeric( $meta_value ) ) {
+			$sql['where']['meta_value'] = $wpdb->prepare( "meta_value = %d", $meta_value );
+		} else {
+			$sql['where']['meta_value'] = $wpdb->prepare( "meta_value = %s", $meta_value );
+		}
+
+		$sql['where'] = 'WHERE ' . implode( ' AND ', $sql['where'] );
+		
+		return $wpdb->get_col( "{$sql['select']} {$sql['where']}" );
+	}
 }
 
 /**
diff --git src/bp-activity/bp-activity-functions.php src/bp-activity/bp-activity-functions.php
index 6e5d93b..8b70c4b 100644
--- src/bp-activity/bp-activity-functions.php
+++ src/bp-activity/bp-activity-functions.php
@@ -361,7 +361,7 @@ function bp_activity_get_types() {
  *
  * @since BuddyPress (1.2)
  *
- * @uses bp_get_user_meta()
+ * @uses bp_activity_get_activity_ids_by_meta()
  * @uses apply_filters() To call the 'bp_activity_get_user_favorites' hook.
  *
  * @param int $user_id ID of the user whose favorites are being queried.
@@ -374,7 +374,7 @@ function bp_activity_get_user_favorites( $user_id = 0 ) {
 		$user_id = bp_displayed_user_id();
 
 	// Get favorites for user
-	$favs = bp_get_user_meta( $user_id, 'bp_favorite_activities', true );
+	$favs = bp_activity_get_activity_ids_by_meta( 'user_favorites', $user_id );
 
 	return apply_filters( 'bp_activity_get_user_favorites', $favs );
 }
@@ -385,10 +385,10 @@ function bp_activity_get_user_favorites( $user_id = 0 ) {
  * @since BuddyPress (1.2)
  *
  * @uses is_user_logged_in()
- * @uses bp_get_user_meta()
+ * @uses bp_activity_get_user_favorites()
  * @uses bp_activity_get_meta()
- * @uses bp_update_user_meta()
  * @uses bp_activity_update_meta()
+ * @uses bp_activity_add_meta()
  * @uses do_action() To call the 'bp_activity_add_user_favorite' hook.
  * @uses do_action() To call the 'bp_activity_add_user_favorite_fail' hook.
  *
@@ -399,14 +399,14 @@ function bp_activity_get_user_favorites( $user_id = 0 ) {
 function bp_activity_add_user_favorite( $activity_id, $user_id = 0 ) {
 
 	// Favorite activity stream items are for logged in users only
-	if ( !is_user_logged_in() )
+	if ( ! is_user_logged_in() )
 		return false;
 
 	// Fallback to logged in user if no user_id is passed
 	if ( empty( $user_id ) )
 		$user_id = bp_loggedin_user_id();
 
-	$my_favs = bp_get_user_meta( $user_id, 'bp_favorite_activities', true );
+	$my_favs = bp_activity_get_user_favorites( $user_id );
 	if ( empty( $my_favs ) || ! is_array( $my_favs ) ) {
 		$my_favs = array();
 	}
@@ -416,18 +416,14 @@ function bp_activity_add_user_favorite( $activity_id, $user_id = 0 ) {
 		return false;
 	}
 
-	// Add to user's favorites
-	$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;
 
-	// Update user meta
-	bp_update_user_meta( $user_id, 'bp_favorite_activities', $my_favs );
+	// Update activity meta counts for backcompat
+	bp_activity_update_meta( $activity_id, 'favorite_count', $fav_count );
 
-	// Update activity meta counts
-	if ( bp_activity_update_meta( $activity_id, 'favorite_count', $fav_count ) ) {
+	if ( bp_activity_add_meta( $activity_id, 'user_favorites', $user_id ) ) {
 
 		// Execute additional code
 		do_action( 'bp_activity_add_user_favorite', $activity_id, $user_id );
@@ -450,7 +446,7 @@ function bp_activity_add_user_favorite( $activity_id, $user_id = 0 ) {
  * @since BuddyPress (1.2)
  *
  * @uses is_user_logged_in()
- * @uses bp_get_user_meta()
+ * @uses bp_activity_delete_meta()
  * @uses bp_activity_get_meta()
  * @uses bp_activity_update_meta()
  * @uses bp_update_user_meta()
@@ -463,54 +459,40 @@ function bp_activity_add_user_favorite( $activity_id, $user_id = 0 ) {
 function bp_activity_remove_user_favorite( $activity_id, $user_id = 0 ) {
 
 	// Favorite activity stream items are for logged in users only
-	if ( !is_user_logged_in() )
+	if ( ! is_user_logged_in() )
 		return false;
 
 	// Fallback to logged in user if no user_id is passed
 	if ( empty( $user_id ) )
 		$user_id = bp_loggedin_user_id();
 
-	$my_favs = bp_get_user_meta( $user_id, 'bp_favorite_activities', true );
-	$my_favs = array_flip( (array) $my_favs );
+	// Remove the user favorite
+	$removed = bp_activity_delete_meta( $activity_id, 'user_favorites', $user_id );
 
-	// Bail if the user has not previously favorited the item
-	if ( ! isset( $my_favs[ $activity_id ] ) ) {
+	if ( empty( $removed ) ) {
 		return false;
 	}
 
-	// Remove the fav from the user's favs
-	unset( $my_favs[$activity_id] );
-	$my_favs = array_unique( array_flip( $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 ) ) {
-
-			// Update users favorites
-			if ( bp_update_user_meta( $user_id, 'bp_favorite_activities', $my_favs ) ) {
-
-				// Execute additional code
-				do_action( 'bp_activity_remove_user_favorite', $activity_id, $user_id );
-
-				// Success
-				return true;
+	$fav_count = bp_activity_get_meta( $activity_id, 'favorite_count' );
 
-			// Error updating
-			} else {
-				return false;
-			}
+	// Error getting favorite count
+	if ( empty( $fav_count ) ) {
+		return false;
+	}
 
-		// Error updating favorite count
-		} else {
-			return false;
-		}
+	// Deduct from total favorites
+	$count_updated = bp_activity_update_meta( $activity_id, 'favorite_count', (int) $fav_count - 1 );
 
-	// Error getting favorite count
-	} else {
+	// Error updating favorite count
+	if ( empty( $count_updated ) ) {
 		return false;
 	}
+
+	// Execute additional code
+	do_action( 'bp_activity_remove_user_favorite', $activity_id, $user_id );
+
+	return true;
 }
 
 /**
@@ -678,6 +660,19 @@ function bp_activity_add_meta( $activity_id, $meta_key, $meta_value, $unique = f
 	return $retval;
 }
 
+/**
+ * Get activity ids by metadata.
+ *
+ * @since BuddyPress (2.1)
+ *
+ * @param string $meta_key.
+ * @param mixed $meta_value.
+ * @return array activity ids.
+ */
+function bp_activity_get_activity_ids_by_meta( $meta_key = '', $meta_value = '' ) {
+	return apply_filters( 'bp_activity_get_activity_ids_by_meta', BP_Activity_Activity::get_activity_ids_by_meta( $meta_key, $meta_value ), $meta_key, $meta_value );
+}
+
 /** Clean up *****************************************************************/
 
 /**
@@ -702,10 +697,6 @@ function bp_activity_remove_all_user_data( $user_id = 0 ) {
 	// Clear the user's activity from the sitewide stream and clear their activity tables
 	bp_activity_delete( array( 'user_id' => $user_id ) );
 
-	// Remove any usermeta
-	bp_delete_user_meta( $user_id, 'bp_latest_update' );
-	bp_delete_user_meta( $user_id, 'bp_favorite_activities' );
-
 	// Execute additional code
 	do_action( 'bp_activity_remove_data', $user_id ); // Deprecated! Do not use!
 
@@ -1943,3 +1934,21 @@ function bp_activity_do_heartbeat() {
 
 	return $retval;
 }
+
+/**
+ * Add filters to list favorited activities to Show dropdowns.
+ *
+ * @since BuddyPress (2.1.0)
+ */
+function bp_activity_activity_favorite_filter_options() {
+	if ( bp_is_user() && bp_is_current_action( 'favorites' ) )
+		return;
+	?>
+
+	<option value="user_favorites"><?php _e( 'Favorited Updates', 'buddypress' ) ?></option>
+
+	<?php
+}
+add_action( 'bp_activity_filter_options', 'bp_activity_activity_favorite_filter_options' );
+add_action( 'bp_member_activity_filter_options', 'bp_activity_activity_favorite_filter_options' );
+add_action( 'bp_group_activity_filter_options', 'bp_activity_activity_favorite_filter_options' );
diff --git src/bp-activity/bp-activity-template.php src/bp-activity/bp-activity-template.php
index 1acafeb..a219446 100644
--- src/bp-activity/bp-activity-template.php
+++ src/bp-activity/bp-activity-template.php
@@ -184,9 +184,6 @@ class BP_Activity_Template {
 		// Check if blog/forum replies are disabled
 		$this->disable_blogforum_replies = isset( $bp->site_options['bp-disable-blogforum-comments'] ) ? $bp->site_options['bp-disable-blogforum-comments'] : false;
 
-		// Get an array of the logged in user's favorite activities
-		$this->my_favs = maybe_unserialize( bp_get_user_meta( bp_loggedin_user_id(), 'bp_favorite_activities', true ) );
-
 		// Fetch specific activity items based on ID's
 		if ( !empty( $include ) ) {
 			$this->activities = bp_activity_get_specific( array(
@@ -610,13 +607,8 @@ function bp_has_activities( $args = '' ) {
 					}
 					break;
 				case 'favorites':
-					$favs = bp_activity_get_user_favorites( $user_id );
-					if ( empty( $favs ) )
-						return false;
-
-					$in = implode( ',', (array) $favs );
+					$action = 'user_favorites';
 					$display_comments = true;
-					$user_id = 0;
 					break;
 				case 'mentions':
 
@@ -1751,7 +1743,7 @@ function bp_activity_is_favorite() {
 	function bp_get_activity_is_favorite() {
 		global $activities_template;
 
- 		return apply_filters( 'bp_get_activity_is_favorite', in_array( $activities_template->activity->id, (array) $activities_template->my_favs ) );
+ 		return apply_filters( 'bp_get_activity_is_favorite', in_array( bp_loggedin_user_id(), (array) $activities_template->activity->user_favorites ) );
 	}
 
 /**
@@ -2737,6 +2729,87 @@ function bp_total_favorite_count_for_user( $user_id = 0 ) {
 	}
 	add_filter( 'bp_get_total_favorite_count_for_user', 'bp_core_number_format' );
 
+
+function bp_activity_get_favorite_count() {
+	global $activities_template;
+
+	$count = 0;
+
+	if ( ! empty( $activities_template->activity->user_favorites ) ) {
+		$count = count( (array) $activities_template->activity->user_favorites );
+	}
+
+	return apply_filters( 'bp_activity_get_favorite_count', $count );
+}
+
+
+function bp_activity_user_favorites() {
+	echo bp_get_activity_user_favorites();
+}
+
+	function bp_get_activity_user_favorites() {
+		global $activities_template;
+
+		if ( empty( $activities_template->activity->user_favorites ) ) {
+			return;
+		}
+
+		$output = '<ul class="user-favorites-list">';
+
+		foreach( (array) $activities_template->activity->user_favorites as $user_id ) {
+			$user_avatar = bp_core_fetch_avatar( array(
+				'item_id' => $user_id,
+				'object'  => 'user',
+				'type'    => 'thumb',
+				'width'   => 50,
+				'height'  => 50,
+				'html'    => true,
+				'class'   => 'user-favorite-' . $user_id
+			) );
+			$output .= '<li><a href="' . bp_core_get_userlink( $user_id, false, true ) .'">' . $user_avatar . '</a></li>';
+		}
+
+		$output .= '</ul>';
+
+		return apply_filters( 'bp_get_activity_user_favorites', $output, $activities_template->activity->id, $activities_template->activity->user_favorites );
+	}
+
+
+function bp_activity_interactions_nav() {
+	echo bp_get_activity_interactions_nav();
+}
+
+	function bp_get_activity_interactions_nav() {
+		global $activities_template;
+
+		if ( ( is_user_logged_in() && bp_activity_can_comment() ) || ( is_user_logged_in() && bp_activity_can_favorite() ) || bp_is_single_activity() ) {
+
+			$class_nav = $class_favorite = '';
+			$comments_count  = bp_activity_get_comment_count();
+			$favorites_count = bp_activity_get_favorite_count();
+
+			if ( 0 ==  $comments_count + $favorites_count )  {
+				$class_nav = ' hide';
+			}
+
+			$output = '<ul class="activity-interactions-nav'. $class_nav .'">';
+			$output .= '<li class="activity-interactions current"><a href="#" class="activity-comments-interaction">' .  sprintf( __( 'Replies <span>%s</span>', 'buddypress' ), $comments_count ) . '</a></li>';
+
+			if ( 0 == $favorites_count ) {
+				$class_favorite = ' hide';
+			}
+
+			$output .= '<li class="activity-interactions'. $class_favorite .'"><a href="#" class="activity-favorites-interaction">' .  sprintf( __( 'Favorites <span>%s</span>', 'buddypress' ), $favorites_count ) . '</a></li>';
+
+			$output .= '</ul>';
+
+		} else {
+			$output = false;
+		}
+
+		return apply_filters( 'bp_get_activity_interactions_nav', $output );
+	}
+
 /**
  * Output the total mention count for a specified user.
  *
diff --git src/bp-members/bp-members-functions.php src/bp-members/bp-members-functions.php
index eea5790..0e3efb3 100644
--- src/bp-members/bp-members-functions.php
+++ src/bp-members/bp-members-functions.php
@@ -938,22 +938,24 @@ function bp_update_user_last_activity( $user_id = 0, $time = '' ) {
 	// As of BuddyPress 2.0, last_activity is no longer stored in usermeta.
 	// However, we mirror it there for backward compatibility. Do not use!
 	// Remove our warning and re-add.
-	remove_filter( 'update_user_metadata', '_bp_update_user_meta_last_activity_warning', 10, 4 );
-	remove_filter( 'get_user_metadata', '_bp_get_user_meta_last_activity_warning', 10, 3 );
+	remove_filter( 'update_user_metadata', '_bp_update_user_meta_activity_warning', 10, 4 );
+	remove_filter( 'get_user_metadata', '_bp_get_user_meta_activity_warning', 10, 3 );
 	update_user_meta( $user_id, 'last_activity', $time );
-	add_filter( 'update_user_metadata', '_bp_update_user_meta_last_activity_warning', 10, 4 );
-	add_filter( 'get_user_metadata', '_bp_get_user_meta_last_activity_warning', 10, 3 );
+	add_filter( 'update_user_metadata', '_bp_update_user_meta_activity_warning', 10, 4 );
+	add_filter( 'get_user_metadata', '_bp_get_user_meta_activity_warning', 10, 3 );
 
 	return BP_Core_User::update_last_activity( $user_id, $time );
 }
 
 /**
- * Backward compatibility for 'last_activity' usermeta fetching.
+ * Backward compatibility for 'last_activity' && bp_favorite_activities usermeta fetching.
  *
  * In BuddyPress 2.0, user last_activity data was moved out of usermeta. For
  * backward compatibility, we continue to mirror the data there. This function
  * serves two purposes: it warns plugin authors of the change, and it returns
  * the data from the proper location.
+ * 
+ * In BuddyPress 2.1, bp_favorite_activities was also moved out of usermeta.
  *
  * @since BuddyPress (2.0.0)
  *
@@ -963,22 +965,32 @@ function bp_update_user_last_activity( $user_id = 0, $time = '' ) {
  * @param int $object_id ID of the user.
  * @param string $meta_key Meta key being fetched.
  */
-function _bp_get_user_meta_last_activity_warning( $retval, $object_id, $meta_key ) {
-	static $warned;
+function _bp_get_user_meta_activity_warning( $retval, $object_id, $meta_key ) {
+	static $warned = array();
 
 	if ( 'last_activity' === $meta_key ) {
 		// Don't send the warning more than once per pageload
-		if ( empty( $warned ) ) {
+		if ( empty( $warned['last_activity'] ) ) {
 			_doing_it_wrong( 'get_user_meta( $user_id, \'last_activity\' )', __( 'User last_activity data is no longer stored in usermeta. Use bp_get_user_last_activity() instead.', 'buddypress' ), '2.0.0' );
-			$warned = 1;
+			$warned['last_activity'] = 1;
 		}
 
 		return bp_get_user_last_activity( $object_id );
 	}
 
+	if ( 'bp_favorite_activities' === $meta_key ) {
+		// Don't send the warning more than once per pageload
+		if ( empty( $warned['bp_favorite_activities'] ) ) {
+			_doing_it_wrong( 'get_user_meta( $user_id, \'bp_favorite_activities\' )', __( 'User bp_favorite_activities data is no longer stored in usermeta. Use bp_activity_get_user_favorites() instead.', 'buddypress' ), '2.1.0' );
+			$warned['bp_favorite_activities'] = 1;
+		}
+
+		return bp_activity_get_user_favorites( $object_id );
+	}
+
 	return $retval;
 }
-add_filter( 'get_user_metadata', '_bp_get_user_meta_last_activity_warning', 10, 3 );
+add_filter( 'get_user_metadata', '_bp_get_user_meta_activity_warning', 10, 3 );
 
 /**
  * Backward compatibility for 'last_activity' usermeta setting.
@@ -997,13 +1009,17 @@ add_filter( 'get_user_metadata', '_bp_get_user_meta_last_activity_warning', 10,
  * @param string $meta_key Meta key being fetched.
  * @param string $meta_value Active time.
  */
-function _bp_update_user_meta_last_activity_warning( $meta_id, $object_id, $meta_key, $meta_value ) {
+function _bp_update_user_meta_activity_warning( $meta_id, $object_id, $meta_key, $meta_value ) {
 	if ( 'last_activity' === $meta_key ) {
 		_doing_it_wrong( 'update_user_meta( $user_id, \'last_activity\' )', __( 'User last_activity data is no longer stored in usermeta. Use bp_update_user_last_activity() instead.', 'buddypress' ), '2.0.0' );
 		bp_update_user_last_activity( $object_id, $meta_value );
 	}
+
+	if ( 'bp_favorite_activities' === $meta_key ) {
+		_doing_it_wrong( 'update_user_meta( $user_id, \'bp_favorite_activities\' )', __( 'User bp_favorite_activities data is no longer stored in usermeta. Use bp_activity_add_user_favorite() or bp_activity_remove_user_favorite() instead.', 'buddypress' ), '2.1.0' );
+	}
 }
-add_filter( 'update_user_metadata', '_bp_update_user_meta_last_activity_warning', 10, 4 );
+add_filter( 'update_user_metadata', '_bp_update_user_meta_activity_warning', 10, 4 );
 
 /**
  * Get the last activity for a given user.
diff --git src/bp-templates/bp-legacy/buddypress-functions.php src/bp-templates/bp-legacy/buddypress-functions.php
index 784b2dc..5ecb49c 100644
--- src/bp-templates/bp-legacy/buddypress-functions.php
+++ src/bp-templates/bp-legacy/buddypress-functions.php
@@ -919,12 +919,27 @@ function bp_legacy_theme_mark_activity_favorite() {
 	if ( 'POST' !== strtoupper( $_SERVER['REQUEST_METHOD'] ) )
 		return;
 
-	if ( bp_activity_add_user_favorite( $_POST['id'] ) )
-		_e( 'Remove Favorite', 'buddypress' );
-	else
-		_e( 'Favorite', 'buddypress' );
+	$result = array();
+	$user_id = bp_loggedin_user_id();
+
+	if ( bp_activity_add_user_favorite( $_POST['id'] ) ) {
+		$result['button'] = __( 'Remove Favorite', 'buddypress' );
+		$user_avatar = bp_core_fetch_avatar( array(
+			'item_id' => $user_id,
+			'object'  => 'user',
+			'type'    => 'thumb',
+			'width'   => 50,
+			'height'  => 50,
+			'html'    => true,
+			'class'   => 'user-favorite-' . $user_id
+		) );
+		$result['avatar'] = '<li><a href="' . bp_core_get_userlink( $user_id, false, true ) .'">' . $user_avatar . '</a></li>';
+	} else {
+		$result['button'] = __( 'Favorite', 'buddypress' );
+		$result['avatar'] = 0;
+	}
 
-	exit;
+	exit( json_encode( $result ) );
 }
 
 /**
@@ -938,12 +953,17 @@ function bp_legacy_theme_unmark_activity_favorite() {
 	if ( 'POST' !== strtoupper( $_SERVER['REQUEST_METHOD'] ) )
 		return;
 
-	if ( bp_activity_remove_user_favorite( $_POST['id'] ) )
-		_e( 'Favorite', 'buddypress' );
-	else
-		_e( 'Remove Favorite', 'buddypress' );
+	$result = array();
 
-	exit;
+	if ( bp_activity_remove_user_favorite( $_POST['id'] ) ){
+		$result['button'] = __( 'Favorite', 'buddypress' );
+		$result['avatar'] = bp_loggedin_user_id();
+	} else {
+		$result['button'] = __( 'Remove Favorite', 'buddypress' );
+		$result['avatar'] = 0;
+	}
+
+	exit( json_encode( $result ) );
 }
 
 /**
diff --git src/bp-templates/bp-legacy/buddypress/activity/entry.php src/bp-templates/bp-legacy/buddypress/activity/entry.php
index 24e296b..9825c25 100644
--- src/bp-templates/bp-legacy/buddypress/activity/entry.php
+++ src/bp-templates/bp-legacy/buddypress/activity/entry.php
@@ -55,7 +55,7 @@
 
 				<?php if ( bp_activity_can_comment() ) : ?>
 
-					<a href="<?php bp_activity_comment_link(); ?>" class="button acomment-reply bp-primary-action" id="acomment-comment-<?php bp_activity_id(); ?>"><?php printf( __( 'Comment <span>%s</span>', 'buddypress' ), bp_activity_get_comment_count() ); ?></a>
+					<a href="<?php bp_activity_comment_link(); ?>" class="button acomment-reply bp-primary-action" id="acomment-comment-<?php bp_activity_id(); ?>"><?php esc_html_e( 'Comment', 'buddypress' ); ?></a>
 
 				<?php endif; ?>
 
@@ -83,6 +83,8 @@
 
 	</div>
 
+	<?php bp_activity_interactions_nav(); ?>
+
 	<?php do_action( 'bp_before_activity_entry_comments' ); ?>
 
 	<?php if ( ( is_user_logged_in() && bp_activity_can_comment() ) || bp_is_single_activity() ) : ?>
@@ -117,6 +119,18 @@
 
 	<?php do_action( 'bp_after_activity_entry_comments' ); ?>
 
+	<?php if ( ( is_user_logged_in() && bp_activity_can_favorite() ) || bp_is_single_activity() ) : ?>
+
+		<div class="activity-favorites">
+
+			<?php bp_activity_user_favorites(); ?>
+
+		</div>
+
+	<?php endif; ?>
+
+	<?php do_action( 'bp_after_activity_entry_favorites' ); ?>
+
 </li>
 
 <?php do_action( 'bp_after_activity_entry' ); ?>
diff --git src/bp-templates/bp-legacy/css/buddypress.css src/bp-templates/bp-legacy/css/buddypress.css
index 36a16c7..c0d7975 100644
--- src/bp-templates/bp-legacy/css/buddypress.css
+++ src/bp-templates/bp-legacy/css/buddypress.css
@@ -12,6 +12,7 @@ Hello, this is the BuddyPress Legacy stylesheet.
 	3.1 - Activity
 		3.1.1 - Activity Listing
 		3.1.2 - Activity Comments
+		3.1.3 - Activity Favorites
 	3.2 - Toolbar
 	3.3 - Directories - Members, Groups, Blogs, Forums
 	3.4 - Error / Success Messages
@@ -484,6 +485,93 @@ body.activity-permalink #buddypress div.activity-comments div.acomment-content {
 	color: inherit;
 }
 
+
+/*--------------------------------------------------------------
+3.1.3 - Activity Favorites
+--------------------------------------------------------------*/
+#buddypress .activity-list li ul.activity-interactions-nav {
+	list-style: none;
+	margin: 20px 0 10px 70px;
+	overflow: hidden; /* IE fix */
+	position: relative;
+	width: auto;
+	clear: both;
+}
+
+#buddypress .activity-list li ul.activity-interactions-nav.hide,
+#buddypress .activity-list li ul.activity-interactions-nav li.hide {
+	display:none;
+}
+
+
+#buddypress .activity-list li ul.activity-interactions-nav li {
+	float: left;
+	margin:0;
+	padding: 4px 8px;
+	font-size: 90%;
+	border-bottom: none;
+}
+
+#buddypress .activity-list li ul.activity-interactions-nav li a {
+	text-decoration: none;
+	color:#555;
+}
+
+#buddypress .activity-list li ul.activity-interactions-nav li.current {
+	background-color: #eee;
+	color: #555;
+	opacity: .8;
+	font-weight: bold;
+}
+
+#buddypress .activity-list li ul.activity-interactions-nav li.current span {
+	background-color: #fff;
+}
+
+#buddypress .activity-list li ul.activity-interactions-nav li span {
+	background: #eee;
+	border-radius: 50%;
+	border: 1px solid #ccc;
+	color: #999;
+	display: inline;
+	font-size: 70%;
+	margin-left: 2px;
+	padding: 3px 6px;
+	text-align: center;
+	vertical-align: middle;
+}
+
+#buddypress div.activity-favorites {
+	display:none;
+	margin: 0 0 0 70px;
+	overflow: hidden; /* IE fix */
+	position: relative;
+	width: auto;
+	clear: both;
+}
+
+#buddypress div.activity-favorites ul.user-favorites-list li {
+	padding:0;
+	float: left;
+	border-bottom: none;
+}
+
+#buddypress div.activity-favorites ul.user-favorites-list {
+	overflow: hidden;
+	list-style: none;
+	width: auto;
+	clear: both;
+}
+
+#buddypress div.activity-favorites ul.user-favorites-list li img {
+	border-width: 1px;
+	float: left;
+	height: 25px;
+	margin-right: 10px;
+	width: 25px;
+}
+
+
 /*--------------------------------------------------------------
 3.3 - Directories - Members, Groups, Blogs, Forums
 --------------------------------------------------------------*/
diff --git src/bp-templates/bp-legacy/js/buddypress.js src/bp-templates/bp-legacy/js/buddypress.js
index dd009ea..2a9d045 100644
--- src/bp-templates/bp-legacy/js/buddypress.js
+++ src/bp-templates/bp-legacy/js/buddypress.js
@@ -284,7 +284,7 @@ jq(document).ready( function() {
 				target.removeClass('loading');
 
 				target.fadeOut( 200, function() {
-					jq(this).html(response);
+					jq(this).html(response['button']);
 					jq(this).attr('title', 'fav' === type ? BP_DTheme.remove_fav : BP_DTheme.mark_as_fav);
 					jq(this).fadeIn(200);
 				});
@@ -297,6 +297,17 @@ jq(document).ready( function() {
 
 						jq('.item-list-tabs ul #activity-favorites span').html( Number( jq('.item-list-tabs ul #activity-favorites span').html() ) + 1 );
 					}
+					jq('#activity-' + parent_id + ' ul.activity-interactions-nav').removeClass('hide');
+					jq('#activity-' + parent_id + ' a.activity-favorites-interaction').parent().removeClass('hide');
+					jq('#activity-' + parent_id + ' a.activity-favorites-interaction span').html( Number( jq('#activity-' + parent_id + ' a.activity-favorites-interaction span').html() ) + 1 );
+
+					if ( ! jq( '#activity-' + parent_id + ' .user-favorites-list' ).length ) {
+						jq( '#activity-' + parent_id + ' .activity-favorites' ).append('<ul class="user-favorites-list"></ul>');
+					}
+
+					if ( 0 != response['avatar'] ){
+						jq( '#activity-' + parent_id + ' .user-favorites-list' ).append( response['avatar'] );
+					}
 
 					target.removeClass('fav');
 					target.addClass('unfav');
@@ -306,6 +317,17 @@ jq(document).ready( function() {
 					target.addClass('fav');
 
 					jq('.item-list-tabs ul #activity-favorites span').html( Number( jq('.item-list-tabs ul #activity-favorites span').html() ) - 1 );
+					jq('#activity-' + parent_id + ' a.activity-favorites-interaction span').html( Number( jq('#activity-' + parent_id + ' a.activity-favorites-interaction span').html() ) - 1 );
+
+					if ( jq( '#activity-' + parent_id + ' .user-favorites-list' ).length ) {
+						jq( '#activity-' + parent_id + ' .user-favorites-list li' ).each( function() {
+							avatar = jq(this).find('img').prop( 'class' ).match( /user-favorite-([0-9]+)/ );
+
+							if ( typeof avatar != 'undefined' && avatar[1] == response['avatar'] ) {
+								jq(this).remove();
+							}
+						});
+					}
 
 					if ( !Number( jq('.item-list-tabs ul #activity-favorites span').html() ) ) {
 						if ( jq('.item-list-tabs ul #activity-favorites').hasClass('selected') ) {
@@ -319,7 +341,7 @@ jq(document).ready( function() {
 				if ( 'activity-favorites' === jq( '.item-list-tabs li.selected').attr('id') ) {
 					target.closest( '.activity-item' ).slideUp( 100 );
 				}
-			});
+			}, 'json' );
 
 			return false;
 		}
@@ -459,6 +481,33 @@ jq(document).ready( function() {
 			// reset the newest activities now they're displayed
 			newest_activities = '';
 		}
+
+		if ( target.parent().hasClass( 'activity-interactions' ) ) {
+			
+			event.preventDefault();
+
+			var css_class = target.attr('class').split( ' ' ),
+				current_div = css_class[0].replace( '-interaction', '' ),
+				div_tohide = '',
+				parent_li = target.parent(),
+				parent_ul = parent_li.parent();
+
+			parent_ul.children( 'li' ).each( function() {
+				jq( this ).removeClass( 'current' );
+
+				if ( jq( this ).find('a').prop( 'class' ) != target.prop( 'class' ) ) {
+					div_tohide = jq.trim( jq( this ).find('a').prop( 'class' ) ).replace( '-interaction', '' );
+				}
+			});
+
+			jq( parent_li ).addClass( 'current' );
+
+			if ( ! div_tohide.length )
+				return
+			
+			parent_ul.parent().find( '.' + div_tohide  ).first().hide();
+			parent_ul.parent().find( '.' + current_div  ).first().show();
+		}
 	});
 
 	// Activity "Read More" links
@@ -507,6 +556,9 @@ jq(document).ready( function() {
 
 		/* Comment / comment reply links */
 		if ( target.hasClass('acomment-reply') || target.parent().hasClass('acomment-reply') ) {
+
+			target.parent().parent().parent().find( '.activity-comments-interaction' ).first().trigger( 'click' );
+
 			if ( target.parent().hasClass('acomment-reply') ) {
 				target = target.parent();
 			}
@@ -612,7 +664,8 @@ jq(document).ready( function() {
 					jq( '#' + form.attr('id') + ' textarea').val('');
 
 					/* Increase the "Reply (X)" button count */
-					jq('#activity-' + form_id[2] + ' a.acomment-reply span').html( Number( jq('#activity-' + form_id[2] + ' a.acomment-reply span').html() ) + 1 );
+					jq('#activity-' + form_id[2] + ' ul.activity-interactions-nav').removeClass('hide');
+					jq('#activity-' + form_id[2] + ' a.activity-comments-interaction span').html( Number( jq('#activity-' + form_id[2] + ' a.activity-comments-interaction span').html() ) + 1 );
 
 					// Increment the 'Show all x comments' string, if present
 					show_all_a = activity_comments.find('.show-all').find('a');
