diff --git a/src/app.jsx b/src/app.jsx
index a4f373eb..8cc0e587 100644
--- a/src/app.jsx
+++ b/src/app.jsx
@@ -20,7 +20,7 @@ import Settings from './pages/settings';
 import Status from './pages/status';
 import Welcome from './pages/welcome';
 import { getAccessToken } from './utils/auth';
-import states from './utils/states';
+import states, { saveStatus } from './utils/states';
 import store from './utils/store';
 
 const { VITE_CLIENT_NAME: CLIENT_NAME } = import.meta.env;
@@ -300,18 +300,12 @@ async function startStream() {
       });
     }
 
-    states.statuses[status.id] = status;
-    if (status.reblog) {
-      states.statuses[status.reblog.id] = status.reblog;
-    }
+    saveStatus(status);
   }, 5000);
   stream.on('update', handleNewStatus);
   stream.on('status.update', (status) => {
     console.log('STATUS.UPDATE', status);
-    states.statuses[status.id] = status;
-    if (status.reblog) {
-      states.statuses[status.reblog.id] = status.reblog;
-    }
+    saveStatus(status);
   });
   stream.on('delete', (statusID) => {
     console.log('DELETE', statusID);
@@ -332,16 +326,7 @@ async function startStream() {
       states.notificationsNew.unshift(notification);
     }
 
-    if (notification.status && !states.statuses[notification.status.id]) {
-      states.statuses[notification.status.id] = notification.status;
-      if (
-        notification.status.reblog &&
-        !states.statuses[notification.status.reblog.id]
-      ) {
-        states.statuses[notification.status.reblog.id] =
-          notification.status.reblog;
-      }
-    }
+    saveStatus(notification.status, { override: false });
   });
 
   stream.ws.onclose = () => {
@@ -393,10 +378,7 @@ function startVisibility() {
                 newStatuses[0].id !== states.home[0].id
               ) {
                 states.homeNew = newStatuses.map((status) => {
-                  states.statuses[status.id] = status;
-                  if (status.reblog) {
-                    states.statuses[status.reblog.id] = status.reblog;
-                  }
+                  saveStatus(status);
                   return {
                     id: status.id,
                     reblog: status.reblog?.id,
@@ -418,19 +400,7 @@ function startVisibility() {
                   states.notificationsNew.unshift(notification);
                 }
 
-                if (
-                  notification.status &&
-                  !states.statuses[notification.status.id]
-                ) {
-                  states.statuses[notification.status.id] = notification.status;
-                  if (
-                    notification.status.reblog &&
-                    !states.statuses[notification.status.reblog.id]
-                  ) {
-                    states.statuses[notification.status.reblog.id] =
-                      notification.status.reblog;
-                  }
-                }
+                saveStatus(notification.status, { override: false });
               }
             } catch (e) {
               // Silently fail
diff --git a/src/components/status.jsx b/src/components/status.jsx
index fafe5dc9..a6bb7f3f 100644
--- a/src/components/status.jsx
+++ b/src/components/status.jsx
@@ -22,7 +22,7 @@ import NameText from '../components/name-text';
 import enhanceContent from '../utils/enhance-content';
 import htmlContentLength from '../utils/html-content-length';
 import shortenNumber from '../utils/shorten-number';
-import states from '../utils/states';
+import states, { saveStatus } from '../utils/states';
 import store from '../utils/store';
 import useDebouncedCallback from '../utils/useDebouncedCallback';
 import visibilityIconsMap from '../utils/visibility-icons-map';
@@ -531,12 +531,10 @@ function Status({
                           const newStatus = await masto.v1.statuses.unreblog(
                             id,
                           );
-                          states.statuses[newStatus.id] = newStatus;
+                          saveStatus(newStatus);
                         } else {
                           const newStatus = await masto.v1.statuses.reblog(id);
-                          states.statuses[newStatus.id] = newStatus;
-                          states.statuses[newStatus.reblog.id] =
-                            newStatus.reblog;
+                          saveStatus(newStatus);
                         }
                       } catch (e) {
                         console.error(e);
@@ -568,10 +566,10 @@ function Status({
                         const newStatus = await masto.v1.statuses.unfavourite(
                           id,
                         );
-                        states.statuses[newStatus.id] = newStatus;
+                        saveStatus(newStatus);
                       } else {
                         const newStatus = await masto.v1.statuses.favourite(id);
-                        states.statuses[newStatus.id] = newStatus;
+                        saveStatus(newStatus);
                       }
                     } catch (e) {
                       console.error(e);
@@ -599,10 +597,10 @@ function Status({
                         const newStatus = await masto.v1.statuses.unbookmark(
                           id,
                         );
-                        states.statuses[newStatus.id] = newStatus;
+                        saveStatus(newStatus);
                       } else {
                         const newStatus = await masto.v1.statuses.bookmark(id);
-                        states.statuses[newStatus.id] = newStatus;
+                        saveStatus(newStatus);
                       }
                     } catch (e) {
                       console.error(e);
diff --git a/src/pages/home.jsx b/src/pages/home.jsx
index e198dfc2..76a7f5d0 100644
--- a/src/pages/home.jsx
+++ b/src/pages/home.jsx
@@ -7,7 +7,7 @@ import { useSnapshot } from 'valtio';
 import Icon from '../components/icon';
 import Loader from '../components/loader';
 import Status from '../components/status';
-import states from '../utils/states';
+import states, { saveStatus } from '../utils/states';
 import useDebouncedCallback from '../utils/useDebouncedCallback';
 import useScroll from '../utils/useScroll';
 
@@ -38,10 +38,7 @@ function Home({ hidden }) {
       return { done: true };
     }
     const homeValues = allStatuses.value.map((status) => {
-      states.statuses[status.id] = status;
-      if (status.reblog) {
-        states.statuses[status.reblog.id] = status.reblog;
-      }
+      saveStatus(status);
       return {
         id: status.id,
         reblog: status.reblog?.id,
diff --git a/src/utils/states.js b/src/utils/states.js
index c65344bb..2c52034c 100644
--- a/src/utils/states.js
+++ b/src/utils/states.js
@@ -1,6 +1,6 @@
 import { proxy } from 'valtio';
 
-export default proxy({
+const states = proxy({
   history: [],
   statuses: {},
   home: [],
@@ -19,3 +19,14 @@ export default proxy({
   showAccount: false,
   composeCharacterCount: 0,
 });
+export default states;
+
+export function saveStatus(status, opts) {
+  const { override } = Object.assign({ override: true }, opts);
+  if (!status) return;
+  if (!override && states.statuses[status.id]) return;
+  states.statuses[status.id] = status;
+  if (status.reblog) {
+    states.statuses[status.reblog.id] = status.reblog;
+  }
+}