diff --git a/core/cron.php b/core/cron.php
index fa9aa14..126d991 100644
--- a/core/cron.php
+++ b/core/cron.php
@@ -20,7 +20,7 @@ if (!isset($_GET['cron_key']) || variable_get('cron_key', 'drupal') != $_GET['cr
   watchdog('cron', 'Cron could not run because an invalid key was used.', array(), WATCHDOG_NOTICE);
   drupal_access_denied();
 }
-elseif (variable_get('maintenance_mode', 0)) {
+elseif (config('system.maintenance')->get('maintenance_mode')) {
   watchdog('cron', 'Cron could not run because the site is in maintenance mode.', array(), WATCHDOG_NOTICE);
   drupal_access_denied();
 }
diff --git a/core/includes/ajax.inc b/core/includes/ajax.inc
index 8817356..38ced8d 100644
--- a/core/includes/ajax.inc
+++ b/core/includes/ajax.inc
@@ -515,8 +515,7 @@ function ajax_prepare_response($page_callback_result) {
         break;
 
       case MENU_SITE_OFFLINE:
-        $commands[] = ajax_command_alert(filter_xss_admin(variable_get('maintenance_mode_message',
-          t('@site is currently under maintenance. We should be back shortly. Thank you for your patience.', array('@site' => variable_get('site_name', 'Drupal'))))));
+        $commands[] = ajax_command_alert(filter_xss_admin(t($config->get('maintenance_mode_message'), array('@site' => variable_get('site_name', 'Drupal')))));
         break;
     }
   }
diff --git a/core/includes/common.inc b/core/includes/common.inc
index 5a146a8..885822e 100644
--- a/core/includes/common.inc
+++ b/core/includes/common.inc
@@ -2592,8 +2592,7 @@ function drupal_deliver_html_page($page_callback_result) {
         drupal_maintenance_theme();
         drupal_add_http_header('Status', '503 Service unavailable');
         drupal_set_title(t('Site under maintenance'));
-        print theme('maintenance_page', array('content' => filter_xss_admin(variable_get('maintenance_mode_message',
-          t('@site is currently under maintenance. We should be back shortly. Thank you for your patience.', array('@site' => variable_get('site_name', 'Drupal')))))));
+        print theme('maintenance_page', array('content' => filter_xss_admin(t($config->get('maintenance_mode_message'), array('@site' => variable_get('site_name', 'Drupal'))))));
         break;
     }
   }
