diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/pushrules/PushRuleService.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/pushrules/PushRuleService.kt
index 222d0da9cc..b00450b561 100644
--- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/pushrules/PushRuleService.kt
+++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/pushrules/PushRuleService.kt
@@ -15,6 +15,7 @@
  */
 package im.vector.matrix.android.api.pushrules
 
+import im.vector.matrix.android.api.MatrixCallback
 import im.vector.matrix.android.api.pushrules.rest.PushRule
 import im.vector.matrix.android.api.session.events.model.Event
 
@@ -30,6 +31,8 @@ interface PushRuleService {
 
     //TODO update rule
 
+    fun updatePushRuleEnableStatus(kind: String, pushRule: PushRule, enabled: Boolean, callback: MatrixCallback<Unit>)
+
     fun addPushRuleListener(listener: PushRuleListener)
 
     fun removePushRuleListener(listener: PushRuleListener)
diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/pushrules/RuleIds.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/pushrules/RuleIds.kt
index c3a64490fc..38a64adf27 100644
--- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/pushrules/RuleIds.kt
+++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/pushrules/RuleIds.kt
@@ -16,5 +16,32 @@
 
 package im.vector.matrix.android.api.pushrules
 
-enum class RuleIds {
-}
\ No newline at end of file
+/**
+ * Known rule ids
+ *
+ * Ref: https://matrix.org/docs/spec/client_server/latest#predefined-rules
+ */
+object RuleIds {
+    // Default Override Rules
+    const val RULE_ID_DISABLE_ALL = ".m.rule.master"
+    const val RULE_ID_SUPPRESS_BOTS_NOTIFICATIONS = ".m.rule.suppress_notices"
+    const val RULE_ID_INVITE_ME = ".m.rule.invite_for_me"
+    const val RULE_ID_PEOPLE_JOIN_LEAVE = ".m.rule.member_event"
+    const val RULE_ID_CONTAIN_DISPLAY_NAME = ".m.rule.contains_display_name"
+
+    const val RULE_ID_TOMBSTONE = ".m.rule.tombstone"
+    const val RULE_ID_ROOM_NOTIF = ".m.rule.roomnotif"
+
+    // Default Content Rules
+    const val RULE_ID_CONTAIN_USER_NAME = ".m.rule.contains_user_name"
+
+    // Default Underride Rules
+    const val RULE_ID_CALL = ".m.rule.call"
+    const val RULE_ID_one_to_one_encrypted_room = ".m.rule.encrypted_room_one_to_one"
+    const val RULE_ID_ONE_TO_ONE_ROOM = ".m.rule.room_one_to_one"
+    const val RULE_ID_ALL_OTHER_MESSAGES_ROOMS = ".m.rule.message"
+    const val RULE_ID_ENCRYPTED = ".m.rule.encrypted"
+
+    // Not documented
+    const val RULE_ID_FALLBACK = ".m.rule.fallback"
+}
diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/database/model/PushRulesEntity.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/database/model/PushRulesEntity.kt
index 1f1681d839..f504192550 100644
--- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/database/model/PushRulesEntity.kt
+++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/database/model/PushRulesEntity.kt
@@ -23,6 +23,7 @@ import io.realm.annotations.Index
 internal open class PushRulesEntity(
         @Index var userId: String = "",
         var scope: String = "",
+        // "content", etc.
         var rulesetKey: String = "",
         var pushRules: RealmList<PushRuleEntity> = RealmList()
 ) : RealmObject() {
diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/DefaultSession.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/DefaultSession.kt
index c6aef848bb..7666f49dc9 100644
--- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/DefaultSession.kt
+++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/DefaultSession.kt
@@ -507,6 +507,10 @@ internal class DefaultSession(override val sessionParams: SessionParams) : Sessi
         return pushRuleService.getPushRules(scope)
     }
 
+    override fun updatePushRuleEnableStatus(kind: String, pushRule: PushRule, enabled: Boolean, callback: MatrixCallback<Unit>) {
+        pushRuleService.updatePushRuleEnableStatus(kind, pushRule, enabled, callback)
+    }
+
     override fun fetchPushRules(scope: String) {
         pushRuleService.fetchPushRules(scope)
     }
diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/SessionModule.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/SessionModule.kt
index ef2fe85791..1ea4803a56 100644
--- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/SessionModule.kt
+++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/SessionModule.kt
@@ -180,13 +180,17 @@ internal class SessionModule(private val sessionParams: SessionParams) {
         }
 
         scope(DefaultSession.SCOPE) {
-            DefaultPushRuleService(get(), get(), get(), get())
+            DefaultPushRuleService(get(), get(), get(), get(), get())
         }
 
         scope(DefaultSession.SCOPE) {
             DefaultGetPushRulesTask(get()) as GetPushRulesTask
         }
 
+        scope(DefaultSession.SCOPE) {
+            DefaultUpdatePushRuleEnableStatusTask(get()) as UpdatePushRuleEnableStatusTask
+        }
+
         scope(DefaultSession.SCOPE) {
             DefaultProcessEventForPushTask(get()) as ProcessEventForPushTask
         }
diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/notification/DefaultPushRuleService.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/notification/DefaultPushRuleService.kt
index c5c1e18e79..c85f0b442f 100644
--- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/notification/DefaultPushRuleService.kt
+++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/notification/DefaultPushRuleService.kt
@@ -28,6 +28,7 @@ import im.vector.matrix.android.internal.database.model.PushRulesEntity
 import im.vector.matrix.android.internal.database.model.PusherEntityFields
 import im.vector.matrix.android.internal.database.query.where
 import im.vector.matrix.android.internal.session.pushers.GetPushRulesTask
+import im.vector.matrix.android.internal.session.pushers.UpdatePushRuleEnableStatusTask
 import im.vector.matrix.android.internal.task.TaskExecutor
 import im.vector.matrix.android.internal.task.configureWith
 import timber.log.Timber
@@ -36,6 +37,7 @@ import timber.log.Timber
 internal class DefaultPushRuleService(
         private val sessionParams: SessionParams,
         private val pushRulesTask: GetPushRulesTask,
+        private val updatePushRuleEnableStatusTask: UpdatePushRuleEnableStatusTask,
         private val taskExecutor: TaskExecutor,
         private val monarchy: Monarchy
 ) : PushRuleService {
@@ -95,8 +97,6 @@ internal class DefaultPushRuleService(
                                 }
                             }
                             realm.insertOrUpdate(underrides)
-
-
                         }
                     }
                 })
