diff --git bp-activity/bp-activity-functions.php bp-activity/bp-activity-functions.php
index 6cbf3b4..9e3d1fe 100644
--- bp-activity/bp-activity-functions.php
+++ bp-activity/bp-activity-functions.php
@@ -1549,6 +1549,31 @@ function bp_activity_get_permalink( $activity_id, $activity_obj = false ) {
 }
 
 /**
+ * Get the IDs of users participating in an activity comment thread.
+ *
+ * @since BuddyPress (2.0.0)
+ *
+ * @param int $activity_id ID of the top-level activity ID.
+ * @return array
+ */
+function bp_activity_get_thread_participants( $activity_id ) {
+	$activity = bp_activity_get( array(
+		'id' => $activity_id,
+		'display_comments' => 'thread',
+	) );
+
+	$user_ids = wp_list_pluck( $activity['activities'], 'user_id' );
+
+	// Force unique and sanitize
+	$user_ids = wp_parse_id_list( array_unique( $user_ids ) );
+
+	// Reset indexes
+	$user_ids = array_values( $user_ids );
+
+	return wp_parse_id_list( array_unique( $user_ids ) );
+}
+
+/**
  * Hide a user's activity.
  *
  * @since BuddyPress (1.2)
diff --git bp-activity/bp-activity-notifications.php bp-activity/bp-activity-notifications.php
index 237c048..ca3fd9c 100644
--- bp-activity/bp-activity-notifications.php
+++ bp-activity/bp-activity-notifications.php
@@ -115,26 +115,6 @@ To view and respond to the message, log in and visit: %3$s
  *
  * @since BuddyPress (1.2)
  *
- * @uses bp_get_user_meta()
- * @uses bp_core_get_user_displayname()
- * @uses bp_activity_get_permalink()
- * @uses bp_core_get_user_domain()
- * @uses bp_get_settings_slug()
- * @uses bp_activity_filter_kses()
- * @uses bp_core_get_core_userdata()
- * @uses wp_specialchars_decode()
- * @uses get_blog_option()
- * @uses bp_get_root_blog_id()
- * @uses apply_filters() To call the 'bp_activity_new_comment_notification_to' hook
- * @uses apply_filters() To call the 'bp_activity_new_comment_notification_subject' hook
- * @uses apply_filters() To call the 'bp_activity_new_comment_notification_message' hook
- * @uses wp_mail()
- * @uses do_action() To call the 'bp_activity_sent_reply_to_update_email' hook
- * @uses apply_filters() To call the 'bp_activity_new_comment_notification_comment_author_to' hook
- * @uses apply_filters() To call the 'bp_activity_new_comment_notification_comment_author_subject' hook
- * @uses apply_filters() To call the 'bp_activity_new_comment_notification_comment_author_message' hook
- * @uses do_action() To call the 'bp_activity_sent_reply_to_reply_email' hook
- *
  * @param int $comment_id The comment id.
  * @param int $commenter_id The ID of the user who posted the comment.
  * @param array $params {@link bp_activity_new_comment()}
@@ -147,22 +127,37 @@ function bp_activity_new_comment_notification( $comment_id = 0, $commenter_id =
 
 	extract( $params );
 
+	// Fetch data that'll be needed for all participants
 	$original_activity = new BP_Activity_Activity( $activity_id );
+	$parent_comment    = new BP_Activity_Activity( $parent_id );
+	$thread_link       = bp_activity_get_permalink( $activity_id );
+	$activity_name     = stripslashes( bp_core_get_user_displayname( $original_activity->user_id ) );
+	$poster_name       = stripslashes( bp_core_get_user_displayname( $commenter_id ) );
+	$content           = bp_activity_filter_kses( stripslashes( $content ) );
+
+	// Fetch list of unique participants
+	$participants = new BP_User_Query( array(
+		'user_ids' => bp_activity_get_thread_participants( $activity_id ),
+	) );
+
+	foreach ( $participants->results as $participant ) {
+
+		// Bail if the user has disabled reply notifications globally
+		if ( 'no' === bp_get_user_meta( $participant->ID, 'notification_activity_new_reply' ) ) {
+			continue;
+		}
 
-	if ( $original_activity->user_id != $commenter_id && 'no' != bp_get_user_meta( $original_activity->user_id, 'notification_activity_new_reply', true ) ) {
-		$poster_name   = bp_core_get_user_displayname( $commenter_id );
-		$thread_link   = bp_activity_get_permalink( $activity_id );
-		$settings_slug = function_exists( 'bp_get_settings_slug' ) ? bp_get_settings_slug() : 'settings';
-		$settings_link = bp_core_get_user_domain( $original_activity->user_id ) . $settings_slug . '/notifications/';
+		// Each participant will be either (a) the original activity
+		// author, (b) the author of the comment being directly replied
+		// to, or (c) another participant. Handle each case separately
 
-		$poster_name = stripslashes( $poster_name );
-		$content = bp_activity_filter_kses( stripslashes($content) );
+		// Root activity author
+		if ( $participant->ID == $original_activity->user_id ) {
+			$subject = bp_get_email_subject( array(
+				'text' => sprintf( __( '%s replied to one of your updates', 'buddypress' ), $poster_name ),
+			) );
 
-		// Set up and send the message
-		$ud      = bp_core_get_core_userdata( $original_activity->user_id );
-		$to      = $ud->user_email;
-		$subject = bp_get_email_subject( array( 'text' => sprintf( __( '%s replied to one of your updates', 'buddypress' ), $poster_name ) ) );
-		$message = sprintf( __(
+			$message = sprintf( __(
 '%1$s replied to one of your updates:
 
 "%2$s"
@@ -172,68 +167,69 @@ To view your original update and all comments, log in and visit: %3$s
 ---------------------
 ', 'buddypress' ), $poster_name, $content, $thread_link );
 
-		// Only show the disable notifications line if the settings component is enabled
-		if ( bp_is_active( 'settings' ) ) {
-			$message .= sprintf( __( 'To disable these notifications please log in and go to: %s', 'buddypress' ), $settings_link );
-		}
+			// Only show the disable notifications line if the settings component is enabled
+			if ( bp_is_active( 'settings' ) ) {
+				$settings_link = bp_core_get_user_domain( $participant->ID ) . bp_get_settings_slug() . '/notifications/';
+				$message .= sprintf( __( 'To disable these notifications please log in and go to: %s', 'buddypress' ), $settings_link );
+			}
 
-		/* Send the message */
-		$to = apply_filters( 'bp_activity_new_comment_notification_to', $to );
-		$subject = apply_filters( 'bp_activity_new_comment_notification_subject', $subject, $poster_name );
-		$message = apply_filters( 'bp_activity_new_comment_notification_message', $message, $poster_name, $content, $thread_link, $settings_link );
+			$to      = apply_filters( 'bp_activity_new_comment_notification_to', $participant->user_id );
+			$subject = apply_filters( 'bp_activity_new_comment_notification_subject', $subject, $poster_name );
+			$message = apply_filters( 'bp_activity_new_comment_notification_message', $message, $poster_name, $content, $thread_link, $settings_link );
 
