diff --git a/lib/components/chat-mention-provider.react.js b/lib/components/chat-mention-provider.react.js
--- a/lib/components/chat-mention-provider.react.js
+++ b/lib/components/chat-mention-provider.react.js
@@ -7,8 +7,8 @@
 import SentencePrefixSearchIndex from '../shared/sentence-prefix-search-index.js';
 import { threadTypes } from '../types/thread-types-enum.js';
 import type {
-  ChatMentionCandidates,
   ChatMentionCandidatesObj,
+  ChatMentionCandidate,
   ResolvedThreadInfo,
   ThreadInfo,
 } from '../types/thread-types.js';
@@ -80,7 +80,7 @@
 } {
   const result: {
     [string]: {
-      [string]: ResolvedThreadInfo,
+      [string]: ChatMentionCandidate,
     },
   } = {};
   const visitedGenesisThreads = new Set<string>();
@@ -91,15 +91,20 @@
     if (!currentThreadCommunity) {
       if (!result[currentThreadID]) {
         result[currentThreadID] = {
-          [currentThreadID]: currentResolvedThreadInfo,
+          [currentThreadID]: {
+            threadInfo: currentResolvedThreadInfo,
+            rawChatName: threadInfos[currentThreadID].uiName,
+          },
         };
       }
       continue;
     }
     if (!result[currentThreadCommunity]) {
       result[currentThreadCommunity] = {};
-      result[currentThreadCommunity][currentThreadCommunity] =
-        resolvedThreadInfos[currentThreadCommunity];
+      result[currentThreadCommunity][currentThreadCommunity] = {
+        threadInfo: resolvedThreadInfos[currentThreadCommunity],
+        rawChatName: threadInfos[currentThreadCommunity].uiName,
+      };
     }
     // Handle GENESIS community case: mentioning inside GENESIS should only
     // show chats and threads inside the top level that is below GENESIS.
@@ -146,7 +151,10 @@
           result[lastThreadInTraversePath.id] = {};
         }
         for (const threadInfo of threadTraversePath) {
-          result[lastThreadInTraversePath.id][threadInfo.id] = threadInfo;
+          result[lastThreadInTraversePath.id][threadInfo.id] = {
+            threadInfo,
+            rawChatName: threadInfos[threadInfo.id].uiName,
+          };
           communityThreadIDForGenesisThreads[threadInfo.id] =
             lastThreadInTraversePath.id;
         }
@@ -154,8 +162,10 @@
           lastThreadInTraversePath.type !== threadTypes.PERSONAL &&
           lastThreadInTraversePath.type !== threadTypes.PRIVATE
         ) {
-          result[genesis.id][lastThreadInTraversePath.id] =
-            lastThreadInTraversePath;
+          result[genesis.id][lastThreadInTraversePath.id] = {
+            threadInfo: lastThreadInTraversePath,
+            rawChatName: threadInfos[lastThreadInTraversePath.id].uiName,
+          };
         }
       } else {
         if (
@@ -170,14 +180,20 @@
         for (const threadInfo of threadTraversePath) {
           result[lastThreadInTraversePathParentCommunityThreadID][
             threadInfo.id
-          ] = threadInfo;
+          ] = {
+            threadInfo,
+            rawChatName: threadInfos[threadInfo.id].uiName,
+          };
           communityThreadIDForGenesisThreads[threadInfo.id] =
             lastThreadInTraversePathParentCommunityThreadID;
         }
       }
       continue;
     }
-    result[currentThreadCommunity][currentThreadID] = currentResolvedThreadInfo;
+    result[currentThreadCommunity][currentThreadID] = {
+      threadInfo: currentResolvedThreadInfo,
+      rawChatName: threadInfos[currentThreadID].uiName,
+    };
   }
   return {
     chatMentionCandidatesObj: result,
@@ -193,7 +209,7 @@
 
 function useChatMentionCandidatesObjAndUtils(): {
   chatMentionCandidatesObj: ChatMentionCandidatesObj,
-  resolvedThreadInfos: ChatMentionCandidates,
+  resolvedThreadInfos: { +[id: string]: ResolvedThreadInfo },
   communityThreadIDForGenesisThreads: { +[id: string]: string },
 } {
   const threadInfos = useSelector(threadInfoSelector);
@@ -226,7 +242,9 @@
       for (const threadID in chatMentionCandidatesObj[communityThreadID]) {
         searchIndexEntries.push({
           id: threadID,
-          uiName: chatMentionCandidatesObj[communityThreadID][threadID].uiName,
+          uiName:
+            chatMentionCandidatesObj[communityThreadID][threadID].threadInfo
+              .uiName,
         });
       }
       // Sort the keys so that the order of the search result is consistent
diff --git a/lib/shared/markdown.js b/lib/shared/markdown.js
--- a/lib/shared/markdown.js
+++ b/lib/shared/markdown.js
@@ -289,7 +289,8 @@
   content: string,
   hasAccessToChat: boolean,
 } {
-  const threadInfo = chatMentionCandidates[capture[3]];
+  const chatMentionCandidate = chatMentionCandidates[capture[3]];
+  const threadInfo = chatMentionCandidate?.threadInfo;
   const threadName = threadInfo?.uiName ?? decodeChatMentionText(capture[4]);
   const content = `${capture[1]}@${threadName}`;
   return {
diff --git a/lib/shared/mention-utils.js b/lib/shared/mention-utils.js
--- a/lib/shared/mention-utils.js
+++ b/lib/shared/mention-utils.js
@@ -155,7 +155,7 @@
       }
       result.push({
         type: 'chat',
-        threadInfo: chatMentionCandidates[threadID],
+        threadInfo: chatMentionCandidates[threadID].threadInfo,
       });
     }
     return result;
diff --git a/lib/types/thread-types.js b/lib/types/thread-types.js
--- a/lib/types/thread-types.js
+++ b/lib/types/thread-types.js
@@ -489,8 +489,12 @@
 
 export type ThreadStoreThreadInfos = LegacyRawThreadInfos;
 
+export type ChatMentionCandidate = {
+  +threadInfo: ResolvedThreadInfo,
+  +rawChatName: string | ThreadEntity,
+};
 export type ChatMentionCandidates = {
-  +[id: string]: ResolvedThreadInfo,
+  +[id: string]: ChatMentionCandidate,
 };
 export type ChatMentionCandidatesObj = {
   +[id: string]: ChatMentionCandidates,