diff --git a/src/contentScripts/communityConsole/flattenThreads/flattenThreads.js b/src/contentScripts/communityConsole/flattenThreads/flattenThreads.js
index 6fc3eac..d99ddc6 100644
--- a/src/contentScripts/communityConsole/flattenThreads/flattenThreads.js
+++ b/src/contentScripts/communityConsole/flattenThreads/flattenThreads.js
@@ -1,45 +1,27 @@
-export const kAdditionalInfoPrefix = '__TWPT_FLATTENTHREADS_ADDITIONALINFO__';
-export const kAdditionalInfoRegex =
-    /^__TWPT_FLATTENTHREADS_ADDITIONALINFO__(.*)/;
+export const kAdditionalInfoClass = 'ck-indent-9996300035194';
 
 export const kReplyPayloadSelector =
     '.scTailwindThreadMessageMessagecardcontent:not(.scTailwindThreadMessageMessagecardpromoted) .scTailwindThreadPostcontentroot html-blob';
 export const kReplyActionButtonsSelector =
-    '.scTailwindThreadMessageMessagecardcontent:not(.scTailwindThreadMessageMessagecardpromoted) sc-tailwind-thread-message-message-actions';
+  '.scTailwindThreadMessageMessagecardcontent:not(.scTailwindThreadMessageMessagecardpromoted) sc-tailwind-thread-message-message-actions';
+export const kAdditionalInfoSelector = '.ck-indent-9996300035194';
 export const kMatchingSelectors = [
   kReplyPayloadSelector,
   kReplyActionButtonsSelector,
+  kAdditionalInfoSelector,
 ];
 
 export function getExtraInfoNodes(node) {
-  const confirmedNodes = [];
-  const possibleExtraInfoNodes =
-      node.querySelectorAll('span[style*=\'display\'][style*=\'none\']');
-  for (const candidate of possibleExtraInfoNodes) {
-    const content = candidate.textContent;
-    const matches = content.match(kAdditionalInfoRegex);
-    if (matches) confirmedNodes.push(candidate);
-  }
-  return confirmedNodes;
+  return node.querySelectorAll(kAdditionalInfoSelector);
 }
 
 export default class FlattenThreads {
   construct() {}
 
   getExtraInfo(node) {
-    let rawExtraInfo = null;
-    const possibleExtraInfoNodes =
-        node.querySelectorAll('span[style*=\'display\'][style*=\'none\']');
-    for (const candidate of possibleExtraInfoNodes) {
-      const content = candidate.textContent;
-      const matches = content.match(kAdditionalInfoRegex);
-      if (matches) {
-        rawExtraInfo = matches?.[1] ?? null;
-        break;
-      }
-    }
-    if (!rawExtraInfo) return null;
-    return JSON.parse(rawExtraInfo);
+    const extraInfoNode = node.querySelector(kAdditionalInfoSelector);
+    if (!extraInfoNode) return null;
+    return JSON.parse(extraInfoNode.textContent);
   }
 
   injectId(node, extraInfo) {
diff --git a/src/xhrInterceptor/responseModifiers/flattenThread.js b/src/xhrInterceptor/responseModifiers/flattenThread.js
index 53828eb..b515191 100644
--- a/src/xhrInterceptor/responseModifiers/flattenThread.js
+++ b/src/xhrInterceptor/responseModifiers/flattenThread.js
@@ -1,4 +1,4 @@
-import {kAdditionalInfoPrefix} from '../../contentScripts/communityConsole/flattenThreads/flattenThreads.js';
+import {kAdditionalInfoClass} from '../../contentScripts/communityConsole/flattenThreads/flattenThreads.js';
 import GapModel from '../../models/Gap.js';
 import MessageModel from '../../models/Message.js';
 
@@ -35,10 +35,11 @@
       prevReplyId = m.getId();
       prevReplyParentId = info.parentId;
 
-      const span = document.createElement('span');
-      span.textContent = kAdditionalInfoPrefix + JSON.stringify(info);
-      span.setAttribute('style', 'display: none');
-      m.newPayload = m.getPayload() + span.outerHTML;
+      const extraInfoEl = document.createElement('code');
+      extraInfoEl.textContent = JSON.stringify(info);
+      extraInfoEl.setAttribute('style', 'display: none');
+      extraInfoEl.classList.add(kAdditionalInfoClass);
+      m.newPayload = m.getPayload() + extraInfoEl.outerHTML;
     });
     mogs.forEach(m => m.setPayload(m.newPayload));
 
