Index: bp-blogs/bp-blogs-activity.php
===================================================================
--- bp-blogs/bp-blogs-activity.php
+++ bp-blogs/bp-blogs-activity.php
@@ -852,3 +852,103 @@
 	return $retval;
 }
 add_filter( 'bp_get_activity_comment_permalink', 'bp_blogs_activity_comment_permalink' );
+
+/**
+ * Changes single activity comment entries to use the blog comment permalink.
+ *
+ * This is only done if the activity comment is associated with a blog comment.
+ *
+ * @since BuddyPress (2.1.0)
+ *
+ * @param string $retval The activity permalink
+ * @param BP_Activity_Activity $activity
+ * @return string
+ */
+function bp_blogs_activity_comment_single_permalink( $retval, $activity ) {
+	if ( 'activity_comment' !== $activity->type ) {
+		return $retval;
+	}
+
+	$blog_comment_id = bp_activity_get_meta( $activity->id, 'bp_blogs_post_comment_id' );
+
+	if ( ! empty( $blog_comment_id ) ) {
+		$retval = $activity->primary_link;
+	}
+
+	return $retval;
+}
+add_filter( 'bp_activity_get_permalink', 'bp_blogs_activity_comment_single_permalink', 10, 2 );
+
+/**
+ * Formats single activity comment entries to use the blog comment action.
+ *
+ * This is only done if the activity comment is associated with a blog comment.
+ *
+ * @since BuddyPress (2.1.0)
+ *
+ * @param string $retval The activity action
+ * @param BP_Activity_Activity $activity
+ * @return string
+ */
+function bp_blogs_activity_comment_single_action( $retval, $activity ) {
+	if ( 'activity_comment' !== $activity->type ) {
+		return $retval;
+	}
+
+	$blog_comment_id = bp_activity_get_meta( $activity->id, 'bp_blogs_post_comment_id' );
+
+	if ( ! empty( $blog_comment_id ) ) {
+		// fetch the parent blog post activity item
+		$parent_blog_post_activity = new BP_Activity_Activity( $activity->item_id );
+
+		// fake a 'new_blog_comment' activity object
+		$object = $activity;
+
+		// override 'item_id' to use blog ID
+		$object->item_id = $parent_blog_post_activity->item_id;
+
+		// override 'secondary_item_id' to use comment ID
+		$object->secondary_item_id = $blog_comment_id;
+
+		// now format the activity action using the 'new_blog_comment' action callback
+		$retval = bp_blogs_format_activity_action_new_blog_comment( '', $object );
+	}
+
+	return $retval;
+}
+add_filter( 'bp_get_activity_action_pre_meta', 'bp_blogs_activity_comment_single_action', 10, 2 );
+
+/**
+ * Filters activity stream to match activity comments joined to blog comments.
+ *
+ * This is only done when the "Comments" dropdown filter is used and if
+ * activity commenting is allowed on blog posts.
+ *
+ * @since BuddyPress (2.1.0)
+ *
+ * @param string $retval The activity action
+ * @param BP_Activity_Activity $activity
+ * @return string
+ */
+function bp_blogs_activity_comment_filter_stream( $retval ) {
+	// not filtering for blog comments? stop now!
+	if ( 'new_blog_comment' !== $retval['action'] ) {
+		return $retval;
+	}
+
+	// if activity comments are disabled for blog posts, stop now!
+	if ( bp_disable_blogforum_comments() ) {
+		return $retval;
+	}
+
+	// override the activity stream parameters to match activity comments
+	// associated with blog comments
+	$retval['display_comments'] = 'stream';
+	$retval['action']           = 'activity_comment';
+	$retval['meta_query'][]     = array(
+		'key' => 'bp_blogs_post_comment_id',
+	);
+
+	return $retval;
+}
+add_filter( 'bp_after_has_activities_parse_args', 'bp_blogs_activity_comment_filter_stream' );
