diff --git a/src/pages/status.jsx b/src/pages/status.jsx
index 329b6c55..2047d49e 100644
--- a/src/pages/status.jsx
+++ b/src/pages/status.jsx
@@ -33,6 +33,7 @@ import useTitle from '../utils/useTitle';
 const LIMIT = 40;
 const THREAD_LIMIT = 20;
 
+let cachedRepliesToggle = {};
 let cachedStatusesMap = {};
 function resetScrollPosition(id) {
   delete cachedStatusesMap[id];
@@ -293,6 +294,7 @@ function StatusPage() {
       states.scrollPositions = {};
       states.reloadStatusPage = 0;
       cachedStatusesMap = {};
+      cachedRepliesToggle = {};
     };
   }, []);
 
@@ -870,9 +872,18 @@ function SubComments({ hasManyStatuses, replies, instance, hasParentThread }) {
 
   const open =
     (!hasParentThread || replies.length === 1) && (isBrief || !hasManyStatuses);
+  const openBefore = cachedRepliesToggle[replies[0].id];
 
   return (
-    <details class="replies" open={open}>
+    <details
+      class="replies"
+      open={openBefore || open}
+      onToggle={(e) => {
+        const { open } = e.target;
+        // use first reply as ID
+        cachedRepliesToggle[replies[0].id] = open;
+      }}
+    >
       <summary hidden={open}>
         <span class="avatars">
           {accounts.map((a) => (