diff --git a/src/contentScripts/communityConsole/avatars.js b/src/contentScripts/communityConsole/avatars.js
index 9c555b9..67c8b6d 100644
--- a/src/contentScripts/communityConsole/avatars.js
+++ b/src/contentScripts/communityConsole/avatars.js
@@ -323,15 +323,22 @@
 
   // Inject avatars for thread summary (thread item) |node| in a thread list.
   inject(node) {
-    var header = node.querySelector(
-        'ec-thread-summary .main-header .panel-description a.header');
-    if (header === null) {
+    var header =
+        node.querySelector('ec-thread-summary .main-header .action .header');
+    var headerContent = header.querySelector(':scope > .header-content');
+    var expandBtn = header.querySelector(':scope > .expand-button');
+    if (headerContent === null) {
       console.error(
           '[threadListAvatars] Header is not present in the thread item\'s DOM.');
       return;
     }
+    if (expandBtn === null) {
+      console.error(
+          '[threadListAvatars] Expand button is not present in the thread item\'s DOM.');
+      return;
+    }
 
-    var thread = parseUrl(header.href);
+    var thread = parseUrl(headerContent.href);
     if (thread === false) {
       console.error('[threadListAvatars] Thread\'s link cannot be parsed.');
       return;
@@ -360,7 +367,7 @@
             }
           }
 
-          header.appendChild(avatarsContainer);
+          header.insertBefore(avatarsContainer, expandBtn);
 
           if (res.state == 'private') {
             var label = chrome.i18n.getMessage(
diff --git a/src/contentScripts/communityConsole/extraInfo.js b/src/contentScripts/communityConsole/extraInfo.js
index a192878..2efe634 100644
--- a/src/contentScripts/communityConsole/extraInfo.js
+++ b/src/contentScripts/communityConsole/extraInfo.js
@@ -828,26 +828,24 @@
   injectAtThreadList(li) {
     waitFor(
         () => {
-          const header = li.querySelector(
-              'ec-thread-summary .main-header .panel-description a.header');
-          if (header === null) {
-            console.error(
-                'extraInfo: Header is not present in the thread item\'s DOM.');
-            return;
+          const headerContent = li.querySelector(
+              'ec-thread-summary .main-header .header a.header-content');
+          if (headerContent === null) {
+            return Promise.reject(new Error(
+                'extraInfo: Header is not present in the thread item\'s DOM.'));
           }
 
-          const threadInfo = parseUrl(header.href);
+          const threadInfo = parseUrl(headerContent.href);
           if (threadInfo === false) {
-            console.error('extraInfo: Thread\'s link cannot be parsed.');
-            return;
+            return Promise.reject(
+                new Error('extraInfo: Thread\'s link cannot be parsed.'));
           }
 
           let authorLine = li.querySelector(
               'ec-thread-summary .header-content .top-row .author-line');
           if (!authorLine) {
-            console.error(
-                'extraInfo: Author line is not present in the thread item\'s DOM.');
-            return;
+            return Promise.reject(new Error(
+                'extraInfo: Author line is not present in the thread item\'s DOM.'));
           }
 
           let thread = this.lastThreadListThreads?.find?.(t => {
@@ -896,16 +894,16 @@
   }
 
   injectAtExpandedThreadList(toolbelt) {
-    const header =
+    const headerContent =
         toolbelt?.parentNode?.parentNode?.parentNode?.querySelector?.(
-            '.main-header .panel-description a.header');
-    if (header === null) {
+            '.main-header .header a.header-content');
+    if (headerContent === null) {
       console.error(
           'extraInfo: Header is not present in the thread item\'s DOM.');
       return;
     }
 
-    const threadInfo = parseUrl(header.href);
+    const threadInfo = parseUrl(headerContent.href);
     if (threadInfo === false) {
       console.error('extraInfo: Thread\'s link cannot be parsed.');
       return;
