diff --git a/core/includes/bootstrap.inc b/core/includes/bootstrap.inc
index f65ab4c..0640d76 100644
--- a/core/includes/bootstrap.inc
+++ b/core/includes/bootstrap.inc
@@ -2095,13 +2095,14 @@ function drupal_bootstrap($phase = NULL, $new_phase = TRUE) {
  */
 function drupal_get_user_timezone() {
   global $user;
-  if (variable_get('configurable_timezones', 1) && $user->uid && $user->timezone) {
+  $config = config('system.regional');
+  if ($config->get('configurable_timezones', 1) && $user->uid && $user->timezone) {
     return $user->timezone;
   }
   else {
     // Ignore PHP strict notice if time zone has not yet been set in the php.ini
     // configuration.
-    return variable_get('date_default_timezone', @date_default_timezone_get());
+    return $config->get('date_default_timezone');
   }
 }
 
diff --git a/core/includes/install.core.inc b/core/includes/install.core.inc
index 31ef052..cfa2ab5 100644
--- a/core/includes/install.core.inc
+++ b/core/includes/install.core.inc
@@ -1800,7 +1800,7 @@ function _install_configure_form($form, &$form_state, &$install_state) {
     '#type' => 'select',
     '#title' => st('Default country'),
     '#empty_value' => '',
-    '#default_value' => variable_get('site_default_country', NULL),
+    '#default_value' => config('system.regional')->get('site_default_country'),
     '#options' => $countries,
     '#description' => st('Select the default country for the site.'),
     '#weight' => 0,
@@ -1859,7 +1859,7 @@ function install_configure_form_submit($form, &$form_state) {
 
   variable_set('site_name', $form_state['values']['site_name']);
   variable_set('site_mail', $form_state['values']['site_mail']);
-  variable_set('date_default_timezone', $form_state['values']['date_default_timezone']);
+  config('system.regional')->set('date_default_timezone', $form_state['values']['date_default_timezone']);
   variable_set('site_default_country', $form_state['values']['site_default_country']);
 
   // Enable update.module if this option was selected.
diff --git a/core/modules/locale/locale.module b/core/modules/locale/locale.module
index 35f8032..9ee2f46 100644
--- a/core/modules/locale/locale.module
+++ b/core/modules/locale/locale.module
@@ -655,7 +655,7 @@ function locale_library_info_alter(&$libraries, $module) {
       'data' => array(
         'jqueryuidatepicker' => array(
           'rtl' => $language_interface->direction == LANGUAGE_RTL,
-          'firstDay' => variable_get('date_first_day', 0),
+          'firstDay' => config('system.regional')->get('date_first_day'),
         ),
       ),
       'type' => 'setting',
diff --git a/core/modules/openid/openid.test b/core/modules/openid/openid.test
index 34e0567..c35980f 100644
--- a/core/modules/openid/openid.test
+++ b/core/modules/openid/openid.test
@@ -465,8 +465,9 @@ class OpenIDRegistrationTestCase extends OpenIDWebTestCase {
    */
   function testRegisterUserWithEmailVerification() {
     variable_set('user_email_verification', TRUE);
-    variable_get('configurable_timezones', 1);
-    variable_set('date_default_timezone', 'Europe/Brussels');
+    $config = config('system.regional');
+    $config->get('configurable_timezones');
+    $config->set('date_default_timezone', 'Europe/Brussels')->save();
 
     // Tell openid_test.module to respond with these SREG fields.
     variable_set('openid_test_response', array(
@@ -522,8 +523,9 @@ class OpenIDRegistrationTestCase extends OpenIDWebTestCase {
    */
   function testRegisterUserWithoutEmailVerification() {
     variable_set('user_email_verification', FALSE);
-    variable_get('configurable_timezones', 1);
-    variable_set('date_default_timezone', 'Europe/Brussels');
+    $config = config('system.regional');
+    $config->get('configurable_timezones');
+    $config->set('date_default_timezone', 'Europe/Brussels')->save();
 
     // Tell openid_test.module to respond with these SREG fields.
     variable_set('openid_test_response', array(
@@ -563,8 +565,9 @@ class OpenIDRegistrationTestCase extends OpenIDWebTestCase {
    * information (a username that is already taken, and no e-mail address).
    */
   function testRegisterUserWithInvalidSreg() {
-    variable_get('configurable_timezones', 1);
-    variable_set('date_default_timezone', 'Europe/Brussels');
+    $config = config('system.regional');
+    $config->get('configurable_timezones');
+    $config->set('date_default_timezone', 'Europe/Brussels')->save();
 
     // Tell openid_test.module to respond with these SREG fields.
     $web_user = $this->drupalCreateUser(array());
@@ -614,7 +617,7 @@ class OpenIDRegistrationTestCase extends OpenIDWebTestCase {
    * information (i.e. no username or e-mail address).
    */
   function testRegisterUserWithoutSreg() {
-    variable_get('configurable_timezones', 1);
+    config('system.regional')->get('configurable_timezones');
 
     // Load the front page to get the user login block.
     $this->drupalGet('');
@@ -654,7 +657,7 @@ class OpenIDRegistrationTestCase extends OpenIDWebTestCase {
    */
   function testRegisterUserWithAXButNoSREG() {
     variable_set('user_email_verification', FALSE);
-    variable_set('date_default_timezone', 'Europe/Brussels');
+    config('system.regional')->set('date_default_timezone', 'Europe/Brussels');
 
     // Tell openid_test.module to respond with these AX fields.
     variable_set('openid_test_response', array(
diff --git a/core/modules/simpletest/lib/Drupal/simpletest/WebTestBase.php b/core/modules/simpletest/lib/Drupal/simpletest/WebTestBase.php
index 277e97b..7d8789c 100644
--- a/core/modules/simpletest/lib/Drupal/simpletest/WebTestBase.php
+++ b/core/modules/simpletest/lib/Drupal/simpletest/WebTestBase.php
@@ -753,7 +753,7 @@ abstract class WebTestBase extends TestBase {
     // Restore necessary variables.
     variable_set('install_task', 'done');
     variable_set('site_mail', 'simpletest@example.com');
-    variable_set('date_default_timezone', date_default_timezone_get());
+    config('system.regional')->set('date_default_timezone', date_default_timezone_get());
 
     // Set up English language.
     unset($conf['language_default']);
diff --git a/core/modules/system/config/system.regional.xml b/core/modules/system/config/system.regional.xml
new file mode 100644
index 0000000..74b3fc4
--- /dev/null
+++ b/core/modules/system/config/system.regional.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0"?>
+<config>
+    <site_default_country/>
+    <date_first_day>0</date_first_day>
+    <date_default_timezone/>
+    <configurable_timezones>1</configurable_timezones>
+    <empty_timezone_message>0</empty_timezone_message>
+    <user_default_timezone>0</user_default_timezone>
+</config>
diff --git a/core/modules/system/system.admin.inc b/core/modules/system/system.admin.inc
index dcc289a..e0684ef 100644
--- a/core/modules/system/system.admin.inc
+++ b/core/modules/system/system.admin.inc
@@ -1901,6 +1901,7 @@ function system_rss_feeds_settings() {
  */
 function system_regional_settings() {
   $countries = country_get_list();
+  $config = config('system.regional');
 
   // Date settings:
   $zones = system_time_zones();
@@ -1914,7 +1915,7 @@ function system_regional_settings() {
     '#type' => 'select',
     '#title' => t('Default country'),
     '#empty_value' => '',
-    '#default_value' => variable_get('site_default_country', ''),
+    '#default_value' => $config->get('site_default_country'),
     '#options' => $countries,
     '#attributes' => array('class' => array('country-detect')),
   );
@@ -1922,7 +1923,7 @@ function system_regional_settings() {
   $form['locale']['date_first_day'] = array(
     '#type' => 'select',
     '#title' => t('First day of week'),
-    '#default_value' => variable_get('date_first_day', 0),
+    '#default_value' => $config->get('date_first_day'),
     '#options' => array(0 => t('Sunday'), 1 => t('Monday'), 2 => t('Tuesday'), 3 => t('Wednesday'), 4 => t('Thursday'), 5 => t('Friday'), 6 => t('Saturday')),
   );
 
@@ -1931,14 +1932,15 @@ function system_regional_settings() {
     '#title' => t('Time zones'),
   );
 
+  $date_default_timezone = $config->get('date_default_timezone');
   $form['timezone']['date_default_timezone'] = array(
     '#type' => 'select',
     '#title' => t('Default time zone'),
-    '#default_value' => variable_get('date_default_timezone', date_default_timezone_get()),
+    '#default_value' => empty($date_default_timezone) ? date_default_timezone_get() : $date_default_timezone,
     '#options' => $zones,
   );
 
-  $configurable_timezones = variable_get('configurable_timezones', 1);
+  $configurable_timezones = $config->get('configurable_timezones');
   $form['timezone']['configurable_timezones'] = array(
     '#type' => 'checkbox',
     '#title' => t('Users may set their own time zone.'),
@@ -1958,14 +1960,14 @@ function system_regional_settings() {
   $form['timezone']['configurable_timezones_wrapper']['empty_timezone_message'] = array(
     '#type' => 'checkbox',
     '#title' => t('Remind users at login if their time zone is not set.'),
-    '#default_value' => variable_get('empty_timezone_message', 0),
+    '#default_value' => $config->get('empty_timezone_message'),
     '#description' => t('Only applied if users may set their own time zone.')
   );
 
   $form['timezone']['configurable_timezones_wrapper']['user_default_timezone'] = array(
     '#type' => 'radios',
     '#title' => t('Time zone for new users'),
-    '#default_value' => variable_get('user_default_timezone', DRUPAL_USER_TIMEZONE_DEFAULT),
+    '#default_value' => $config->get('user_default_timezone'),
     '#options' => array(
       DRUPAL_USER_TIMEZONE_DEFAULT => t('Default time zone.'),
       DRUPAL_USER_TIMEZONE_EMPTY   => t('Empty time zone.'),
@@ -1974,10 +1976,26 @@ function system_regional_settings() {
     '#description' => t('Only applied if users may set their own time zone.')
   );
 
+  $form['#submit'][] = 'system_regional_settings_submit';
+
   return system_settings_form($form);
 }
 
 /**
+ * Implements hook_form_submit.
+ */
+function system_regional_settings_submit($form, &$form_state) {
+  config('system.regional')
+    ->set('site_default_country', $form_state['values']['site_default_country'])
+    ->set('date_first_day', $form_state['values']['date_first_day'])
+    ->set('date_default_timezone', $form_state['values']['date_default_timezone'])
+    ->set('configurable_timezones', $form_state['values']['configurable_timezones'])
+    ->set('empty_timezone_message', $form_state['values']['empty_timezone_message'])
+    ->set('user_default_timezone', $form_state['values']['user_default_timezone'])
+    ->save();
+}
+
+/**
  * Form builder; Configure the site date and time settings.
  *
  * @ingroup forms
diff --git a/core/modules/system/system.module b/core/modules/system/system.module
index f26bb07..3486caa 100644
--- a/core/modules/system/system.module
+++ b/core/modules/system/system.module
@@ -2022,7 +2022,7 @@ function system_custom_theme() {
  * Implements hook_form_FORM_ID_alter().
  */
 function system_form_user_profile_form_alter(&$form, &$form_state) {
-  if (variable_get('configurable_timezones', 1)) {
+  if (config('system.regional')->get('configurable_timezones')) {
     system_user_timezone($form, $form_state);
   }
   return $form;
@@ -2032,7 +2032,8 @@ function system_form_user_profile_form_alter(&$form, &$form_state) {
  * Implements hook_form_FORM_ID_alter().
  */
 function system_form_user_register_form_alter(&$form, &$form_state) {
-  if (variable_get('configurable_timezones', 1) && variable_get('user_default_timezone', DRUPAL_USER_TIMEZONE_DEFAULT) == DRUPAL_USER_TIMEZONE_SELECT) {
+  $config = config('system.regional');
+  if ($config->get('configurable_timezones') && $config->get('user_default_timezone') == DRUPAL_USER_TIMEZONE_SELECT) {
     system_user_timezone($form, $form_state);
     return $form;
   }
@@ -2042,8 +2043,9 @@ function system_form_user_register_form_alter(&$form, &$form_state) {
  * Implements hook_user_presave().
  */
 function system_user_presave($account) {
-  if (variable_get('configurable_timezones', 1) && empty($account->timezone) && !variable_get('user_default_timezone', DRUPAL_USER_TIMEZONE_DEFAULT)) {
-    $account->timezone = variable_get('date_default_timezone', '');
+  $config = config('system.regional');
+  if ($config->get('configurable_timezones', 1) && empty($account->timezone) && !$config->get('user_default_timezone')) {
+    $account->timezone = $config->get('date_default_timezone');
   }
 }
 
@@ -2051,8 +2053,10 @@ function system_user_presave($account) {
  * Implements hook_user_login().
  */
 function system_user_login(&$edit, $account) {
+  $config = config('system.regional');
+
   // If the user has a NULL time zone, notify them to set a time zone.
-  if (!$account->timezone && variable_get('configurable_timezones', 1) && variable_get('empty_timezone_message', 0)) {
+  if (!$account->timezone && $config->get('configurable_timezones', 1) && $config->get('empty_timezone_message', 0)) {
     drupal_set_message(t('Configure your <a href="@user-edit">account time zone setting</a>.', array('@user-edit' => url("user/$account->uid/edit", array('query' => drupal_get_destination(), 'fragment' => 'edit-timezone')))));
   }
 }
@@ -2073,7 +2077,7 @@ function system_user_timezone(&$form, &$form_state) {
   $form['timezone']['timezone'] = array(
     '#type' => 'select',
     '#title' => t('Time zone'),
-    '#default_value' => isset($account->timezone) ? $account->timezone : ($account->uid == $user->uid ? variable_get('date_default_timezone', '') : ''),
+    '#default_value' => isset($account->timezone) ? $account->timezone : ($account->uid == $user->uid ? config('system.regional')->get('date_default_timezone') : ''),
     '#options' => system_time_zones($account->uid != $user->uid),
     '#description' => t('Select the desired local time and time zone. Dates and times throughout this site will be displayed using this time zone.'),
   );
diff --git a/core/modules/system/system.test b/core/modules/system/system.test
index e4dc730..d1c590b 100644
--- a/core/modules/system/system.test
+++ b/core/modules/system/system.test
@@ -1233,8 +1233,12 @@ class DateTimeFunctionalTest extends WebTestBase {
    */
   function testTimeZoneHandling() {
     // Setup date/time settings for Honolulu time.
-    variable_set('date_default_timezone', 'Pacific/Honolulu');
-    variable_set('configurable_timezones', 0);
+    $config = config('system.regional');
+    $config
+      ->set('date_default_timezone', 'Pacific/Honolulu')
+      ->set('configurable_timezones', 0)
+      ->save();
+
     variable_set('date_format_medium', 'Y-m-d H:i:s O');
 
     // Create some nodes with different authored-on dates.
@@ -1250,7 +1254,7 @@ class DateTimeFunctionalTest extends WebTestBase {
     $this->assertText('2007-07-31 21:00:00 -1000', t('Date should be identical, with GMT offset of -10 hours.'));
 
     // Set time zone to Los Angeles time.
-    variable_set('date_default_timezone', 'America/Los_Angeles');
+    $config->set('date_default_timezone', 'America/Los_Angeles');
 
     // Confirm date format and time zone.
     $this->drupalGet("node/$node1->nid");
diff --git a/core/modules/system/tests/common.test b/core/modules/system/tests/common.test
index 9b6e2be..851adbf 100644
--- a/core/modules/system/tests/common.test
+++ b/core/modules/system/tests/common.test
@@ -2377,7 +2377,7 @@ class CommonFormatDateTestCase extends WebTestBase {
 
   function setUp() {
     parent::setUp('locale');
-    variable_set('configurable_timezones', 1);
+    config('system.regional')->set('configurable_timezones', 1)->save();
     variable_set('date_format_long', 'l, j. F Y - G:i');
     variable_set('date_format_medium', 'j. F Y - G:i');
     variable_set('date_format_short', 'Y M j - g:ia');
diff --git a/core/modules/user/user.api.php b/core/modules/user/user.api.php
index 8c7286e..3a9ccd4 100644
--- a/core/modules/user/user.api.php
+++ b/core/modules/user/user.api.php
@@ -295,8 +295,10 @@ function hook_user_update($account) {
  *   The user object on which the operation was just performed.
  */
 function hook_user_login(&$edit, $account) {
+  $config = config('system.regional');
+
   // If the user has a NULL time zone, notify them to set a time zone.
-  if (!$account->timezone && variable_get('configurable_timezones', 1) && variable_get('empty_timezone_message', 0)) {
+  if (!$account->timezone && $config->get('configurable_timezones') && $config->get('empty_timezone_message', 0)) {
     drupal_set_message(t('Configure your <a href="@user-edit">account time zone setting</a>.', array('@user-edit' => url("user/$account->uid/edit", array('query' => drupal_get_destination(), 'fragment' => 'edit-timezone')))));
   }
 }
diff --git a/core/modules/user/user.test b/core/modules/user/user.test
index 7671eba..ab42f41 100644
--- a/core/modules/user/user.test
+++ b/core/modules/user/user.test
@@ -143,8 +143,10 @@ class UserRegistrationTestCase extends WebTestBase {
     variable_set('user_email_verification', FALSE);
 
     // Set the default timezone to Brussels.
-    variable_set('configurable_timezones', 1);
-    variable_set('date_default_timezone', 'Europe/Brussels');
+    config('system.regional')
+      ->set('configurable_timezones', 1)
+      ->set('date_default_timezone', 'Europe/Brussels')
+      ->save();
 
     // Check that the account information fieldset's options are not displayed
     // is a fieldset if there is not more than one fieldset in the form.
@@ -167,7 +169,7 @@ class UserRegistrationTestCase extends WebTestBase {
     $this->assertEqual($new_user->signature, '', t('Correct signature field.'));
     $this->assertTrue(($new_user->created > REQUEST_TIME - 20 ), t('Correct creation time.'));
     $this->assertEqual($new_user->status, variable_get('user_register', USER_REGISTER_VISITORS_ADMINISTRATIVE_APPROVAL) == USER_REGISTER_VISITORS ? 1 : 0, t('Correct status field.'));
-    $this->assertEqual($new_user->timezone, variable_get('date_default_timezone'), t('Correct time zone field.'));
+    $this->assertEqual($new_user->timezone, config('system.regional')->get('date_default_timezone'), t('Correct time zone field.'));
     $this->assertEqual($new_user->langcode, language_default()->langcode, t('Correct language field.'));
     $this->assertEqual($new_user->preferred_langcode, language_default()->langcode, t('Correct preferred language field.'));
     $this->assertEqual($new_user->picture, 0, t('Correct picture field.'));
@@ -1431,8 +1433,10 @@ class UserTimeZoneFunctionalTest extends WebTestBase {
    */
   function testUserTimeZone() {
     // Setup date/time settings for Los Angeles time.
-    variable_set('date_default_timezone', 'America/Los_Angeles');
-    variable_set('configurable_timezones', 1);
+    config('system.regional')
+      ->set('configurable_timezones', 1)
+      ->set('date_default_timezone', 'America/Los_Angeles')
+      ->save();
     variable_set('date_format_medium', 'Y-m-d H:i T');
 
     // Create a user account and login.
