diff --git a/src/ChatPage.cpp b/src/ChatPage.cpp
index c1c7eb7d83265440bea8acbfa95e0777f7ec3666..a05bbeb1f8727fe7f934ce91fc933b26f929ce23 100644
--- a/src/ChatPage.cpp
+++ b/src/ChatPage.cpp
@@ -754,6 +754,16 @@ ChatPage::leaveRoom(const QString &room_id)
           if (err) {
               emit showNotification(tr("Failed to leave room: %1")
                                       .arg(QString::fromStdString(err->matrix_error.error)));
+              nhlog::net()->error("Failed to leave room '{}': {}", room_id.toStdString(), err);
+
+              if (err->status_code == 404 &&
+                  err->matrix_error.errcode == mtx::errors::ErrorCode::M_UNKNOWN) {
+                  nhlog::db()->debug(
+                    "Removing invite and room for {}, even though we couldn't leave.",
+                    room_id.toStdString());
+                  cache::client()->removeInvite(room_id.toStdString());
+                  cache::client()->removeRoom(room_id.toStdString());
+              }
               return;
           }