diff --git a/CMakeLists.txt b/CMakeLists.txt
index 913666d505ddc87893668f04f67dd4e9e04da867..6ce9079016b4f1820f0d93de9103ab3c56724f05 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -334,7 +334,7 @@ if(USE_BUNDLED_MTXCLIENT)
 	FetchContent_Declare(
 		MatrixClient
 		GIT_REPOSITORY https://github.com/Nheko-Reborn/mtxclient.git
-		GIT_TAG        c914f8bd042bf8c2d0ee499c0d89e010e8ba9180
+		GIT_TAG        ec569028ee7a5945bc5552858b2eac930c9d2871
 		)
 	FetchContent_MakeAvailable(MatrixClient)
 else()
diff --git a/src/dialogs/RoomSettings.cpp b/src/dialogs/RoomSettings.cpp
index 3a3cdbf59f4906cbdf9fb910d26eb09f08601bf1..69d5a9c294486214d486629482eebcd6602c90ef 100644
--- a/src/dialogs/RoomSettings.cpp
+++ b/src/dialogs/RoomSettings.cpp
@@ -225,18 +225,27 @@ RoomSettings::RoomSettings(const QString &room_id, QWidget *parent)
           [this](const mtx::pushrules::PushRule &rule, mtx::http::RequestErr &err) {
                   if (err) {
                           if (err->status_code == boost::beast::http::status::not_found)
-                                  emit notifChanged(2); // all messages
+                                  http::client()->get_pushrules(
+                                    "global",
+                                    "room",
+                                    room_id_.toStdString(),
+                                    [this](const mtx::pushrules::PushRule &rule,
+                                           mtx::http::RequestErr &err) {
+                                            if (err) {
+                                                    emit notifChanged(2); // all messages
+                                                    return;
+                                            }
+
+                                            if (rule.enabled)
+                                                    emit notifChanged(1); // mentions only
+                                    });
                           return;
                   }
 
-                  if (rule.actions.size() == 1 &&
-                      std::holds_alternative<mtx::pushrules::actions::dont_notify>(
-                        rule.actions[0])) {
-                          if (rule.conditions.empty())
-                                  emit notifChanged(1); // mentions only
-                          else
-                                  emit notifChanged(0); // muted
-                  }
+                  if (rule.enabled)
+                          emit notifChanged(0); // muted
+                  else
+                          emit notifChanged(2); // all messages
           });
 
         connect(notifCombo, QOverload<int>::of(&QComboBox::activated), [this](int index) {
@@ -264,6 +273,9 @@ RoomSettings::RoomSettings(const QString &room_id, QWidget *parent)
                                             room_id,
                                             static_cast<int>(err->status_code),
                                             err->matrix_error.error);
+                                  http::client()->delete_pushrules(
+                                    "global", "room", room_id, [room_id](mtx::http::RequestErr &) {
+                                    });
                           });
                 } else if (index == 1) {
                         // mentions only
@@ -271,28 +283,26 @@ RoomSettings::RoomSettings(const QString &room_id, QWidget *parent)
                         mtx::pushrules::PushRule rule;
                         rule.actions = {mtx::pushrules::actions::dont_notify{}};
                         http::client()->put_pushrules(
-                          "global",
-                          "override",
-                          room_id,
-                          rule,
-                          [room_id](mtx::http::RequestErr &err) {
+                          "global", "room", room_id, rule, [room_id](mtx::http::RequestErr &err) {
                                   if (err)
                                           nhlog::net()->error(
                                             "failed to set pushrule for room {}: {} {}",
                                             room_id,
                                             static_cast<int>(err->status_code),
                                             err->matrix_error.error);
+                                  http::client()->delete_pushrules(
+                                    "global",
+                                    "override",
+                                    room_id,
+                                    [room_id](mtx::http::RequestErr &) {});
                           });
                 } else {
                         // all messages
                         http::client()->delete_pushrules(
-                          "global", "override", room_id, [room_id](mtx::http::RequestErr &err) {
-                                  if (err)
-                                          nhlog::net()->error(
-                                            "failed to delete pushrule for room {}: {} {}",
-                                            room_id,
-                                            static_cast<int>(err->status_code),
-                                            err->matrix_error.error);
+                          "global", "override", room_id, [room_id](mtx::http::RequestErr &) {
+                                  http::client()->delete_pushrules(
+                                    "global", "room", room_id, [room_id](mtx::http::RequestErr &) {
+                                    });
                           });
                 }
         });