             option.populateElement backup[option.field]
             option.onUpdated()
 
+  Option.onSave ->
+    # If we're restoring a backup, then restore the backed up settingsVersion.
+    if restoreSettingsVersion?
+      bgSettings.set "settingsVersion", restoreSettingsVersion
+      restoreSettingsVersion = null
+    # Reset the restore-backup input.
+    $("chooseFile").value = ""
+    # We need to apply migrations in case we are restoring an old backup.
+    bgSettings.applyMigrations()
+
 # Exported for tests.
 root = exports ? window
 extend root, {Options, isVimiumOptionsPage: true}

    bgSettings.clear @field
    @fetch()

  # Static method.
  @saveOptions: ->
    Option.all.map (option) -> option.save()
    # If we're restoring a backup, then restore the backed up settingsVersion.
    if restoreSettingsVersion?
      bgSettings.set "settingsVersion", restoreSettingsVersion
      restoreSettingsVersion = null
    # Reset the restore-backup input.
    $("chooseFile").value = ""
    # We need to apply migrations in case we are restoring an old backup.
    bgSettings.applyMigrations()

  # Abstract method; only implemented in sub-classes.
  # Populate the option's DOM element (@element) with the setting's current value.


$ = (id) -> document.getElementById id
bgExclusions = chrome.extension.getBackgroundPage().Exclusions

# We have to use Settings from the background page here (not Settings, directly) to avoid a race condition for
# the page popup.  Specifically, we must ensure that the settings have been updated on the background page