-		wp_mail( $to, $subject, $message );
+			do_action( 'bp_activity_sent_reply_to_update_email', $original_activity->user_id, $subject, $message, $comment_id, $commenter_id, $params );
 
-		do_action( 'bp_activity_sent_reply_to_update_email', $original_activity->user_id, $subject, $message, $comment_id, $commenter_id, $params );
-	}
+		// Author of comment being replied to
+		} else if ( $participant->ID == $original_activity->user_id ) {
 
-	/***
-	 * If this is a reply to another comment, send an email notification to the
-	 * author of the immediate parent comment.
-	 */
-	if ( empty( $parent_id ) || ( $activity_id == $parent_id ) ) {
-		return false;
-	}
+			$subject = bp_get_email_subject( array(
+				'text' => sprintf( __( '%s replied to one of your comments', 'buddypress' ), $poster_name ),
+			) );
+
+			$message = sprintf( __(
+'%1$s replied to one of your comments:
 
-	$parent_comment = new BP_Activity_Activity( $parent_id );
+"%2$s"
 
-	if ( $parent_comment->user_id != $commenter_id && $original_activity->user_id != $parent_comment->user_id && 'no' != bp_get_user_meta( $parent_comment->user_id, 'notification_activity_new_reply', true ) ) {
-		$poster_name   = bp_core_get_user_displayname( $commenter_id );
-		$thread_link   = bp_activity_get_permalink( $activity_id );
-		$settings_slug = function_exists( 'bp_get_settings_slug' ) ? bp_get_settings_slug() : 'settings';
-		$settings_link = bp_core_get_user_domain( $parent_comment->user_id ) . $settings_slug . '/notifications/';
+To view your original update and all comments, log in and visit: %3$s
 
-		// Set up and send the message
-		$ud       = bp_core_get_core_userdata( $parent_comment->user_id );
-		$to       = $ud->user_email;
-		$subject = bp_get_email_subject( array( 'text' => sprintf( __( '%s replied to one of your comments', 'buddypress' ), $poster_name ) ) );
+---------------------
+', 'buddypress' ), $poster_name, $content, $thread_link );
 
-		$poster_name = stripslashes( $poster_name );
-		$content = bp_activity_filter_kses( stripslashes( $content ) );
+			// Only show the disable notifications line if the settings component is enabled
+			if ( bp_is_active( 'settings' ) ) {
+				$settings_link = bp_core_get_user_domain( $participant->ID ) . bp_get_settings_slug() . '/notifications/';
+				$message .= sprintf( __( 'To disable these notifications please log in and go to: %s', 'buddypress' ), $settings_link );
+			}
 
-$message = sprintf( __(
-'%1$s replied to one of your comments:
+			$to      = apply_filters( 'bp_activity_new_comment_notification_comment_author_to', $participant->user_email );
+			$subject = apply_filters( 'bp_activity_new_comment_notification_comment_author_subject', $subject, $poster_name );
+			$message = apply_filters( 'bp_activity_new_comment_notification_comment_author_message', $message, $poster_name, $content, $settings_link, $thread_link );
 
-"%2$s"
+			do_action( 'bp_activity_sent_reply_to_reply_email', $original_activity->user_id, $subject, $message, $comment_id, $commenter_id, $params );
 
-To view the original activity, your comment and all replies, log in and visit: %3$s
+		// Another participant
+		} else {
+			$subject = bp_get_email_subject( array(
+				'text' => sprintf( __( '%1$s replied to %2$s&#8217;s update', 'buddypress' ), $poster_name, $activity_name ),
+			) );
+
+			$message = sprintf( __(
+'%1$s replied to %2$s&#8217;s update
+
+"%3$s"
+
+To view your original update and all comments, log in and visit: %4$s
 
 ---------------------
-', 'buddypress' ), $poster_name, $content, $thread_link );
+', 'buddypress' ), $poster_name, $activity_name, $content, $thread_link );
 
-		// Only show the disable notifications line if the settings component is enabled
-		if ( bp_is_active( 'settings' ) ) {
-			$message .= sprintf( __( 'To disable these notifications please log in and go to: %s', 'buddypress' ), $settings_link );
+			$to      = apply_filters( 'bp_activity_new_comment_notification_participant_author_to', $participant->user_email );
+			$subject = apply_filters( 'bp_activity_new_comment_notification_participant_author_subject', $subject, $poster_name );
+			$message = apply_filters( 'bp_activity_new_comment_notification_participant_author_message', $message, $poster_name, $content, $settings_link, $thread_link );
 		}
 
-		/* Send the message */
-		$to = apply_filters( 'bp_activity_new_comment_notification_comment_author_to', $to );
-		$subject = apply_filters( 'bp_activity_new_comment_notification_comment_author_subject', $subject, $poster_name );
-		$message = apply_filters( 'bp_activity_new_comment_notification_comment_author_message', $message, $poster_name, $content, $settings_link, $thread_link );
-
 		wp_mail( $to, $subject, $message );
-
-		do_action( 'bp_activity_sent_reply_to_reply_email', $original_activity->user_id, $subject, $message, $comment_id, $commenter_id, $params );
 	}
 }
 
diff --git tests/testcases/activity/functions.php tests/testcases/activity/functions.php
index 24a7dd5..709ac81 100644
--- tests/testcases/activity/functions.php
+++ tests/testcases/activity/functions.php
@@ -540,4 +540,41 @@ Bar!';
 		remove_filter( 'bp_is_username_compatibility_mode', '__return_true' );
 	}
 
+	/**
+	 * @group bp_activity_get_thread_participants
+	 */
+	public function test_bp_activity_get_thread_participants() {
+		$u1 = $this->create_user();
+		$u2 = $this->create_user();
+		$u3 = $this->create_user();
+		$u4 = $this->create_user();
+		$parent = $this->factory->activity->create( array(
+			'user_id' => $u1,
+		) );
+
+		$comment1 = $this->factory->activity->create( array(
+			'type'              => 'activity_comment',
+			'user_id'           => $u2,
+			'item_id'           => $parent,
+			'secondary_item_id' => $parent,
+		) );
+
+		$comment2 = $this->factory->activity->create( array(
+			'type'              => 'activity_comment',
+			'user_id'           => $u1,
+			'item_id'           => $parent,
+			'secondary_item_id' => $comment1,
+		) );
+
+		$comment3 = $this->factory->activity->create( array(
+			'type'              => 'activity_comment',
+			'user_id'           => $u4,
+			'item_id'           => $parent,
+			'secondary_item_id' => $parent,
+		) );
+
+		$expected = array( $u1, $u2, $u4 );
+
+		$this->assertEquals( $expected, bp_activity_get_thread_participants( $a1 ) );
+	}
 }
