diff --git a/app/assets/javascripts/discourse/app/controllers/topic.js b/app/assets/javascripts/discourse/app/controllers/topic.js
index 3a097c334ac..d76069ae562 100644
--- a/app/assets/javascripts/discourse/app/controllers/topic.js
+++ b/app/assets/javascripts/discourse/app/controllers/topic.js
@@ -6,6 +6,7 @@ import discourseComputed, {
   bind,
   observes,
 } from "discourse-common/utils/decorators";
+import { resetCachedTopicList } from "discourse/lib/cached-topic-list";
 import { isEmpty, isPresent } from "@ember/utils";
 import { next, schedule } from "@ember/runloop";
 import discourseLater from "discourse-common/lib/later";
@@ -579,7 +580,10 @@ export default Controller.extend(bufferedProperty("model"), {
         return;
       }
 
-      const backToInbox = () => this.gotoInbox(topic.get("inboxGroupName"));
+      const backToInbox = () => {
+        resetCachedTopicList(this.session);
+        this.gotoInbox(topic.get("inboxGroupName"));
+      };
 
       if (topic.get("message_archived")) {
         topic.moveToInbox().then(backToInbox);
diff --git a/app/assets/javascripts/discourse/app/lib/cached-topic-list.js b/app/assets/javascripts/discourse/app/lib/cached-topic-list.js
index 38148314d3c..1cf2000a7f9 100644
--- a/app/assets/javascripts/discourse/app/lib/cached-topic-list.js
+++ b/app/assets/javascripts/discourse/app/lib/cached-topic-list.js
@@ -1,13 +1,25 @@
+export function setCachedTopicList(session, topicList) {
+  session.set("topicList", topicList);
+}
+
+export function getCachedTopicList(session) {
+  session.get("topicList");
+}
+
+export function resetCachedTopicList(session) {
+  session.setProperties({
+    topicList: null,
+    topicListScrollPosition: null,
+  });
+}
+
 export function findOrResetCachedTopicList(session, filter) {
   const lastTopicList = session.get("topicList");
 
   if (lastTopicList && lastTopicList.filter === filter) {
     return lastTopicList;
   } else {
-    session.setProperties({
-      topicList: null,
-      topicListScrollPosition: null,
-    });
+    resetCachedTopicList(session);
     return false;
   }
 }
diff --git a/app/assets/javascripts/discourse/tests/acceptance/personal-message-test.js b/app/assets/javascripts/discourse/tests/acceptance/personal-message-test.js
index 8504fc1a47e..bb0c704fc98 100644
--- a/app/assets/javascripts/discourse/tests/acceptance/personal-message-test.js
+++ b/app/assets/javascripts/discourse/tests/acceptance/personal-message-test.js
@@ -1,4 +1,4 @@
-import { click, visit } from "@ember/test-helpers";
+import { click, currentURL, visit } from "@ember/test-helpers";
 import DiscourseURL from "discourse/lib/url";
 import {
   acceptance,
@@ -8,6 +8,11 @@ import {
 import I18n from "I18n";
 import { test } from "qunit";
 import sinon from "sinon";
+import {
+  getCachedTopicList,
+  setCachedTopicList,
+} from "discourse/lib/cached-topic-list";
+import { getOwner } from "discourse-common/lib/get-owner";
 
 acceptance("Personal Message", function (needs) {
   needs.user();
@@ -20,6 +25,17 @@ acceptance("Personal Message", function (needs) {
       I18n.t("suggested_topics.pm_title")
     );
   });
+
+  test("redirects to inbox after topic is archived and clears topicList cache", async function (assert) {
+    const session = getOwner(this).lookup("service:session");
+    setCachedTopicList(session, {});
+
+    await visit("/t/pm-for-testing/12");
+    await click(".archive-topic");
+
+    assert.strictEqual(currentURL(), "/u/eviltrout/messages");
+    assert.notOk(getCachedTopicList(session), "topic list cached is cleared");
+  });
 });
 
 acceptance("Personal Message (regular user)", function (needs) {