diff --git a/src/tags b/src/tags
new file mode 100644
index 0000000000..96da1e59b9
Binary files /dev/null and b/src/tags differ
diff --git a/src/wp-includes/comment-template.php b/src/wp-includes/comment-template.php
index d08f5cf62e..2e3ca324dc 100644
--- a/src/wp-includes/comment-template.php
+++ b/src/wp-includes/comment-template.php
@@ -2650,3 +2650,49 @@ function comment_form( $args = array(), $post_id = null ) {
 	 */
 	do_action( 'comment_form_after' );
 }
+
+
+/**
+ * Returns a summary of a comment to be used in email notifications.
+ *
+ * @access private
+ * @since 5.4
+ *
+ * @param int|WP_Comment $comment WP_Comment or the ID of the comment for which to retrieve the author.
+ * @return string Comment Text.
+ */
+function _wp_get_comment_notify_summary( $comment ) {
+	$comment = get_comment( $comment );
+	if ( empty( $comment ) || empty( $comment->comment_post_ID ) )
+		return false;
+
+	$comment_author_domain = '';
+	if ( WP_Http::is_ip_address( $comment->comment_author_IP ) ) {        
+		$comment_author_domain = gethostbyaddr( $comment->comment_author_IP );
+	}
+
+	$type = get_comment_type( $comment );
+	$text = wp_specialchars_decode( get_comment_text( $comment ) );
+
+	if ( in_array( $type, array( 'pingback', 'trackback' ), true ) ) {
+        	/* translators: 1: website name, 2: website IP, 3: website hostname */
+		$summary_text = sprintf( __('Website: %1$s (IP: %2$s, %3$s)'), get_comment_author( $comment ), get_comment_author_ip( $comment ), $comment_author_domain ) . "\r\n";
+		$summary_text .= sprintf( __( 'URL: %s' ), get_comment_author_url( $comment ) ) . "\r\n";
+		$summary_text .= sprintf( __( 'Excerpt: %s' ), "\r\n" . $text ) . "\r\n\r\n";
+	} else {
+		/* translators: 1: comment author, 2: author IP, 3: author domain */
+		$summary_text = sprintf( __( 'Author: %1$s (IP: %2$s, %3$s)' ), get_comment_author( $comment ), get_comment_author_ip ($comment ), $comment_author_domain ) . "\r\n";
+		$summary_text .= sprintf( __( 'E-mail: %s' ), get_comment_author_email( $comment ) ) . "\r\n";
+		$summary_text .= sprintf( __( 'URL: %s' ), get_comment_author_url( $comment ) ) . "\r\n";
+		$summary_text .= sprintf( __('Comment: %s' ), "\r\n" . $text ) . "\r\n\r\n";
+	}
+	/**
+	 * Filter the summary of a comment used in email notifications.
+	 *
+	 * @since 5.4
+	 *
+	 * @param string $summary_text The comment summary.
+	 * @param WP_Comment $comment The comment being notified
+	 */
+	return apply_filters( 'comment_notify_summary', $summary_text, $comment );
+}
diff --git a/src/wp-includes/pluggable.php b/src/wp-includes/pluggable.php
index 47bdafd395..ec63a21e16 100644
--- a/src/wp-includes/pluggable.php
+++ b/src/wp-includes/pluggable.php
@@ -1551,60 +1551,21 @@ if ( ! function_exists( 'wp_notify_postauthor' ) ) :
 
 		$switched_locale = switch_to_locale( get_locale() );
 
-		$comment_author_domain = '';
-		if ( WP_Http::is_ip_address( $comment->comment_author_IP ) ) {
-			$comment_author_domain = gethostbyaddr( $comment->comment_author_IP );
-		}
 
 		// The blogname option is escaped with esc_html on the way into the database in sanitize_option
 		// we want to reverse this for the plain text arena of emails.
 		$blogname        = wp_specialchars_decode( get_option( 'blogname' ), ENT_QUOTES );
