diff --git src/bp-messages/bp-messages-actions.php src/bp-messages/bp-messages-actions.php
index e145f85..eb77706 100644
--- src/bp-messages/bp-messages-actions.php
+++ src/bp-messages/bp-messages-actions.php
@@ -247,8 +247,13 @@ function messages_action_conversation() {
 		bp_core_redirect( bp_displayed_user_domain() . bp_get_messages_slug() . '/view/' . $thread_id . '/' );
 	}
 
-	// Mark message read.
-	messages_mark_thread_read( $thread_id );
+	/*
+	 * Mark message read, but only run on the logged-in user's profile.
+	 * If an admin visits a thread, it shouldn't change the read status.
+	 */
+	if ( bp_is_my_profile() ) {
+		messages_mark_thread_read( $thread_id );
+	}
 
 	/**
 	 * Fires after processing a view request for a single message thread.
@@ -319,7 +324,7 @@ function bp_messages_action_mark_read() {
 	}
 
 	// Check access to the message and mark as read.
-	if ( messages_check_thread_access( $id ) ) {
+	if ( messages_check_thread_access( $id ) || bp_current_user_can( 'bp_moderate' ) ) {
 		messages_mark_thread_read( $id );
 		bp_core_add_message( __( 'Message marked as read.', 'buddypress' ) );
 	} else {
@@ -360,7 +365,7 @@ function bp_messages_action_mark_unread() {
 	}
 
 	// Check access to the message and mark unread.
-	if ( messages_check_thread_access( $id ) ) {
+	if ( messages_check_thread_access( $id ) || bp_current_user_can( 'bp_moderate' ) ) {
 		messages_mark_thread_unread( $id );
 		bp_core_add_message( __( 'Message marked unread.', 'buddypress' ) );
 	} else {
@@ -404,7 +409,7 @@ function bp_messages_action_bulk_manage() {
 
 	// Make sure the user has access to all notifications before managing them.
 	foreach ( $messages as $message ) {
-		if ( ! messages_check_thread_access( $message ) ) {
+		if ( ! messages_check_thread_access( $message ) && ! bp_current_user_can( 'bp_moderate' ) ) {
 			bp_core_add_message( __( 'There was a problem managing your messages.', 'buddypress' ), 'error' );
 			bp_core_redirect( bp_displayed_user_domain() . bp_get_messages_slug() . '/' . bp_current_action() . '/' );
 		}
diff --git src/bp-messages/bp-messages-cache.php src/bp-messages/bp-messages-cache.php
index 434c3a8..6883c96 100644
--- src/bp-messages/bp-messages-cache.php
+++ src/bp-messages/bp-messages-cache.php
@@ -74,8 +74,9 @@ add_action( 'messages_message_after_save', 'bp_messages_clear_cache_on_message_s
  *
  * @param int|array $thread_ids If single thread, the thread ID.
  *                              Otherwise, an array of thread IDs.
+ * @param int       $user_id    ID of the user that the threads were deleted for.
  */
