diff --git a/src/Utils.cpp b/src/Utils.cpp
index 26e894b932c1effb904f048072036dbf63871bec..9001bd2d840a2374c29a71dad20b6a3ef51b8aa7 100644
--- a/src/Utils.cpp
+++ b/src/Utils.cpp
@@ -1720,6 +1720,15 @@ utils::removeExpiredEvents()
                                     mtx::events::StateEvent<mtx::events::msg::Redacted>>(e))
                                   continue;
 
+                              // synapse protects these 2 against redaction
+                              if (std::holds_alternative<
+                                    mtx::events::StateEvent<mtx::events::state::Create>>(e))
+                                  continue;
+
+                              if (std::holds_alternative<
+                                    mtx::events::StateEvent<mtx::events::state::ServerAcl>>(e))
+                                  continue;
+
                               // skip events we don't know to protect us from mistakes.
                               if (std::holds_alternative<
                                     mtx::events::RoomEvent<mtx::events::Unknown>>(e))
@@ -1746,7 +1755,7 @@ utils::removeExpiredEvents()
                                                   .emplace(to_string(se.type), se.state_key)
                                                   .second;
                                             else
-                                                return false;
+                                                return true;
                                         },
                                         e))
                                       continue;