-		$comment_content = wp_specialchars_decode( $comment->comment_content );
-
-		switch ( $comment->comment_type ) {
-			case 'trackback':
-				/* translators: %s: Post title. */
-				$notify_message = sprintf( __( 'New trackback on your post "%s"' ), $post->post_title ) . "\r\n";
-				/* translators: 1: Trackback/pingback website name, 2: Website IP address, 3: Website hostname. */
-				$notify_message .= sprintf( __( 'Website: %1$s (IP address: %2$s, %3$s)' ), $comment->comment_author, $comment->comment_author_IP, $comment_author_domain ) . "\r\n";
-				/* translators: %s: Trackback/pingback/comment author URL. */
-				$notify_message .= sprintf( __( 'URL: %s' ), $comment->comment_author_url ) . "\r\n";
-				/* translators: %s: Comment text. */
-				$notify_message .= sprintf( __( 'Comment: %s' ), "\r\n" . $comment_content ) . "\r\n\r\n";
-				$notify_message .= __( 'You can see all trackbacks on this post here:' ) . "\r\n";
-				/* translators: Trackback notification email subject. 1: Site title, 2: Post title. */
-				$subject = sprintf( __( '[%1$s] Trackback: "%2$s"' ), $blogname, $post->post_title );
-				break;
-			case 'pingback':
-				/* translators: %s: Post title. */
-				$notify_message = sprintf( __( 'New pingback on your post "%s"' ), $post->post_title ) . "\r\n";
-				/* translators: 1: Trackback/pingback website name, 2: Website IP address, 3: Website hostname. */
-				$notify_message .= sprintf( __( 'Website: %1$s (IP address: %2$s, %3$s)' ), $comment->comment_author, $comment->comment_author_IP, $comment_author_domain ) . "\r\n";
-				/* translators: %s: Trackback/pingback/comment author URL. */
-				$notify_message .= sprintf( __( 'URL: %s' ), $comment->comment_author_url ) . "\r\n";
-				/* translators: %s: Comment text. */
-				$notify_message .= sprintf( __( 'Comment: %s' ), "\r\n" . $comment_content ) . "\r\n\r\n";
-				$notify_message .= __( 'You can see all pingbacks on this post here:' ) . "\r\n";
-				/* translators: Pingback notification email subject. 1: Site title, 2: Post title. */
-				$subject = sprintf( __( '[%1$s] Pingback: "%2$s"' ), $blogname, $post->post_title );
-				break;
-			default: // Comments
-				/* translators: %s: Post title. */
-				$notify_message = sprintf( __( 'New comment on your post "%s"' ), $post->post_title ) . "\r\n";
-				/* translators: 1: Comment author's name, 2: Comment author's IP address, 3: Comment author's hostname. */
-				$notify_message .= sprintf( __( 'Author: %1$s (IP address: %2$s, %3$s)' ), $comment->comment_author, $comment->comment_author_IP, $comment_author_domain ) . "\r\n";
-				/* translators: %s: Comment author email. */
-				$notify_message .= sprintf( __( 'Email: %s' ), $comment->comment_author_email ) . "\r\n";
-				/* translators: %s: Trackback/pingback/comment author URL. */
-				$notify_message .= sprintf( __( 'URL: %s' ), $comment->comment_author_url ) . "\r\n";
-				/* translators: %s: Comment text. */
-				$notify_message .= sprintf( __( 'Comment: %s' ), "\r\n" . $comment_content ) . "\r\n\r\n";
-				$notify_message .= __( 'You can see all comments on this post here:' ) . "\r\n";
-				/* translators: Comment notification email subject. 1: Site title, 2: Post title. */
-				$subject = sprintf( __( '[%1$s] Comment: "%2$s"' ), $blogname, $post->post_title );
-				break;
-		}
+
+		/* translators: %s: Post title. */
+		$notify_message = sprintf( __( 'New response to your post "%s"' ), get_the_title( $post ) ) . "\r\n";
+		$notify_message .= _wp_get_comment_notify_summary( $comment );
+		
+		/* translators: 1: blog name, 2: post title */
+		$subject = sprintf( __( '[%1$s] Response: "%2$s"' ), $blogname, get_the_title( $post ) );
+		
+		$notify_message .= __( 'You can see all responses to this post here:' ) . "\r\n";
 		$notify_message .= get_permalink( $comment->comment_post_ID ) . "#comments\r\n\r\n";
+		
 		/* translators: %s: Comment URL. */
 		$notify_message .= sprintf( __( 'Permalink: %s' ), get_comment_link( $comment ) ) . "\r\n";
 
@@ -1729,53 +1690,15 @@ if ( ! function_exists( 'wp_notify_moderator' ) ) :
 
 		$switched_locale = switch_to_locale( get_locale() );
 
-		$comment_author_domain = '';
-		if ( WP_Http::is_ip_address( $comment->comment_author_IP ) ) {
-			$comment_author_domain = gethostbyaddr( $comment->comment_author_IP );
-		}
-
 		$comments_waiting = $wpdb->get_var( "SELECT count(comment_ID) FROM $wpdb->comments WHERE comment_approved = '0'" );
 
 		// The blogname option is escaped with esc_html on the way into the database in sanitize_option
 		// we want to reverse this for the plain text arena of emails.
 		$blogname        = wp_specialchars_decode( get_option( 'blogname' ), ENT_QUOTES );
