diff --git a/core/includes/update.inc b/core/includes/update.inc
index 6aea70f..bcc881a 100644
--- a/core/includes/update.inc
+++ b/core/includes/update.inc
@@ -452,6 +452,13 @@ function update_prepare_stored_includes() {
  */
 function update_prepare_d8_language() {
   if (db_table_exists('languages')) {
+
+    // Install/enable the language module. We need to use the update specific
+    // version of this function to ensure schema conflicts don't happen due to
+    // our updated data.
+    $modules = array('language');
+    update_module_enable($modules);
+
     $languages = db_select('languages', 'l')
       ->fields('l')
       ->execute();
@@ -490,12 +497,6 @@ function update_prepare_d8_language() {
     // Rename the languages table to language.
     db_rename_table('languages', 'language');
 
-    // Install/enable the language module. We need to use the update specific
-    // version of this function to ensure schema conflicts don't happen due to
-    // our updated data.
-    $modules = array('language');
-    update_module_enable($modules);
-
     // Rename language column to langcode and set it again as the primary key.
     if (db_field_exists('language', 'language')) {
       db_drop_primary_key('language');
@@ -673,6 +674,13 @@ function update_fix_d8_requirements() {
     );
     db_create_table('key_value_expire', $schema);
 
+    // Views module is required to convert all previously existing listings into
+    // views configurations.
+    // Like any other module APIs and services, Views' services are not available
+    // in update.php. Existing listings are migrated into configuration, using
+    // the limited standard tools of raw database queries and config().
+    update_module_enable(array('views'));
+
     update_variable_set('update_d8_requirements', TRUE);
   }
 }
@@ -733,6 +741,27 @@ function update_module_enable(array $modules, $schema_version = 0) {
       $old_schema[$module] = $current_schema;
     }
 
+    // Copy the default configuration of the module into the active storage.
+    // The default configuration is not altered in any way, and since the module
+    // is just being installed, none of its configuration can exist already, so
+    // this is a plain copy operation from one storage to another.
+    $module_config_path = drupal_get_path('module', $module) . '/config';
+    if (is_dir($module_config_path)) {
+      $module_filestorage = new FileStorage($module_config_path);
+      $config_storage = drupal_container()->get('config.storage');
+      foreach ($module_filestorage->listAll() as $config_name) {
+        // If this file already exists, something in the upgrade path went
+        // completely wrong and we want to know.
+        if ($config_storage->exists($config_name)) {
+          throw new ConfigException(format_string('Default configuration file @name of @module module unexpectedly exists already before the module was installed.', array(
+            '@module' => $module,
+            '@name' => $config_name,
+          )));
+        }
+        $config_storage->write($config_name, $module_filestorage->read($config_name));
+      }
+    }
+
     // system_list_reset() is in module.inc but that would only be available
     // once the variable bootstrap is done.
     require_once DRUPAL_ROOT . '/core/includes/module.inc';
diff --git a/core/modules/system/system.install b/core/modules/system/system.install
index a93a124..a11ee69 100644
--- a/core/modules/system/system.install
+++ b/core/modules/system/system.install
@@ -1,12 +1,14 @@
 <?php
 
-use Drupal\Core\Database\Database;
-
 /**
  * @file
  * Install, update and uninstall functions for the system module.
  */
 
+use Drupal\Core\Config\ConfigException;
+use Drupal\Core\Config\FileStorage;
+use Drupal\Core\Database\Database;
+
 /**
  * Test and report Drupal installation requirements.
  *
@@ -2009,18 +2011,21 @@ function system_update_8045() {
 function system_update_8046() {
   $front_page = config('system.site')->get('page.front');
   if (!isset($front_page) || $front_page == 'node') {
-    update_module_enable(array('views'));
-
-    // Register views to the container, so views can use it's services.
-    $module_list = drupal_container()->getParameter('container.modules');
-    drupal_load('module', 'views');
-
-    drupal_container()->get('kernel')->updateModules(array_keys($module_list), array('views' => 'core/modules/views/views.module'));
-
-    // This does not fire a hook just calls views.
-    config_install_default_config('module', 'views');
     // This imports the node frontpage view.
-    config_install_default_config('module', 'node');
+    $module = 'node';
+    $config_name = 'views.view.frontpage';
+    $module_config_path = drupal_get_path('module', $module) . '/config';
+    $module_filestorage = new FileStorage($module_config_path);
+    $config_storage = drupal_container()->get('config.storage');
+    // If this file already exists, something in the upgrade path went
+    // completely wrong and we want to know.
+    if ($config_storage->exists($config_name)) {
+      throw new ConfigException(format_string('Default configuration file @name of @module module unexpectedly exists already before the module was installed.', array(
+        '@module' => $module,
+        '@name' => $config_name,
+      )));
+    }
+    $config_storage->write($config_name, $module_filestorage->read($config_name));
   }
 }
 
diff --git a/core/modules/views/views.install b/core/modules/views/views.install
index 8bda10e..364257c 100644
--- a/core/modules/views/views.install
+++ b/core/modules/views/views.install
@@ -8,19 +8,14 @@
 use Drupal\Core\Database\Database;
 
 /**
- * Implements hook_install().
- */
-function views_install() {
-  module_set_weight('views', 10);
-}
-
-/**
  * Implements hook_schema().
  */
 function views_schema() {
-  $schema['cache_views_info'] = drupal_get_schema_unprocessed('system', 'cache');
+  $cache_schema = drupal_get_schema_unprocessed('system', 'cache');
+
+  $schema['cache_views_info'] = $cache_schema;
 
-  $schema['cache_views_results'] = drupal_get_schema_unprocessed('system', 'cache');
+  $schema['cache_views_results'] = $cache_schema;
   $schema['cache_views_results']['description'] = 'Cache table for views to store pre-rendered queries, results, and display output.';
   $schema['cache_views_results']['fields']['serialized']['default'] = 1;
 
@@ -30,13 +25,17 @@ function views_schema() {
 /**
  * Provide an initial schema.
  *
- * @see update_module_enable().
+ * @see update_module_enable()
  */
 function views_schema_0() {
   module_load_install('system');
-  // Add the cache_views_info and cache_views_results tables.
   $cache_schema = system_schema_cache_8007();
+
   $schema['cache_views_info'] = $cache_schema;
+
   $schema['cache_views_results'] = $cache_schema;
+  $schema['cache_views_results']['description'] = 'Cache table for views to store pre-rendered queries, results, and display output.';
+  $schema['cache_views_results']['fields']['serialized']['default'] = 1;
+
   return $schema;
 }