diff --git a/core/includes/menu.inc b/core/includes/menu.inc
index 2121619..7a4895b 100644
--- a/core/includes/menu.inc
+++ b/core/includes/menu.inc
@@ -3792,7 +3792,7 @@ function _menu_router_save($menu, $masks) {
  */
 function _menu_site_is_offline($check_only = FALSE) {
   // Check if site is in maintenance mode.
-  if (variable_get('maintenance_mode', 0)) {
+  if (config('system.maintenance')->get('maintenance_mode')) {
     if (user_access('access site in maintenance mode')) {
       // Ensure that the maintenance mode message is displayed only once
       // (allowing for page redirects) and specifically suppress its display on
diff --git a/core/includes/update.inc b/core/includes/update.inc
index 1a2a242..85689f0 100644
--- a/core/includes/update.inc
+++ b/core/includes/update.inc
@@ -409,9 +409,9 @@ class DrupalUpdateException extends Exception { }
 function update_batch($start, $redirect = NULL, $url = NULL, $batch = array(), $redirect_callback = 'drupal_goto') {
   // During the update, bring the site offline so that schema changes do not
   // affect visiting users.
-  $_SESSION['maintenance_mode'] = variable_get('maintenance_mode', FALSE);
+  $_SESSION['maintenance_mode'] = config('system.maintenance')->get('maintenance_mode');
   if ($_SESSION['maintenance_mode'] == FALSE) {
-    variable_set('maintenance_mode', TRUE);
+    config('system.maintenance')->set('maintenance_mode', TRUE)->save();
   }
 
   // Resolve any update dependencies to determine the actual updates that will
@@ -482,7 +482,7 @@ function update_finished($success, $results, $operations) {
   // Now that the update is done, we can put the site back online if it was
   // previously in maintenance mode.
   if (isset($_SESSION['maintenance_mode']) && $_SESSION['maintenance_mode'] == FALSE) {
-    variable_set('maintenance_mode', FALSE);
+    config('system.maintenance')->get('maintenance_mode');
     unset($_SESSION['maintenance_mode']);
   }
 }
diff --git a/core/modules/openid/openid.test b/core/modules/openid/openid.test
index 7a4c9cf..be5581c 100644
--- a/core/modules/openid/openid.test
+++ b/core/modules/openid/openid.test
@@ -247,7 +247,7 @@ class OpenIDFunctionalTestCase extends OpenIDWebTestCase {
     $this->drupalLogout();
 
     // Enable maintenance mode.
-    variable_set('maintenance_mode', 1);
+    config('system.maintenance')->set('maintenance_mode', TRUE)->save();
 
     // Test logging in via the user/login page while the site is offline.
     $edit = array('openid_identifier' => $identity);
diff --git a/core/modules/simpletest/tests/menu.test b/core/modules/simpletest/tests/menu.test
index 41379ad..e737922 100644
--- a/core/modules/simpletest/tests/menu.test
+++ b/core/modules/simpletest/tests/menu.test
@@ -221,7 +221,7 @@ class MenuRouterTestCase extends DrupalWebTestCase {
    * Test the theme callback when the site is in maintenance mode.
    */
   function testThemeCallbackMaintenanceMode() {
-    variable_set('maintenance_mode', TRUE);
+    config('system.maintenance')->set('maintenance_mode', TRUE)->save();
 
     // For a regular user, the fact that the site is in maintenance mode means
     // we expect the theme callback system to be bypassed entirely.
@@ -242,7 +242,7 @@ class MenuRouterTestCase extends DrupalWebTestCase {
    * @see hook_menu_site_status_alter().
    */
   function testMaintenanceModeLoginPaths() {
-    variable_set('maintenance_mode', TRUE);
+    config('system.maintenance')->set('maintenance_mode', TRUE)->save();
 
     $offline_message = t('@site is currently under maintenance. We should be back shortly. Thank you for your patience.', array('@site' => variable_get('site_name', 'Drupal')));
     $this->drupalLogout();
diff --git a/core/modules/system/config/system.maintenance.xml b/core/modules/system/config/system.maintenance.xml
new file mode 100644
index 0000000..f8bf0ad
--- /dev/null
+++ b/core/modules/system/config/system.maintenance.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0"?>
+<config>
+  <maintenance_mode>0</maintenance_mode>
+  <maintenance_mode_message>@site is currently under maintenance. We should be back shortly. Thank you for your patience.</maintenance_mode_message>
+</config>
diff --git a/core/modules/system/system.admin.inc b/core/modules/system/system.admin.inc
index 978b0f4..66f54c3 100644
--- a/core/modules/system/system.admin.inc
+++ b/core/modules/system/system.admin.inc
@@ -2191,19 +2191,36 @@ function system_date_time_lookup() {
  * @see system_settings_form()
  */
 function system_site_maintenance_mode() {
+  $config = config('system.maintenance');
+
   $form['maintenance_mode'] = array(
     '#type' => 'checkbox',
     '#title' => t('Put site into maintenance mode'),
-    '#default_value' => variable_get('maintenance_mode', 0),
+    '#default_value' => $config->get('maintenance_mode'),
     '#description' => t('Visitors will only see the maintenance mode message. Only users with the "Access site in maintenance mode" <a href="@permissions-url">permission</a> will be able to access the site. Authorized users can log in directly via the <a href="@user-login">user login</a> page.', array('@permissions-url' => url('admin/config/people/permissions'), '@user-login' => url('user'))),
   );
-  $form['maintenance_mode_message'] = array(
+    $form['maintenance_mode_message'] = array(
     '#type' => 'textarea',
     '#title' => t('Message to display when in maintenance mode'),
-    '#default_value' => variable_get('maintenance_mode_message', t('@site is currently under maintenance. We should be back shortly. Thank you for your patience.', array('@site' => variable_get('site_name', 'Drupal')))),
+    '#default_value' => t($config->get('maintenance_mode_message'), array('@site' => variable_get('site_name', 'Drupal'))),
   );
 
-  return system_settings_form($form);
+  $form['submit'] = array('#type' => 'submit', '#value' => t('Submit'));
+  return $form;
+}
+
+/**
+ * Form builder submit handler; Handle submission for RSS feeds settings.
+ *
+ * @ingroup forms
+ * @see system_settings_form()
+ */
+function system_site_maintenance_mode_submit($form, &$form_state) {
+  // Set the maintenance mode parameters.
+  $config = config('system.maintenance');
+  $config->set('maintenance_mode', $form_state['values']['maintenance_mode']);
+  $config->set('maintenance_mode_message', $form_state['values']['maintenance_mode_message']);
+  $config->save();
 }
 
 /**
diff --git a/core/modules/system/system.install b/core/modules/system/system.install
index 905d11d..73ff637 100644
--- a/core/modules/system/system.install
+++ b/core/modules/system/system.install
@@ -1762,6 +1762,37 @@ function system_update_8005() {
 }
 
 /**
+ * Move maintenance system settings from variable to config.
+ */
+function system_update_8006() {
+  $config = config('system.maintenance');
+  // Get all setting names defined in system.maintenance.xml.
+  $var_names = array_keys($config->get());
+  if (!empty($var_names)) {
+    // Get any variables currently defined that match the new setting names in
+    // the config file.
+    $query = db_select('variable', 'v')
+      ->fields('v')
+      ->condition('name', $var_names, 'IN');
+    $var_values = $query->execute()->fetchAllKeyed(0);
+
+    // Update the config system settings to use the values previously stored in
+    // the variable table.
+    if (!empty($var_values)) {
+      foreach($var_values as $name => $val) {
+        $config->set($name, $val);
+      }
+      $config->save();
+      // Delete the old variables. The config system will throw an exception if
+      // a value cannot be saved, so this code will not run if there is a
+      // problem running the update.
+      $del = db_delete('variable')->condition('name', $var_names, 'IN');
+      $del->execute();
+    }
+  }
+}
+
+/**
  * @} End of "defgroup updates-7.x-to-8.x"
  * The next series of updates should start at 9000.
  */
diff --git a/core/modules/update/update.authorize.inc b/core/modules/update/update.authorize.inc
index 48dfd35..939f415 100644
--- a/core/modules/update/update.authorize.inc
+++ b/core/modules/update/update.authorize.inc
@@ -180,7 +180,7 @@ function update_authorize_update_batch_finished($success, $results) {
       $success = FALSE;
     }
   }
-  $offline = variable_get('maintenance_mode', FALSE);
+  $offline = config('system.maintenance')->get('maintenance_mode');
   if ($success) {
     // Now that the update completed, we need to clear the cache of available
     // update data and recompute our status, so prevent show bogus results.
@@ -188,7 +188,7 @@ function update_authorize_update_batch_finished($success, $results) {
 
     // Take the site out of maintenance mode if it was previously that way.
     if ($offline && isset($_SESSION['maintenance_mode']) && $_SESSION['maintenance_mode'] == FALSE) {
-      variable_set('maintenance_mode', FALSE);
+      config('system.maintenance')->set('maintenance_mode', FALSE)->save();
       $page_message = array(
         'message' => t('Update was completed successfully. Your site has been taken out of maintenance mode.'),
         'type' => 'status',
@@ -242,11 +242,11 @@ function update_authorize_install_batch_finished($success, $results) {
       $success = FALSE;
     }
   }
-  $offline = variable_get('maintenance_mode', FALSE);
+  $offline = config('system.maintenance')->get('maintenance_mode');
   if ($success) {
     // Take the site out of maintenance mode if it was previously that way.
     if ($offline && isset($_SESSION['maintenance_mode']) && $_SESSION['maintenance_mode'] == FALSE) {
-      variable_set('maintenance_mode', FALSE);
+      config('system.maintenance')->set('maintenance_mode', FALSE)->save();
       $page_message = array(
         'message' => t('Installation was completed successfully. Your site has been taken out of maintenance mode.'),
         'type' => 'status',
diff --git a/core/modules/update/update.manager.inc b/core/modules/update/update.manager.inc
index 82b48f3..3644e24 100644
--- a/core/modules/update/update.manager.inc
+++ b/core/modules/update/update.manager.inc
@@ -406,9 +406,9 @@ function update_manager_update_ready_form($form, &$form_state) {
  */
 function update_manager_update_ready_form_submit($form, &$form_state) {
   // Store maintenance_mode setting so we can restore it when done.
-  $_SESSION['maintenance_mode'] = variable_get('maintenance_mode', FALSE);
+  $_SESSION['maintenance_mode'] = config('system.maintenance')->get('maintenance_mode');
   if ($form_state['values']['maintenance_mode'] == TRUE) {
-    variable_set('maintenance_mode', TRUE);
+    config('system.maintenance')->set('maintenance_mode', TRUE)->save();
   }
 
   if (!empty($_SESSION['update_manager_update_projects'])) {