-function bp_messages_clear_cache_on_message_delete( $thread_ids ) {
+function bp_messages_clear_cache_on_message_delete( $thread_ids, $user_id ) {
 	// Delete thread and thread recipient cache.
 	foreach( (array) $thread_ids as $thread_id ) {
 		wp_cache_delete( $thread_id, 'bp_messages_threads' );
@@ -83,9 +84,9 @@ function bp_messages_clear_cache_on_message_delete( $thread_ids ) {
 	}
 
 	// Delete unread count for logged-in user.
-	wp_cache_delete( bp_loggedin_user_id(), 'bp_messages_unread_count' );
+	wp_cache_delete( $user_id, 'bp_messages_unread_count' );
 }
-add_action( 'messages_delete_thread', 'bp_messages_clear_cache_on_message_delete' );
+add_action( 'messages_delete_thread', 'bp_messages_clear_cache_on_message_delete', 10, 2 );
 
 /**
  * Invalidate cache for notices.
diff --git src/bp-messages/bp-messages-functions.php src/bp-messages/bp-messages-functions.php
index 16e70b8..f78ddcf 100644
--- src/bp-messages/bp-messages-functions.php
+++ src/bp-messages/bp-messages-functions.php
@@ -254,7 +254,10 @@ function messages_send_notice( $subject, $message ) {
 function messages_delete_thread( $thread_ids, $user_id = 0 ) {
 
 	if ( empty( $user_id ) ) {
-		$user_id = bp_loggedin_user_id();
+		$user_id =
+			bp_displayed_user_id() ?
+			bp_displayed_user_id() :
+			bp_loggedin_user_id();
 	}
 
 	/**
@@ -380,10 +383,6 @@ function messages_remove_callback_values() {
  * @return int
  */
 function messages_get_unread_count( $user_id = 0 ) {
-	if ( empty( $user_id ) ) {
-		$user_id = bp_loggedin_user_id();
-	}
-
 	return BP_Messages_Thread::get_inbox_count( $user_id );
 }
 
diff --git src/bp-messages/bp-messages-notifications.php src/bp-messages/bp-messages-notifications.php
index 4a6b025..f6d2284 100644
--- src/bp-messages/bp-messages-notifications.php
+++ src/bp-messages/bp-messages-notifications.php
@@ -171,6 +171,14 @@ add_action( 'messages_message_sent', 'bp_messages_message_sent_add_notification'
 function bp_messages_screen_conversation_mark_notifications() {
 	global $thread_template;
 
+	/*
+	 * Only run on the logged-in user's profile.
+	 * If an admin visits a thread, it shouldn't change the read status.
+	 */
+	if ( ! bp_is_my_profile() ) {
+		return;
+	}
+
 	// Get unread PM notifications for the user.
 	$new_pm_notifications = BP_Notifications_Notification::get( array(
 		'user_id'           => bp_loggedin_user_id(),
diff --git src/bp-messages/bp-messages-star.php src/bp-messages/bp-messages-star.php
index 2b4e667..54e06c8 100644
--- src/bp-messages/bp-messages-star.php
+++ src/bp-messages/bp-messages-star.php
@@ -41,7 +41,7 @@ function bp_get_messages_starred_slug() {
  */
 function bp_messages_is_message_starred( $mid = 0, $user_id = 0 ) {
 	if ( empty( $user_id ) ) {
-		$user_id = bp_loggedin_user_id();
+		$user_id = bp_displayed_user_id();
 	}
 
 	if ( empty( $mid ) ) {
@@ -254,7 +254,7 @@ function bp_messages_star_set_action( $args = array() ) {
 		'action'     => 'star',
 		'thread_id'  => 0,
 		'message_id' => 0,
-		'user_id'    => bp_loggedin_user_id(),
+		'user_id'    => bp_displayed_user_id(),
 		'bulk'       => false
 	) );
 
@@ -397,7 +397,7 @@ function bp_messages_star_action_handler() {
 	) );
 
 	// Redirect back to previous screen.
-	$redirect = wp_get_referer() ? wp_get_referer() : bp_loggedin_user_domain() . bp_get_messages_slug();
+	$redirect = wp_get_referer() ? wp_get_referer() : bp_displayed_user_domain() . bp_get_messages_slug();
 	bp_core_redirect( $redirect );
 	die();
 }
diff --git src/bp-messages/bp-messages-template.php src/bp-messages/bp-messages-template.php
index c89d691..aa7de6e 100644
--- src/bp-messages/bp-messages-template.php
+++ src/bp-messages/bp-messages-template.php
@@ -58,7 +58,7 @@ function bp_has_message_threads( $args = array() ) {
 
 	// User ID
 	// @todo displayed user for moderators that get this far?
-	$user_id = bp_loggedin_user_id();
+	$user_id = bp_displayed_user_id();
 
 	// Search Terms.
 	$search_terms = isset( $_REQUEST['s'] ) ? stripslashes( $_REQUEST['s'] ) : '';
@@ -304,7 +304,7 @@ function bp_message_thread_view_link( $thread_id = 0 ) {
 		 * @param string $value     Permalink of a particular thread.
 		 * @param int    $thread_id ID of the thread.
 		 */
-		return apply_filters( 'bp_get_message_thread_view_link', trailingslashit( bp_loggedin_user_domain() . bp_get_messages_slug() . '/view/' . $thread_id ), $thread_id );
+		return apply_filters( 'bp_get_message_thread_view_link', trailingslashit( bp_displayed_user_domain() . bp_get_messages_slug() . '/view/' . $thread_id ), $thread_id );
 	}
 
 /**
@@ -329,7 +329,7 @@ function bp_message_thread_delete_link() {
 		 * @param string $value URL for deleting the current thread.
 		 * @param string $value Text indicating action being executed.
 		 */
-		return apply_filters( 'bp_get_message_thread_delete_link', wp_nonce_url( trailingslashit( bp_loggedin_user_domain() . bp_get_messages_slug() . '/' . bp_current_action() . '/delete/' . $messages_template->thread->thread_id ), 'messages_delete_thread' ) );
+		return apply_filters( 'bp_get_message_thread_delete_link', wp_nonce_url( trailingslashit( bp_displayed_user_domain() . bp_get_messages_slug() . '/' . bp_current_action() . '/delete/' . $messages_template->thread->thread_id ), 'messages_delete_thread' ) );
 	}
 
 /**
@@ -361,7 +361,7 @@ function bp_the_message_thread_mark_unread_url() {
 		);
 
 		// Base unread URL.
-		$url = trailingslashit( bp_loggedin_user_domain() . bp_get_messages_slug() . '/' . bp_current_action() . '/unread' );
+		$url = trailingslashit( bp_displayed_user_domain() . bp_get_messages_slug() . '/' . bp_current_action() . '/unread' );
 
 		// Add the args to the URL.
 		$url = add_query_arg( $args, $url );
@@ -408,7 +408,7 @@ function bp_the_message_thread_mark_read_url() {
 		);
 
 		// Base read URL.
-		$url = trailingslashit( bp_loggedin_user_domain() . bp_get_messages_slug() . '/' . bp_current_action() . '/read' );
+		$url = trailingslashit( bp_displayed_user_domain() . bp_get_messages_slug() . '/' . bp_current_action() . '/read' );
 
 		// Add the args to the URL.
 		$url = add_query_arg( $args, $url );
@@ -696,16 +696,26 @@ function bp_message_thread_avatar( $args = '' ) {
 
 /**
  * Output the unread messages count for the current inbox.
+ *
+ * @since 2.6.x Added $user_id argument.
+ *
+ * @param int $user_id The user ID.
+ *
+ * @return int $unread_count Total inbox unread count for user.
  */
-function bp_total_unread_messages_count() {
-	echo bp_get_total_unread_messages_count();
+function bp_total_unread_messages_count( $user_id = 0 ) {
+	echo bp_get_total_unread_messages_count( $user_id );
 }
 	/**
 	 * Get the unread messages count for the current inbox.
 	 *
-	 * @return int
+	 * @since 2.6.x Added $user_id argument.
+	 *
+	 * @param int $user_id The user ID.
+	 *
+	 * @return int $unread_count Total inbox unread count for user.
 	 */
-	function bp_get_total_unread_messages_count() {
+	function bp_get_total_unread_messages_count( $user_id = 0 ) {
 
 		/**
 		 * Filters the unread messages count for the current inbox.
@@ -714,7 +724,7 @@ function bp_total_unread_messages_count() {
 		 *
 		 * @param int $value Unread messages count for the current inbox.
 		 */
-		return apply_filters( 'bp_get_total_unread_messages_count', BP_Messages_Thread::get_inbox_count() );
+		return apply_filters( 'bp_get_total_unread_messages_count', BP_Messages_Thread::get_inbox_count( $user_id ) );
 	}
 
 /**
@@ -824,7 +834,7 @@ function bp_messages_form_action() {
 		 *
 		 * @param string $value The form action.
 		 */
-		return apply_filters( 'bp_get_messages_form_action', trailingslashit( bp_loggedin_user_domain() . bp_get_messages_slug() . '/' . bp_current_action() . '/' . bp_action_variable( 0 ) ) );
+		return apply_filters( 'bp_get_messages_form_action', trailingslashit( bp_displayed_user_domain() . bp_get_messages_slug() . '/' . bp_current_action() . '/' . bp_action_variable( 0 ) ) );
 	}
 
 /**
@@ -1153,7 +1163,7 @@ function bp_message_notice_delete_link() {
 		 * @param string $value URL for deleting the current notice.
 		 * @param string $value Text indicating action being executed.
 		 */
-		return apply_filters( 'bp_get_message_notice_delete_link', wp_nonce_url( bp_loggedin_user_domain() . bp_get_messages_slug() . '/notices/delete/' . $messages_template->thread->id, 'messages_delete_thread' ) );
+		return apply_filters( 'bp_get_message_notice_delete_link', wp_nonce_url( bp_displayed_user_domain() . bp_get_messages_slug() . '/notices/delete/' . $messages_template->thread->id, 'messages_delete_thread' ) );
 	}
 
 /**
@@ -1171,9 +1181,9 @@ function bp_message_activate_deactivate_link() {
 		global $messages_template;
 
 		if ( 1 === (int) $messages_template->thread->is_active ) {
-			$link = wp_nonce_url( trailingslashit( bp_loggedin_user_domain() . bp_get_messages_slug() . '/notices/deactivate/' . $messages_template->thread->id ), 'messages_deactivate_notice' );
+			$link = wp_nonce_url( trailingslashit( bp_displayed_user_domain() . bp_get_messages_slug() . '/notices/deactivate/' . $messages_template->thread->id ), 'messages_deactivate_notice' );
 		} else {
-			$link = wp_nonce_url( trailingslashit( bp_loggedin_user_domain() . bp_get_messages_slug() . '/notices/activate/' . $messages_template->thread->id ), 'messages_activate_notice' );
+			$link = wp_nonce_url( trailingslashit( bp_displayed_user_domain() . bp_get_messages_slug() . '/notices/activate/' . $messages_template->thread->id ), 'messages_activate_notice' );
 		}
 
 		/**
@@ -1634,9 +1644,23 @@ function bp_the_thread_recipients_list() {
 				}
 
 				$recipient_links[] = $recipient_link;
+			} else {
+				$recipient_links[] = __( 'you', 'buddypress' );
 			}
 		}
 
+		// Convert to natural language.
+		$size   = count( $recipient_links );
+		$string = '';
+
+		$recipient_links[ $size - 1 ] = _x( 'and ', 'Joining word in a list of message recipients', 'buddypress' ) .  $recipient_links[ $size - 1 ];
+
+		if ( $size >= 3 ) {
+			$recipient_links = implode( ', ', $recipient_links );
+		} else {
+			$recipient_links = implode( ' ', $recipient_links );
+		}
+
 		/**
 		 * Filters the HTML links to the profiles of recipients in the current thread.
 		 *
@@ -1644,7 +1668,7 @@ function bp_the_thread_recipients_list() {
 		 *
 		 * @param string $value Comma-separated list of recipient HTML links for current thread.
 		 */
-		return apply_filters( 'bp_get_the_thread_recipients_list', implode( ', ', $recipient_links ) );
+		return apply_filters( 'bp_get_the_thread_recipients_list', $recipient_links );
 	}
 
 /**
@@ -1919,7 +1943,7 @@ function bp_the_thread_delete_link() {
 		 * @param string $value URL for deleting the current thread.
 		 * @param string $value Text indicating action being executed.
 		 */
-		return apply_filters( 'bp_get_message_thread_delete_link', wp_nonce_url( bp_loggedin_user_domain() . bp_get_messages_slug() . '/inbox/delete/' . bp_get_the_thread_id(), 'messages_delete_thread' ) );
+		return apply_filters( 'bp_get_message_thread_delete_link', wp_nonce_url( bp_displayed_user_domain() . bp_get_messages_slug() . '/inbox/delete/' . bp_get_the_thread_id(), 'messages_delete_thread' ) );
 	}
 
 /**
diff --git src/bp-messages/classes/class-bp-messages-component.php src/bp-messages/classes/class-bp-messages-component.php
index baf5207..7049563 100644
--- src/bp-messages/classes/class-bp-messages-component.php
+++ src/bp-messages/classes/class-bp-messages-component.php
@@ -145,7 +145,7 @@ class BP_Messages_Component extends BP_Component {
 
 		// Only grab count if we're on a user page and current user has access.
 		if ( bp_is_user() && bp_user_has_access() ) {
-			$count    = bp_get_total_unread_messages_count();
+			$count    = bp_get_total_unread_messages_count( bp_displayed_user_id() );
 			$class    = ( 0 === $count ) ? 'no-count' : 'count';
 			$nav_name = sprintf(
 				/* translators: %s: Unread message count for the current user */
@@ -204,26 +204,35 @@ class BP_Messages_Component extends BP_Component {
 			'user_has_access' => $access
 		);
 
-		$sub_nav[] = array(
-			'name'            => __( 'Compose', 'buddypress' ),
-			'slug'            => 'compose',
-			'parent_url'      => $messages_link,
-			'parent_slug'     => $slug,
-			'screen_function' => 'messages_screen_compose',
-			'position'        => 30,
-			'user_has_access' => $access
-		);
+		// Show certain screens only if the current user is the displayed user.
+		if ( bp_is_my_profile() ) {
 
-		if ( bp_current_user_can( 'bp_moderate' ) ) {
+			// Show "Compose" on the logged-in user's profile only.
 			$sub_nav[] = array(
-				'name'            => __( 'Notices', 'buddypress' ),
-				'slug'            => 'notices',
+				'name'            => __( 'Compose', 'buddypress' ),
+				'slug'            => 'compose',
 				'parent_url'      => $messages_link,
 				'parent_slug'     => $slug,
-				'screen_function' => 'messages_screen_notices',
-				'position'        => 90,
-				'user_has_access' => true
+				'screen_function' => 'messages_screen_compose',
+				'position'        => 30,
+				'user_has_access' => $access
 			);
+
+			/*
+			 * Show "Notices" on the logged-in user's profile only
+			 * and then only if the user can create notices.
+			 */
+			if ( bp_current_user_can( 'bp_moderate' ) ) {
+				$sub_nav[] = array(
+					'name'            => __( 'Notices', 'buddypress' ),
+					'slug'            => 'notices',
+					'parent_url'      => $messages_link,
+					'parent_slug'     => $slug,
+					'screen_function' => 'messages_screen_notices',
+					'position'        => 90,
+					'user_has_access' => true
+				);
+			}
 		}
 
 		parent::setup_nav( $main_nav, $sub_nav );
@@ -243,7 +252,7 @@ class BP_Messages_Component extends BP_Component {
 			$messages_link = trailingslashit( bp_loggedin_user_domain() . bp_get_messages_slug() );
 
 			// Unread message count.
-			$count = messages_get_unread_count();
+			$count = messages_get_unread_count( bp_loggedin_user_id() );
 			if ( !empty( $count ) ) {
 				$title = sprintf(
 					/* translators: %s: Unread message count for the current user */
diff --git src/bp-messages/classes/class-bp-messages-thread.php src/bp-messages/classes/class-bp-messages-thread.php
index 7b5356d..c868d55 100644
--- src/bp-messages/classes/class-bp-messages-thread.php
+++ src/bp-messages/classes/class-bp-messages-thread.php
@@ -144,9 +144,14 @@ class BP_Messages_Thread {
 			$order = 'ASC';
 		}
 
+		$user_id =
+			bp_displayed_user_id() ?
+			bp_displayed_user_id() :
+			bp_loggedin_user_id();
+
 		// Merge $args with our defaults.
 		$r = wp_parse_args( $args, array(
-			'user_id'           => bp_loggedin_user_id(),
+			'user_id'           => $user_id,
 			'update_meta_cache' => true
 		) );
 
@@ -613,11 +618,16 @@ class BP_Messages_Thread {
 	public static function mark_as_read( $thread_id = 0 ) {
 		global $wpdb;
 
+		$user_id =
+			bp_displayed_user_id() ?
+			bp_displayed_user_id() :
+			bp_loggedin_user_id();
+
 		$bp     = buddypress();
-		$retval = $wpdb->query( $wpdb->prepare( "UPDATE {$bp->messages->table_name_recipients} SET unread_count = 0 WHERE user_id = %d AND thread_id = %d", bp_loggedin_user_id(), $thread_id ) );
+		$retval = $wpdb->query( $wpdb->prepare( "UPDATE {$bp->messages->table_name_recipients} SET unread_count = 0 WHERE user_id = %d AND thread_id = %d", $user_id, $thread_id ) );
 
 		wp_cache_delete( 'thread_recipients_' . $thread_id, 'bp_messages' );
-		wp_cache_delete( bp_loggedin_user_id(), 'bp_messages_unread_count' );
+		wp_cache_delete( $user_id, 'bp_messages_unread_count' );
 
 		/**
 		 * Fires when messages thread was marked as read.
@@ -643,11 +653,16 @@ class BP_Messages_Thread {
 	public static function mark_as_unread( $thread_id = 0 ) {
 		global $wpdb;
 
+		$user_id =
+			bp_displayed_user_id() ?
+			bp_displayed_user_id() :
+			bp_loggedin_user_id();
+
 		$bp     = buddypress();
-		$retval = $wpdb->query( $wpdb->prepare( "UPDATE {$bp->messages->table_name_recipients} SET unread_count = 1 WHERE user_id = %d AND thread_id = %d", bp_loggedin_user_id(), $thread_id ) );
+		$retval = $wpdb->query( $wpdb->prepare( "UPDATE {$bp->messages->table_name_recipients} SET unread_count = 1 WHERE user_id = %d AND thread_id = %d", $user_id, $thread_id ) );
 
 		wp_cache_delete( 'thread_recipients_' . $thread_id, 'bp_messages' );
-		wp_cache_delete( bp_loggedin_user_id(), 'bp_messages_unread_count' );
+		wp_cache_delete( $user_id, 'bp_messages_unread_count' );
 
 		/**
 		 * Fires when messages thread was marked as unread.
diff --git src/bp-templates/bp-legacy/buddypress/members/single/messages/messages-loop.php src/bp-templates/bp-legacy/buddypress/members/single/messages/messages-loop.php
index 4b37ead..148d5f3 100644
--- src/bp-templates/bp-legacy/buddypress/members/single/messages/messages-loop.php
+++ src/bp-templates/bp-legacy/buddypress/members/single/messages/messages-loop.php
@@ -50,7 +50,7 @@ do_action( 'bp_before_member_messages_loop' ); ?>
 	 */
 	do_action( 'bp_before_member_messages_threads' ); ?>
 
-	<form action="<?php echo bp_loggedin_user_domain() . bp_get_messages_slug() . '/' . bp_current_action() ?>/bulk-manage/" method="post" id="messages-bulk-management">
+	<form action="<?php echo bp_displayed_user_domain() . bp_get_messages_slug() . '/' . bp_current_action() ?>/bulk-manage/" method="post" id="messages-bulk-management">
 
 		<table id="message-threads" class="messages-notices">
 
diff --git src/bp-templates/bp-legacy/buddypress/members/single/messages/single.php src/bp-templates/bp-legacy/buddypress/members/single/messages/single.php
index 1b31bbe..deae005 100644
--- src/bp-templates/bp-legacy/buddypress/members/single/messages/single.php
+++ src/bp-templates/bp-legacy/buddypress/members/single/messages/single.php
@@ -35,7 +35,7 @@
 
 				<?php else : ?>
 
-					<?php printf( __( 'Conversation between %s and you.', 'buddypress' ), bp_get_thread_recipients_list() ); ?>
+					<?php printf( __( 'Conversation between %s.', 'buddypress' ), bp_get_thread_recipients_list() ); ?>
 
 				<?php endif; ?>
 
