         makePushNotificationsSection()
 		makeFavoriteEventsSection()
         makeDataStorageSection()
-        makeExperimentalFeaturesSection()
         #if DEBUG
             makeFCMSection()
             makeDebuggingSettingsSection()

                }.cellUpdate { cell, _ in
                    cell.textLabel?.font = UIFont.preferredFont(forTextStyle: UIFontTextStyle.body)
            }
            <<< PushRow<Int>("RefreshTimer") { row in
                row.title = "Refresh Interval"
				row.displayValueFor = { value in
                    var minutes = -1

                    if let value = value {
                        minutes = Int(value/60)
					}
					if minutes <= 0 {
						return "Never"
					} else if minutes == 1 {
                        return "Every 1 Minute"
                    } else {
                        return "Every " + String(minutes) + " Minutes"
                    }
                }
                row.options = [-1, 300, 600, 900, 1800, 3600]

				row.value = UserSettings.RefreshTimer.currentValue()
				row.disabled = true
                }.onChange { row in

                    // TODO: BUG! Label becomes empty when currently selected entry is selected again

                    var refreshSeconds: Int = UserSettings.RefreshTimer.currentValueOrDefault()
                    if let value = row.value {
                        refreshSeconds = value
                    } else {
                        row.value = refreshSeconds
                    }
                    UserSettings.RefreshTimer.setValue(refreshSeconds)
                    if refreshSeconds > 0 && UserSettings.RefreshInBackground.currentValueOrDefault() {
                        UIApplication.shared.setMinimumBackgroundFetchInterval(UIApplicationBackgroundFetchIntervalMinimum)
                    } else {
                        UIApplication.shared.setMinimumBackgroundFetchInterval(UIApplicationBackgroundFetchIntervalNever)
                    }
                    // TODO: Reimplement timed refresh (maybe X minutes after last push-triggered refresh?)
                    /*AutomaticRefresh.sharedInstance.updateTimer()*/
                    row.updateCell()
                }.cellUpdate { cell, _ in
                    cell.textLabel?.font = UIFont.preferredFont(forTextStyle: UIFontTextStyle.body)
            }

            <<< SwitchRow("NotifyOnAnnouncement") { row in
                row.title = "Notify on New Announcements"
                row.value = UserSettings.NotifyOnAnnouncement.currentValue()
				row.disabled = true
                row.hidden = Condition.function(["RefreshTimer"], { form in
                    let value = (form.rowBy(tag: "RefreshTimer") as? PushRow<Int>)?.value
                    return (value != nil) && value! <= 0
                })
                }.onChange { row in
                    if let value = row.value {
                        UserSettings.NotifyOnAnnouncement.setValue(value)
                        if !value {
                            (self.form.rowBy(tag: "RefreshInBackground") as? SwitchRow)?.value = false
                        }
                    }
                    row.updateCell()
                }.cellUpdate { cell, _ in
                    cell.textLabel?.font = UIFont.preferredFont(forTextStyle: UIFontTextStyle.body)
        }
	}

	private func makePushNotificationsSection() {
		let defaults = UserDefaults.standard
		let witnessedSystemPushRequest = UserDefaultsWitnessedSystemPushPermissionsRequest(userDefaults: defaults)
		guard !witnessedSystemPushRequest.witnessedSystemPushPermissionsRequest else { return }

		let section = Section("Push Notifications")
		section <<< ButtonRow {
			$0.title = "Enable Push Notifications"
			}.onCellSelection({ (_, _) in
				if witnessedSystemPushRequest.witnessedSystemPushPermissionsRequest {
					let alert = UIAlertController(title: "Use Settings",

    private func makeNetworkSection() {
        form +++ Section("Network")
            <<< SwitchRow("UpdateOnStart") { row in
                row.title = "Update on Launch"
				row.value = UserSettings.UpdateOnStart.currentValue()
                }.onChange { row in
                    UserSettings.UpdateOnStart.setValue(row.value!)
                    row.updateCell()
