Index: CHANGELOG.de.md
===================================================================
--- CHANGELOG.de.md	(revision 236e11bad44420ff62d6eb5067bebd9bee14ba7e)
+++ CHANGELOG.de.md	(revision 6dd1a3f0ef839a8ce97dec8cc96e5b00ae93a8bc)
@@ -9,5 +9,7 @@
 - **Boosts, die ihr Cover verloren hatten, bekommen es automatisch zurück.**
   Beiträge, die du vor dem Cover-Fix geboostet hast, waren ohne Artwork
-  gespeichert; sie werden beim nächsten Neustart einmalig aufgefrischt.
+  gespeichert; sie werden beim nächsten Neustart einmalig aufgefrischt. Einen
+  Beitrag erneut zu boosten aktualisiert jetzt ebenfalls die gespeicherte Kopie
+  (Cover, Inhalt) — ein veralteter Boost lässt sich also auch von Hand heilen.
 
 ## [1.3.3] — 2026-07-03
Index: CHANGELOG.md
===================================================================
--- CHANGELOG.md	(revision 236e11bad44420ff62d6eb5067bebd9bee14ba7e)
+++ CHANGELOG.md	(revision 6dd1a3f0ef839a8ce97dec8cc96e5b00ae93a8bc)
@@ -9,5 +9,6 @@
 - **Boosts that lost their cover get it back automatically.** Posts you boosted
   before the cover fix were cached without their artwork; they are refreshed
-  once on the next restart.
+  once on the next restart. Boosting a post again now also refreshes its cached
+  copy (cover, content), so a stale boost can always be healed by hand too.
 
 ## [1.3.3] — 2026-07-03
Index: CHANGELOG.nl.md
===================================================================
--- CHANGELOG.nl.md	(revision 236e11bad44420ff62d6eb5067bebd9bee14ba7e)
+++ CHANGELOG.nl.md	(revision 6dd1a3f0ef839a8ce97dec8cc96e5b00ae93a8bc)
@@ -9,5 +9,7 @@
 - **Boosts die hun cover kwijt waren krijgen 'm automatisch terug.** Posts die
   je vóór de cover-fix boostte waren zonder artwork opgeslagen; die worden bij
-  de volgende herstart eenmalig ververst.
+  de volgende herstart eenmalig ververst. Een post opnieuw boosten ververst nu
+  ook de opgeslagen kopie (cover, inhoud), dus een oude boost is altijd ook
+  handmatig te genezen.
 
 ## [1.3.3] — 2026-07-03
Index: src/services/ActivityPubService.js
===================================================================
--- src/services/ActivityPubService.js	(revision 236e11bad44420ff62d6eb5067bebd9bee14ba7e)
+++ src/services/ActivityPubService.js	(revision 6dd1a3f0ef839a8ce97dec8cc96e5b00ae93a8bc)
@@ -1839,7 +1839,14 @@
   const media = JSON.stringify((note.images || []).map((u) => ({ url: u, type: 'image/jpeg' })));
   try {
-    tlStmts().ins.run(id, slug, note.actor_uri || '', note.actor_name || '', note.actor_handle || '',
+    const r = tlStmts().ins.run(id, slug, note.actor_uri || '', note.actor_name || '', note.actor_handle || '',
       note.actor_icon || '', note.actor_url || '', note.content || '', note.url || null,
       new Date().toISOString(), media, note.sensitive ? 1 : 0, note.cw || null);
+    if (!r.changes) {
+      // Row already cached (INSERT OR IGNORE) → refresh it with the freshly
+      // resolved note. Without this a row cached without its cover (or with
+      // stale content) stayed stale forever — even boosting again didn't heal it.
+      db.prepare('UPDATE ap_timeline SET content = ?, media_json = ?, nsfw = ?, cw = ?, url = COALESCE(?, url) WHERE slug = ? AND id = ?')
+        .run(note.content || '', media, note.sensitive ? 1 : 0, note.cw || null, note.url || null, slug, id);
+    }
   } catch { /* ignore */ }
   markBoosted(slug, id);
