diff --git a/src/timeline/TimelineModel.cpp b/src/timeline/TimelineModel.cpp
index 75819532bfb9fcc8256f6bda42e427d8efba80fe..e3a1a7819126440597b7a98a756ef3506bb0b2d2 100644
--- a/src/timeline/TimelineModel.cpp
+++ b/src/timeline/TimelineModel.cpp
@@ -511,20 +511,12 @@ isMessage(const mtx::events::EncryptedEvent<T> &)
 
 void
 TimelineModel::updateLastMessage()
-{
-        // Get the user setting to show decrypted messages in side bar
-        bool decrypt = QSettings().value("user/decrypt_sidebar", true).toBool();
-        updateLastMessage(decrypt);
-}
-
-void
-TimelineModel::updateLastMessage(bool decrypt)
 {
         for (auto it = eventOrder.begin(); it != eventOrder.end(); ++it) {
                 auto event = events.value(*it);
                 if (auto e = std::get_if<mtx::events::EncryptedEvent<mtx::events::msg::Encrypted>>(
                       &event)) {
-                        if (decrypt) {
+                        if (decryptDescription) {
                                 event = decryptEvent(*e).event;
                         }
                 }
diff --git a/src/timeline/TimelineModel.h b/src/timeline/TimelineModel.h
index 135b31ffc75e97a59c0a18ac2e2cb6a2c486f9c9..ae468c09e8d13272167d59c19f47b06400e09aeb 100644
--- a/src/timeline/TimelineModel.h
+++ b/src/timeline/TimelineModel.h
@@ -189,7 +189,7 @@ public:
         Q_INVOKABLE void cacheMedia(QString eventId);
         Q_INVOKABLE bool saveMedia(QString eventId) const;
 
-        void updateLastMessage(bool);
+        void updateLastMessage();
         void addEvents(const mtx::responses::Timeline &events);
         template<class T>
         void sendMessage(const T &msg);
@@ -224,6 +224,7 @@ public slots:
                         emit replyChanged(reply_);
                 }
         }
+        void setDecryptDescription(bool decrypt) { decryptDescription = decrypt; }
 
 private slots:
         // Add old events at the top of the timeline.
@@ -259,7 +260,6 @@ private:
                                const mtx::responses::ClaimKeys &res,
                                mtx::http::RequestErr err);
         void readEvent(const std::string &id);
-        void updateLastMessage();
 
         QHash<QString, mtx::events::collections::TimelineEvents> events;
         QSet<QString> read;
@@ -271,6 +271,7 @@ private:
 
         bool isInitialSync        = true;
         bool paginationInProgress = false;
+        bool decryptDescription   = true;
 
         QString currentId;
         QString reply_;
diff --git a/src/timeline/TimelineViewManager.cpp b/src/timeline/TimelineViewManager.cpp
index 3c870e36349ac59f056578d6b9ffdeb38f171512..b9565be87b0ac995c5860ba47aa9d40e588fe13c 100644
--- a/src/timeline/TimelineViewManager.cpp
+++ b/src/timeline/TimelineViewManager.cpp
@@ -25,7 +25,8 @@ TimelineViewManager::updateEncryptedDescriptions()
                 auto ptr = i.value();
 
                 if (!ptr.isNull()) {
-                        ptr->updateLastMessage(decrypt);
+                        ptr->setDecryptDescription(decrypt);
+                        ptr->updateLastMessage();
                 }
         }
 }
@@ -132,6 +133,8 @@ TimelineViewManager::addRoom(const QString &room_id)
 {
         if (!models.contains(room_id)) {
                 QSharedPointer<TimelineModel> newRoom(new TimelineModel(this, room_id));
+                newRoom->setDecryptDescription(settings->isDecryptSidebarEnabled());
+
                 connect(newRoom.data(),
                         &TimelineModel::newEncryptedImage,
                         imgProvider,