@@ -111,6 +111,7 @@ internal class DefaultPushRuleService(
         var senderRules: List<PushRule> = emptyList()
         var underrideRules: List<PushRule> = emptyList()
 
+        // TODO Create const for ruleSetKey
         monarchy.doWithRealm { realm ->
             PushRulesEntity.where(realm, sessionParams.credentials.userId, scope, "content").findFirst()?.let { re ->
                 contentRules = re.pushRules.map { PushRulesMapper.mapContentRule(it) }
@@ -132,6 +133,14 @@ internal class DefaultPushRuleService(
         return contentRules + overrideRules + roomRules + senderRules + underrideRules
     }
 
+    override fun updatePushRuleEnableStatus(kind: String, pushRule: PushRule, enabled: Boolean, callback: MatrixCallback<Unit>) {
+        updatePushRuleEnableStatusTask
+                .configureWith(UpdatePushRuleEnableStatusTask.Params(kind, pushRule, enabled))
+                // TODO Fetch the rules
+                .dispatchTo(callback)
+                .executeBy(taskExecutor)
+    }
+
     override fun removePushRuleListener(listener: PushRuleService.PushRuleListener) {
         listeners.remove(listener)
     }
diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/pushers/GetPushrulesTask.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/pushers/GetPushRulesTask.kt
similarity index 100%
rename from matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/pushers/GetPushrulesTask.kt
rename to matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/pushers/GetPushRulesTask.kt
diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/pushers/UpdatePushRuleEnableStatusTask.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/pushers/UpdatePushRuleEnableStatusTask.kt
new file mode 100644
index 0000000000..2deedcc944
--- /dev/null
+++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/pushers/UpdatePushRuleEnableStatusTask.kt
@@ -0,0 +1,37 @@
+/*
+ * Copyright 2019 New Vector Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package im.vector.matrix.android.internal.session.pushers
+
+import arrow.core.Try
+import im.vector.matrix.android.api.pushrules.rest.PushRule
+import im.vector.matrix.android.internal.network.executeRequest
+import im.vector.matrix.android.internal.task.Task
+
+
+internal interface UpdatePushRuleEnableStatusTask : Task<UpdatePushRuleEnableStatusTask.Params, Unit> {
+    data class Params(val kind: String,
+                      val pushRule: PushRule,
+                      val enabled: Boolean)
+}
+
+internal class DefaultUpdatePushRuleEnableStatusTask(private val pushRulesApi: PushRulesApi) : UpdatePushRuleEnableStatusTask {
+
+    override suspend fun execute(params: UpdatePushRuleEnableStatusTask.Params): Try<Unit> {
+        return executeRequest {
+            apiCall = pushRulesApi.updateEnableRuleStatus(params.kind, params.pushRule.ruleId, params.enabled)
+        }
+    }
+}
\ No newline at end of file
diff --git a/vector/src/gplay/java/im/vector/riotredesign/push/fcm/NotificationTroubleshootTestManagerFactory.kt b/vector/src/gplay/java/im/vector/riotredesign/push/fcm/NotificationTroubleshootTestManagerFactory.kt
index d306fa194e..ee4e59e4ab 100644
--- a/vector/src/gplay/java/im/vector/riotredesign/push/fcm/NotificationTroubleshootTestManagerFactory.kt
+++ b/vector/src/gplay/java/im/vector/riotredesign/push/fcm/NotificationTroubleshootTestManagerFactory.kt
@@ -16,15 +16,11 @@
 package im.vector.riotredesign.push.fcm
 
 import androidx.fragment.app.Fragment
-import im.vector.fragments.troubleshoot.TestAccountSettings
 import im.vector.matrix.android.api.session.Session
+import im.vector.riotredesign.features.settings.troubleshoot.*
 import im.vector.riotredesign.push.fcm.troubleshoot.TestFirebaseToken
 import im.vector.riotredesign.push.fcm.troubleshoot.TestPlayServices
 import im.vector.riotredesign.push.fcm.troubleshoot.TestTokenRegistration
-import im.vector.riotredesign.features.settings.troubleshoot.NotificationTroubleshootTestManager
-import im.vector.riotredesign.features.settings.troubleshoot.TestBingRulesSettings
-import im.vector.riotredesign.features.settings.troubleshoot.TestDeviceSettings
-import im.vector.riotredesign.features.settings.troubleshoot.TestSystemSettings
 
 class NotificationTroubleshootTestManagerFactory {
 
diff --git a/vector/src/main/java/im/vector/riotredesign/features/settings/troubleshoot/TestAccountSettings.kt b/vector/src/main/java/im/vector/riotredesign/features/settings/troubleshoot/TestAccountSettings.kt
index 7a5441bfc3..4580f097f9 100644
--- a/vector/src/main/java/im/vector/riotredesign/features/settings/troubleshoot/TestAccountSettings.kt
+++ b/vector/src/main/java/im/vector/riotredesign/features/settings/troubleshoot/TestAccountSettings.kt
@@ -13,24 +13,26 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package im.vector.fragments.troubleshoot
+package im.vector.riotredesign.features.settings.troubleshoot
 
 import androidx.fragment.app.Fragment
+import im.vector.matrix.android.api.MatrixCallback
+import im.vector.matrix.android.api.pushrules.RuleIds
 import im.vector.matrix.android.api.session.Session
 import im.vector.riotredesign.R
-import im.vector.riotredesign.features.settings.troubleshoot.TroubleshootTest
 
 /**
  * Check that the main pushRule (RULE_ID_DISABLE_ALL) is correctly setup
  */
-class TestAccountSettings(val fragment: Fragment, val session: Session) : TroubleshootTest(R.string.settings_troubleshoot_test_account_settings_title) {
+class TestAccountSettings(val fragment: Fragment, val session: Session)
+    : TroubleshootTest(R.string.settings_troubleshoot_test_account_settings_title) {
 
     override fun perform() {
-        /*
-        TODO
-        val defaultRule = session?.dataHandler?.bingRulesManager?.pushRules()?.findDefaultRule(BingRule.RULE_ID_DISABLE_ALL)
+        val defaultRule = session.getPushRules()
+                .find { it.ruleId == RuleIds.RULE_ID_DISABLE_ALL }
+
         if (defaultRule != null) {
-            if (!defaultRule.isEnabled) {
+            if (!defaultRule.enabled) {
                 description = fragment.getString(R.string.settings_troubleshoot_test_account_settings_success)
                 quickFix = null
                 status = TestStatus.SUCCESS
@@ -39,14 +41,16 @@ class TestAccountSettings(val fragment: Fragment, val session: Session) : Troubl
                 quickFix = object : TroubleshootQuickFix(R.string.settings_troubleshoot_test_account_settings_quickfix) {
                     override fun doFix() {
                         if (manager?.diagStatus == TestStatus.RUNNING) return //wait before all is finished
-                        session?.dataHandler?.bingRulesManager?.updateEnableRuleStatus(defaultRule, !defaultRule.isEnabled,
-                                object : BingRulesManager.onBingRuleUpdateListener {
 
-                                    override fun onBingRuleUpdateSuccess() {
+                        // TODO Use constant for kind
+                        session.updatePushRuleEnableStatus("override", defaultRule, !defaultRule.enabled,
+                                object : MatrixCallback<Unit> {
+
+                                    override fun onSuccess(data: Unit) {
                                         manager?.retry()
                                     }
 
-                                    override fun onBingRuleUpdateFailure(errorMessage: String) {
+                                    override fun onFailure(failure: Throwable) {
                                         manager?.retry()
                                     }
                                 })
@@ -58,8 +62,5 @@ class TestAccountSettings(val fragment: Fragment, val session: Session) : Troubl
             //should not happen?
             status = TestStatus.FAILED
         }
-         */
-
-        status = TestStatus.FAILED
     }
 }
\ No newline at end of file