diff --git a/src/Cache.cpp b/src/Cache.cpp
index cfc6a72790ab2debdf00ee86e7537d01a27d35fd..ec0f2858af06106dedb8fb164f0c4324b9bfdd3e 100644
--- a/src/Cache.cpp
+++ b/src/Cache.cpp
@@ -91,6 +91,26 @@ namespace {
 std::unique_ptr<Cache> instance_ = nullptr;
 }
 
+template<class T>
+bool
+containsStateUpdates(const T &e)
+{
+        return std::visit([](const auto &ev) { return Cache::isStateEvent(ev); }, e);
+}
+
+bool
+containsStateUpdates(const mtx::events::collections::StrippedEvents &e)
+{
+        using namespace mtx::events;
+        using namespace mtx::events::state;
+
+        return std::holds_alternative<StrippedEvent<state::Avatar>>(e) ||
+               std::holds_alternative<StrippedEvent<CanonicalAlias>>(e) ||
+               std::holds_alternative<StrippedEvent<Name>>(e) ||
+               std::holds_alternative<StrippedEvent<Member>>(e) ||
+               std::holds_alternative<StrippedEvent<Topic>>(e);
+}
+
 bool
 Cache::isHiddenEvent(lmdb::txn &txn,
                      mtx::events::collections::TimelineEvents e,
diff --git a/src/Cache_p.h b/src/Cache_p.h
index b6c555dc76681c9ec4ca23c3813991218beb8473..473c6319cf4026c8225acdcdd3cb662266163283 100644
--- a/src/Cache_p.h
+++ b/src/Cache_p.h
@@ -271,6 +271,17 @@ public:
         void deleteSecret(const std::string &name);
         std::optional<std::string> secret(const std::string &name);
 
+        template<class T>
+        static constexpr bool isStateEvent(const mtx::events::StateEvent<T> &)
+        {
+                return true;
+        }
+        template<class T>
+        static constexpr bool isStateEvent(const mtx::events::Event<T> &)
+        {
+                return false;
+        }
+
 signals:
         void newReadReceipts(const QString &room_id, const std::vector<QString> &event_ids);
         void roomReadStatus(const std::map<QString, bool> &status);
@@ -368,56 +379,12 @@ private:
                         return;
                 }
 
-                if (!isStateEvent(event))
-                        return;
-
-                std::visit([&txn, &statesdb](
-                             auto e) { statesdb.put(txn, to_string(e.type), json(e).dump()); },
-                           event);
-        }
-
-        template<class T>
-        bool isStateEvent(const T &e)
-        {
-                using namespace mtx::events;
-                using namespace mtx::events::state;
-
-                return std::holds_alternative<StateEvent<Aliases>>(e) ||
-                       std::holds_alternative<StateEvent<state::Avatar>>(e) ||
-                       std::holds_alternative<StateEvent<CanonicalAlias>>(e) ||
-                       std::holds_alternative<StateEvent<Create>>(e) ||
-                       std::holds_alternative<StateEvent<GuestAccess>>(e) ||
-                       std::holds_alternative<StateEvent<HistoryVisibility>>(e) ||
-                       std::holds_alternative<StateEvent<JoinRules>>(e) ||
-                       std::holds_alternative<StateEvent<Name>>(e) ||
-                       std::holds_alternative<StateEvent<Member>>(e) ||
-                       std::holds_alternative<StateEvent<PowerLevels>>(e) ||
-                       std::holds_alternative<StateEvent<Topic>>(e);
-        }
-
-        template<class T>
-        bool containsStateUpdates(const T &e)
-        {
-                using namespace mtx::events;
-                using namespace mtx::events::state;
-
-                return std::holds_alternative<StateEvent<state::Avatar>>(e) ||
-                       std::holds_alternative<StateEvent<CanonicalAlias>>(e) ||
-                       std::holds_alternative<StateEvent<Name>>(e) ||
-                       std::holds_alternative<StateEvent<Member>>(e) ||
-                       std::holds_alternative<StateEvent<Topic>>(e);
-        }
-
-        bool containsStateUpdates(const mtx::events::collections::StrippedEvents &e)
-        {
-                using namespace mtx::events;
-                using namespace mtx::events::state;
-
-                return std::holds_alternative<StrippedEvent<state::Avatar>>(e) ||
-                       std::holds_alternative<StrippedEvent<CanonicalAlias>>(e) ||
-                       std::holds_alternative<StrippedEvent<Name>>(e) ||
-                       std::holds_alternative<StrippedEvent<Member>>(e) ||
-                       std::holds_alternative<StrippedEvent<Topic>>(e);
+                std::visit(
+                  [&txn, &statesdb](auto e) {
+                          if constexpr (isStateEvent(e))
+                                  statesdb.put(txn, to_string(e.type), json(e).dump());
+                  },
+                  event);
         }
 
         void saveInvites(lmdb::txn &txn,
diff --git a/src/Olm.cpp b/src/Olm.cpp
index d2f78b76f7ac0044690ace66574be8fc5ad88e26..895afee44bd42969e32990580bd6a27ea8d93522 100644
--- a/src/Olm.cpp
+++ b/src/Olm.cpp
@@ -430,7 +430,7 @@ encrypt_group_message(const std::string &room_id, const std::string &device_id,
         OutboundGroupSessionData group_session_data;
 
         if (cache::outboundMegolmSessionExists(room_id)) {
-                auto res = cache::getOutboundMegolmSession(room_id);
+                auto res                = cache::getOutboundMegolmSession(room_id);
                 auto encryptionSettings = cache::client()->roomEncryptionSettings(room_id);
                 mtx::events::state::Encryption defaultSettings;