-		$comment_content = wp_specialchars_decode( $comment->comment_content );
-
-		switch ( $comment->comment_type ) {
-			case 'trackback':
-				/* translators: %s: Post title. */
-				$notify_message  = sprintf( __( 'A new trackback on the post "%s" is waiting for your approval' ), $post->post_title ) . "\r\n";
-				$notify_message .= get_permalink( $comment->comment_post_ID ) . "\r\n\r\n";
-				/* translators: 1: Trackback/pingback website name, 2: Website IP address, 3: Website hostname. */
-				$notify_message .= sprintf( __( 'Website: %1$s (IP address: %2$s, %3$s)' ), $comment->comment_author, $comment->comment_author_IP, $comment_author_domain ) . "\r\n";
-				/* translators: %s: Trackback/pingback/comment author URL. */
-				$notify_message .= sprintf( __( 'URL: %s' ), $comment->comment_author_url ) . "\r\n";
-				$notify_message .= __( 'Trackback excerpt: ' ) . "\r\n" . $comment_content . "\r\n\r\n";
-				break;
-			case 'pingback':
-				/* translators: %s: Post title. */
-				$notify_message  = sprintf( __( 'A new pingback on the post "%s" is waiting for your approval' ), $post->post_title ) . "\r\n";
-				$notify_message .= get_permalink( $comment->comment_post_ID ) . "\r\n\r\n";
-				/* translators: 1: Trackback/pingback website name, 2: Website IP address, 3: Website hostname. */
-				$notify_message .= sprintf( __( 'Website: %1$s (IP address: %2$s, %3$s)' ), $comment->comment_author, $comment->comment_author_IP, $comment_author_domain ) . "\r\n";
-				/* translators: %s: Trackback/pingback/comment author URL. */
-				$notify_message .= sprintf( __( 'URL: %s' ), $comment->comment_author_url ) . "\r\n";
-				$notify_message .= __( 'Pingback excerpt: ' ) . "\r\n" . $comment_content . "\r\n\r\n";
-				break;
-			default: // Comments
-				/* translators: %s: Post title. */
-				$notify_message  = sprintf( __( 'A new comment on the post "%s" is waiting for your approval' ), $post->post_title ) . "\r\n";
-				$notify_message .= get_permalink( $comment->comment_post_ID ) . "\r\n\r\n";
-				/* translators: 1: Comment author's name, 2: Comment author's IP address, 3: Comment author's hostname. */
-				$notify_message .= sprintf( __( 'Author: %1$s (IP address: %2$s, %3$s)' ), $comment->comment_author, $comment->comment_author_IP, $comment_author_domain ) . "\r\n";
-				/* translators: %s: Comment author email. */
-				$notify_message .= sprintf( __( 'Email: %s' ), $comment->comment_author_email ) . "\r\n";
-				/* translators: %s: Trackback/pingback/comment author URL. */
-				$notify_message .= sprintf( __( 'URL: %s' ), $comment->comment_author_url ) . "\r\n";
-				/* translators: %s: Comment text. */
-				$notify_message .= sprintf( __( 'Comment: %s' ), "\r\n" . $comment_content ) . "\r\n\r\n";
-				break;
-		}
+
+		$notify_message  = sprintf( __( 'A new response to the post "%s" is waiting for your approval' ), get_the_title( $post ) ) . "\r\n";
+
+		$notify_message .= _wp_get_comment_notify_summary( $comment );
 
 		/* translators: Comment moderation. %s: Comment action URL. */
 		$notify_message .= sprintf( __( 'Approve it: %s' ), admin_url( "comment.php?action=approve&c={$comment_id}#wpbody-content" ) ) . "\r\n";
@@ -1794,8 +1717,8 @@ if ( ! function_exists( 'wp_notify_moderator' ) ) :
 		$notify_message .= sprintf(
 			/* translators: Comment moderation. %s: Number of comments awaiting approval. */
 			_n(
-				'Currently %s comment is waiting for approval. Please visit the moderation panel:',
-				'Currently %s comments are waiting for approval. Please visit the moderation panel:',
+				'Currently %s response is waiting for approval. Please visit the moderation panel:',
+				'Currently %s responses are waiting for approval. Please visit the moderation panel:',
 				$comments_waiting
 			),
 			number_format_i18n( $comments_waiting )
@@ -1803,7 +1726,7 @@ if ( ! function_exists( 'wp_notify_moderator' ) ) :
 		$notify_message .= admin_url( 'edit-comments.php?comment_status=moderated#wpbody-content' ) . "\r\n";
 
 		/* translators: Comment moderation notification email subject. 1: Site title, 2: Post title. */
-		$subject         = sprintf( __( '[%1$s] Please moderate: "%2$s"' ), $blogname, $post->post_title );
+		$subject         = sprintf( __( '[%1$s] Please moderate: "%2$s"' ), $blogname, get_the_title( $post ) );
 		$message_headers = '';
 
 		/**
