             })
     }
 
-    func settingChanged(config: SettingConfig, user: User) -> Bool {
-        return DynamicSettingCellPresenter.isVisible(setting: config.setting, currentUser: user) ||
-            user.propertyForSettingsKey(config.setting.key) != config.value
+    private func settingChanged(config: SettingConfig, user: User) -> Bool {
+        let setting = config.setting
+        let currVisibility = DynamicSettingCellPresenter.isVisible(setting: setting, currentUser: user)
+        let currValue = user.propertyForSettingsKey(setting.key)
+        return config.isVisible != currVisibility || config.value != currValue
     }
 
     func deleteAccount() {


extension DynamicSettingCategoryViewController: DynamicSettingCellDelegate {

    typealias SettingConfig = (indexPath: NSIndexPath, value: Bool, setting: DynamicSetting)

    func toggleSetting(setting: DynamicSetting, value: Bool) {
        guard let nav = self.navigationController as? ElloNavigationController,
            currentUser = currentUser,
            category = self.category else { return }

        let visibility = category.settings.enumerate().map { (index, setting) in
            return (
                indexPath: NSIndexPath(forRow: index, inSection: 0),
                value: currentUser.propertyForSettingsKey(setting.key),
                setting: category.settings[index]
            )
        }


                nav.setProfileData(user)

                let changedPaths = visibility.filter { config in
                    return self.settingChanged(config, user: user)
                }.map { config in
                    return config.indexPath
                }
