diff --git a/core/includes/file.inc b/core/includes/file.inc
index 2771f62..4c02dd0 100644
--- a/core/includes/file.inc
+++ b/core/includes/file.inc
@@ -318,7 +318,8 @@ function file_uri_target($uri) {
  *   'public', 'private' or any other file scheme defined as the default.
  */
 function file_default_scheme() {
-  return variable_get('file_default_scheme', 'public');
+  $config = config('system.file_system');
+  return $config->get('file_default_scheme');
 }
 
 /**
@@ -523,8 +524,9 @@ function file_prepare_directory(&$directory, $options = FILE_MODIFY_PERMISSIONS)
  * Creates a .htaccess file in each Drupal files directory if it is missing.
  */
 function file_ensure_htaccess() {
+  $config = config('system.file_system');
   file_save_htaccess('public://', FALSE);
-  if (variable_get('file_private_path', FALSE)) {
+  if ($config->get('file_private_path')) {
     file_save_htaccess('private://', TRUE);
   }
   file_save_htaccess('temporary://', TRUE);
@@ -2485,7 +2487,9 @@ function drupal_tempnam($directory, $prefix) {
  * Gets the path of system-appropriate temporary directory.
  */
 function file_directory_temp() {
-  $temporary_directory = variable_get('file_temporary_path', NULL);
+  $config = config('system.file_system');
+
+  $temporary_directory = $config->get('file_temporary_path');
 
   if (empty($temporary_directory)) {
     $directories = array();
@@ -2515,7 +2519,7 @@ function file_directory_temp() {
 
     if (empty($temporary_directory)) {
       // If no directory has been found default to 'files/tmp'.
-      $temporary_directory = variable_get('file_public_path', conf_path() . '/files') . '/tmp';
+      $temporary_directory = $config->get('file_public_path') . '/tmp';
 
       // Windows accepts paths with either slash (/) or backslash (\), but will
       // not accept a path which contains both a slash and a backslash. Since
@@ -2524,7 +2528,8 @@ function file_directory_temp() {
       $temporary_directory = str_replace('\\', '/', $temporary_directory);
     }
     // Save the path of the discovered directory.
-    variable_set('file_temporary_path', $temporary_directory);
+    $config->set('file_temporary_path', $temporary_directory);
+    $config->save();
   }
 
   return $temporary_directory;
diff --git a/core/modules/image/image.test b/core/modules/image/image.test
index 2c422a7..11e7242 100644
--- a/core/modules/image/image.test
+++ b/core/modules/image/image.test
@@ -186,7 +186,9 @@ class ImageStylesPathAndUrlUnitTest extends DrupalWebTestCase {
   function _testImageStyleUrlAndPath($scheme, $clean_url = TRUE) {
     // Make the default scheme neither "public" nor "private" to verify the
     // functions work for other than the default scheme.
-    variable_set('file_default_scheme', 'temporary');
+    $file_system_config = config('system.file_system');
+    $file_system_config->set('file_default_scheme', 'temporary');
+    $file_system_config->save();
     variable_set('clean_url', $clean_url);
 
     // Create the directories for the styles.
diff --git a/core/modules/simpletest/drupal_web_test_case.php b/core/modules/simpletest/drupal_web_test_case.php
index ded4ad0..76140ad 100644
--- a/core/modules/simpletest/drupal_web_test_case.php
+++ b/core/modules/simpletest/drupal_web_test_case.php
@@ -474,8 +474,9 @@ abstract class DrupalTestCase {
    *   methods during debugging.
    */
   public function run(array $methods = array()) {
+    $config = config('system.file_system');
     // Initialize verbose debugging.
-    simpletest_verbose(NULL, variable_get('file_public_path', conf_path() . '/files'), get_class($this));
+    simpletest_verbose(NULL, $config->get('file_public_path'), get_class($this));
 
     // HTTP auth settings (<username>:<password>) for the simpletest browser
     // when sending requests to the test site.
@@ -705,9 +706,10 @@ class DrupalUnitTestCase extends DrupalTestCase {
    */
   protected function setUp() {
     global $conf;
+    $config = config('system.file_system');
 
     // Store necessary current values before switching to the test environment.
-    $this->originalFileDirectory = variable_get('file_public_path', conf_path() . '/files');
+    $this->originalFileDirectory = $config->get('file_public_path');
 
     // Reset all statics so that test is performed with a clean environment.
     drupal_static_reset();
@@ -1036,6 +1038,7 @@ class DrupalWebTestCase extends DrupalTestCase {
    *   List of files that match filter.
    */
   protected function drupalGetTestFiles($type, $size = NULL) {
+    $config = config('system.file_system');
     if (empty($this->generatedTestFiles)) {
       // Generate binary test files.
       $lines = array(64, 1024);
@@ -1055,7 +1058,7 @@ class DrupalWebTestCase extends DrupalTestCase {
       $original = drupal_get_path('module', 'simpletest') . '/files';
       $files = file_scan_directory($original, '/(html|image|javascript|php|sql)-.*/');
       foreach ($files as $file) {
-        file_unmanaged_copy($file->uri, variable_get('file_public_path', conf_path() . '/files'));
+        file_unmanaged_copy($file->uri, $config->get('file_public_path'));
       }
 
       $this->generatedTestFiles = TRUE;
@@ -1288,6 +1291,7 @@ class DrupalWebTestCase extends DrupalTestCase {
    */
   protected function setUp() {
     global $user, $language_interface, $conf;
+    $file_system_config = config('system.file_system');
 
     // Generate a temporary prefixed database to ensure that tests have a clean starting point.
     $this->databasePrefix = 'simpletest' . mt_rand(1000, 1000000);
@@ -1315,7 +1319,7 @@ class DrupalWebTestCase extends DrupalTestCase {
     $this->originalLanguageDefault = variable_get('language_default');
     $this->originalConfigDirectory = $GLOBALS['config_directory_name'];
     $this->originalConfigSignatureKey = $GLOBALS['config_signature_key'];
-    $this->originalFileDirectory = variable_get('file_public_path', conf_path() . '/files');
+    $this->originalFileDirectory = $file_system_config->get('file_public_path');
     $this->originalProfile = drupal_get_profile();
     $clean_url_original = variable_get('clean_url', 0);
 
@@ -1381,9 +1385,11 @@ class DrupalWebTestCase extends DrupalTestCase {
     $this->preloadRegistry();
 
     // Set path variables.
-    variable_set('file_public_path', $public_files_directory);
-    variable_set('file_private_path', $private_files_directory);
-    variable_set('file_temporary_path', $temp_files_directory);
+    $file_system_config = config('system.file_system');
+    $file_system_config->set('file_public_path', $public_files_directory);
+    $file_system_config->set('file_private_path', $private_files_directory);
+    $file_system_config->set('file_temporary_path', $temp_files_directory);
+    $file_system_config->save();
 
     // Set the 'simpletest_parent_profile' variable to add the parent profile's
     // search path to the child site's search paths.
diff --git a/core/modules/simpletest/tests/file.test b/core/modules/simpletest/tests/file.test
index 5b6a6f4..4d9a01f 100644
--- a/core/modules/simpletest/tests/file.test
+++ b/core/modules/simpletest/tests/file.test
@@ -573,7 +573,9 @@ class RemoteFileUnmanagedSaveDataTest extends FileUnmanagedSaveDataTest {
 
   function setUp() {
     parent::setUp('file_test');
-    variable_set('file_default_scheme', 'dummy-remote');
+    $config = config('system.file_system');
+    $config->set('file_default_scheme', 'dummy-remote');
+    $config->save();
   }
 }
 
@@ -909,7 +911,9 @@ class RemoteFileSaveUploadTest extends FileSaveUploadTest {
 
   function setUp() {
     parent::setUp('file_test');
-    variable_set('file_default_scheme', 'dummy-remote');
+    $config = config('system.file_system');
+    $config->set('file_default_scheme', 'dummy-remote');
+    $config->save();
   }
 }
 
@@ -1028,10 +1032,13 @@ class FileDirectoryTest extends FileTestCase {
    */
   function testFileDirectoryTemp() {
     // Start with an empty variable to ensure we have a clean slate.
-    variable_set('file_temporary_path', '');
+    $config = config('system.file_system');
+    $config->set('file_temporary_path', '');
+    $config->save();
+
     $tmp_directory = file_directory_temp();
     $this->assertEqual(empty($tmp_directory), FALSE, t('file_directory_temp() returned a non-empty value.'));
-    $setting = variable_get('file_temporary_path', '');
+    $setting = $config->get('file_temporary_path');
     $this->assertEqual($setting, $tmp_directory, t("The 'file_temporary_path' variable has the same value that file_directory_temp() returned."));
   }
 }
@@ -1048,7 +1055,9 @@ class RemoteFileDirectoryTest extends FileDirectoryTest {
 
   function setUp() {
     parent::setUp('file_test');
-    variable_set('file_default_scheme', 'dummy-remote');
+    $config = config('system.file_system');
+    $config->set('file_default_scheme', 'dummy-remote');
+    $config->save();
   }
 }
 
@@ -1193,7 +1202,9 @@ class RemoteFileScanDirectoryTest extends FileScanDirectoryTest {
 
   function setUp() {
     parent::setUp('file_test');
-    variable_set('file_default_scheme', 'dummy-remote');
+    $config = config('system.file_system');
+    $config->set('file_default_scheme', 'dummy-remote');
+    $config->save();
   }
 }
 
@@ -1254,7 +1265,9 @@ class RemoteFileUnmanagedDeleteTest extends FileUnmanagedDeleteTest {
 
   function setUp() {
     parent::setUp('file_test');
-    variable_set('file_default_scheme', 'dummy-remote');
+    $config = config('system.file_system');
+    $config->set('file_default_scheme', 'dummy-remote');
+    $config->save();
   }
 }
 
@@ -1346,7 +1359,9 @@ class RemoteFileUnmanagedDeleteRecursiveTest extends FileUnmanagedDeleteRecursiv
 
   function setUp() {
     parent::setUp('file_test');
-    variable_set('file_default_scheme', 'dummy-remote');
+    $config = config('system.file_system');
+    $config->set('file_default_scheme', 'dummy-remote');
+    $config->save();
   }
 }
 
@@ -1434,7 +1449,9 @@ class RemoteFileUnmanagedMoveTest extends FileUnmanagedMoveTest {
 
   function setUp() {
     parent::setUp('file_test');
-    variable_set('file_default_scheme', 'dummy-remote');
+    $config = config('system.file_system');
+    $config->set('file_default_scheme', 'dummy-remote');
+    $config->save();
   }
 }
 
@@ -1538,7 +1555,9 @@ class RemoteFileUnmanagedCopyTest extends FileUnmanagedCopyTest {
 
   function setUp() {
     parent::setUp('file_test');
-    variable_set('file_default_scheme', 'dummy-remote');
+    $config = config('system.file_system');
+    $config->set('file_default_scheme', 'dummy-remote');
+    $config->save();
   }
 }
 
@@ -2746,6 +2765,8 @@ class StreamWrapperTest extends DrupalWebTestCase {
    * Test the URI and target functions.
    */
   function testUriFunctions() {
+    $config = config('system.file_system');
+
     $instance = file_stream_wrapper_get_instance_by_uri($this->scheme . '://foo');
     $this->assertEqual($this->classname, get_class($instance), t('Got correct class type for dummy URI.'));
 
@@ -2759,10 +2780,12 @@ class StreamWrapperTest extends DrupalWebTestCase {
     // Test file_build_uri() and
     // Drupal\Core\StreamWrapper\LocalStream::getDirectoryPath().
     $this->assertEqual(file_build_uri('foo/bar.txt'), 'public://foo/bar.txt', t('Expected scheme was added.'));
-    $this->assertEqual(file_stream_wrapper_get_instance_by_scheme('public')->getDirectoryPath(), variable_get('file_public_path'), t('Expected default directory path was returned.'));
-    $this->assertEqual(file_stream_wrapper_get_instance_by_scheme('temporary')->getDirectoryPath(), variable_get('file_temporary_path'), t('Expected temporary directory path was returned.'));
+    $this->assertEqual(file_stream_wrapper_get_instance_by_scheme('public')->getDirectoryPath(), $config->get('file_public_path'), t('Expected default directory path was returned.'));
+    $this->assertEqual(file_stream_wrapper_get_instance_by_scheme('temporary')->getDirectoryPath(), $config->get('file_temporary_path'), t('Expected temporary directory path was returned.'));
+
+    $config->set('file_default_scheme', 'private');
+    $config->save();
 
-    variable_set('file_default_scheme', 'private');
     $this->assertEqual(file_build_uri('foo/bar.txt'), 'private://foo/bar.txt', t('Got a valid URI from foo/bar.txt.'));
   }
 
diff --git a/core/modules/simpletest/tests/upgrade/upgrade.test b/core/modules/simpletest/tests/upgrade/upgrade.test
index aafb642..7557320 100644
--- a/core/modules/simpletest/tests/upgrade/upgrade.test
+++ b/core/modules/simpletest/tests/upgrade/upgrade.test
@@ -46,6 +46,7 @@ abstract class UpgradePathTestCase extends DrupalWebTestCase {
    */
   protected function setUp() {
     global $user, $language_interface, $conf;
+    $file_system_config = config('system.file_system');
 
     // Load the Update API.
     require_once DRUPAL_ROOT . '/core/includes/update.inc';
@@ -76,7 +77,7 @@ abstract class UpgradePathTestCase extends DrupalWebTestCase {
     // Store necessary current values before switching to prefixed database.
     $this->originalLanguage = $language_interface;
     $this->originalLanguageDefault = variable_get('language_default');
-    $this->originalFileDirectory = variable_get('file_public_path', conf_path() . '/files');
+    $this->originalFileDirectory = $file_system_config->get('file_public_path');
     $this->originalProfile = drupal_get_profile();
     $clean_url_original = variable_get('clean_url', 0);
 
@@ -115,9 +116,11 @@ abstract class UpgradePathTestCase extends DrupalWebTestCase {
     }
 
     // Set path variables.
-    $this->variable_set('file_public_path', $public_files_directory);
-    $this->variable_set('file_private_path', $private_files_directory);
-    $this->variable_set('file_temporary_path', $temp_files_directory);
+    $this->$file_system_config = config('system.file_system');
+    $this->$file_system_config->set('file_public_path', $public_files_directory);
+    $this->$file_system_config->set('file_private_path', $private_files_directory);
+    $this->$file_system_config->set('file_temporary_path', $temp_files_directory);
+    $this->$file_system_config->save();
 
     $this->pass('Finished loading the dump.');
 
diff --git a/core/modules/system/config/system.file_system.xml b/core/modules/system/config/system.file_system.xml
new file mode 100644
index 0000000..534d30e
--- /dev/null
+++ b/core/modules/system/config/system.file_system.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0"?>
+<config>
+  <file_temporary_path>/tmp</file_temporary_path>
+</config>
diff --git a/core/modules/system/system.admin.inc b/core/modules/system/system.admin.inc
index 978b0f4..3a924a6 100644
--- a/core/modules/system/system.admin.inc
+++ b/core/modules/system/system.admin.inc
@@ -1773,13 +1773,14 @@ function system_clear_page_cache_submit($form, &$form_state) {
  * Form builder; Configure the site file handling.
  *
  * @ingroup forms
- * @see system_settings_form()
+ * @see system_file_system_settings_submit()
  */
 function system_file_system_settings() {
+  $config = config('system.file_system');
   $form['file_public_path'] = array(
     '#type' => 'textfield',
     '#title' => t('Public file system path'),
-    '#default_value' => variable_get('file_public_path', conf_path() . '/files'),
+    '#default_value' => $config->get('file_public_path'),
     '#maxlength' => 255,
     '#description' => t('A local file system path where public files will be stored. This directory must exist and be writable by Drupal. This directory must be relative to the Drupal installation directory and be accessible over the web.'),
     '#after_build' => array('system_check_directory'),
@@ -1788,7 +1789,7 @@ function system_file_system_settings() {
   $form['file_private_path'] = array(
     '#type' => 'textfield',
     '#title' => t('Private file system path'),
-    '#default_value' => variable_get('file_private_path', ''),
+    '#default_value' => $config->get('file_private_path'),
     '#maxlength' => 255,
     '#description' => t('An existing local file system path for storing private files. It should be writable by Drupal and not accessible over the web. See the online handbook for <a href="@handbook">more information about securing private files</a>.', array('@handbook' => 'http://drupal.org/documentation/modules/file')),
     '#after_build' => array('system_check_directory'),
@@ -1797,7 +1798,7 @@ function system_file_system_settings() {
   $form['file_temporary_path'] = array(
     '#type' => 'textfield',
     '#title' => t('Temporary directory'),
-    '#default_value' => variable_get('file_temporary_path', file_directory_temp()),
+    '#default_value' => $config->get('file_temporary_path'),
     '#maxlength' => 255,
     '#description' => t('A local file system path where temporary files will be stored. This directory should not be accessible over the web.'),
     '#after_build' => array('system_check_directory'),
@@ -1807,18 +1808,41 @@ function system_file_system_settings() {
   foreach (file_get_stream_wrappers(STREAM_WRAPPERS_WRITE_VISIBLE) as $scheme => $info) {
     $options[$scheme] = check_plain($info['description']);
   }
-
   if (!empty($options)) {
     $form['file_default_scheme'] = array(
       '#type' => 'radios',
       '#title' => t('Default download method'),
-      '#default_value' => variable_get('file_default_scheme', isset($options['public']) ? 'public' : key($options)),
+      '#default_value' => $config->get('file_default_scheme'),
       '#options' => $options,
       '#description' => t('This setting is used as the preferred download method. The use of public files is more efficient, but does not provide any access control.'),
     );
   }
 
-  return system_settings_form($form);
+  $form['submit'] = array(
+    '#type' => 'submit',
+    '#value' => t('Save configuration'),
+  );
+
+  $form['#submit'][] = 'system_file_system_settings_submit';
+
+  return $form;
+}
+
+/**
+ * Save configuration values for file system.
+ *
+ * @ingroup forms
+ * @see system_file_system_settings()
+ */
+function system_file_system_settings_submit($form, &$form_state) {
+  $config = config('system.file_system');
+  $config->set('file_public_path', $form_state['values']['file_public_path']);
+  $config->set('file_private_path', $form_state['values']['file_private_path']);
+  $config->set('file_temporary_path', $form_state['values']['file_temporary_path']);
+  if(isset($form_state['values']['file_default_scheme'])) {
+    $config->set('file_default_scheme', $form_state['values']['file_default_scheme']);
+  }
+  $config->save();
 }
 
 /**
diff --git a/core/modules/system/system.install b/core/modules/system/system.install
index 905d11d..0923eb2 100644
--- a/core/modules/system/system.install
+++ b/core/modules/system/system.install
@@ -516,6 +516,21 @@ function system_install() {
   // Populate the cron key variable.
   $cron_key = drupal_hash_base64(drupal_random_bytes(55));
   variable_set('cron_key', $cron_key);
+
+  // Set non-static default configuration values for file system settings form.
+  $config = config('system.file_system');
+  $config->set('file_public_path', conf_path() . '/files');
+  $config->set('file_temporary_path', file_directory_temp());
+  foreach (file_get_stream_wrappers(STREAM_WRAPPERS_WRITE_VISIBLE) as $scheme => $info) {
+    $options[$scheme] = check_plain($info['description']);
+  }
+  if(isset($options['public'])) {
+    $config->set('file_default_scheme', 'public');
+  }
+  else {
+    $config->set('file_default_scheme', key($options));
+  }
+  $config->save();
 }
 
 /**
diff --git a/core/modules/system/system.module b/core/modules/system/system.module
index 94fd3e0..c83f5fc 100644
--- a/core/modules/system/system.module
+++ b/core/modules/system/system.module
@@ -1676,6 +1676,7 @@ function system_library_info() {
  * Implements hook_stream_wrappers().
  */
 function system_stream_wrappers() {
+  $config = config('system.file_system');
   $wrappers = array(
     'public' => array(
       'name' => t('Public files'),
@@ -1692,7 +1693,7 @@ function system_stream_wrappers() {
   );
 
   // Only register the private file stream wrapper if a file path has been set.
-  if (variable_get('file_private_path', FALSE)) {
+  if ($config->get('file_private_path')) {
     $wrappers['private'] = array(
       'name' => t('Private files'),
       'class' => 'Drupal\Core\StreamWrapper\PrivateStream',
diff --git a/core/modules/system/system.test b/core/modules/system/system.test
index 9287d16..a12ae44 100644
--- a/core/modules/system/system.test
+++ b/core/modules/system/system.test
@@ -1628,9 +1628,10 @@ class SystemThemeFunctionalTest extends DrupalWebTestCase {
    * Test the theme settings form.
    */
   function testThemeSettings() {
+    $config = config('system.file_system');
     // Specify a filesystem path to be used for the logo.
     $file = current($this->drupalGetTestFiles('image'));
-    $file_relative = strtr($file->uri, array('public:/' => variable_get('file_public_path', conf_path() . '/files')));
+    $file_relative = strtr($file->uri, array('public:/' => $config->get('file_public_path')));
     $default_theme_path = 'core/themes/stark';
 
     $supported_paths = array(
@@ -1682,7 +1683,7 @@ class SystemThemeFunctionalTest extends DrupalWebTestCase {
       if (file_uri_scheme($input) == 'public') {
         $implicit_public_file = file_uri_target($input);
         $explicit_file = $input;
-        $local_file = strtr($input, array('public:/' => variable_get('file_public_path', conf_path() . '/files')));
+        $local_file = strtr($input, array('public:/' => $config->get('file_public_path')));
       }
       // Adjust for fully qualified stream wrapper URI elsewhere.
       elseif (file_uri_scheme($input) !== FALSE) {
@@ -1692,7 +1693,7 @@ class SystemThemeFunctionalTest extends DrupalWebTestCase {
       elseif ($input == file_uri_target($file->uri)) {
         $implicit_public_file = $input;
         $explicit_file = 'public://' . $input;
-        $local_file = variable_get('file_public_path', conf_path() . '/files') . '/' . $input;
+        $local_file = $config->get('file_public_path') . '/' . $input;
       }
       $this->assertEqual((string) $elements[0], $implicit_public_file);
       $this->assertEqual((string) $elements[1], $explicit_file);
@@ -1717,9 +1718,9 @@ class SystemThemeFunctionalTest extends DrupalWebTestCase {
       // Relative path within the public filesystem to non-existing file.
       'whatever.png',
       // Relative path to non-existing file in public filesystem.
-      variable_get('file_public_path', conf_path() . '/files') . '/whatever.png',
+      $config->get('file_public_path') . '/whatever.png',
       // Semi-absolute path to non-existing file in public filesystem.
-      '/' . variable_get('file_public_path', conf_path() . '/files') . '/whatever.png',
+      '/' . $config->get('file_public_path') . '/whatever.png',
       // Relative path to arbitrary non-existing file.
       'core/misc/whatever.png',
       // Semi-absolute path to arbitrary non-existing file.
