diff --git a/core/includes/config.inc b/core/includes/config.inc
index fa804ac..0e489da 100644
--- a/core/includes/config.inc
+++ b/core/includes/config.inc
@@ -3,11 +3,10 @@
 use Drupal\Component\Utility\Unicode;
 use Drupal\Core\Config\Config;
 use Drupal\Core\Config\ConfigException;
-use Drupal\Core\Config\ConfigInstaller;
 use Drupal\Core\Config\ExtensionInstallStorage;
+use Drupal\Core\Config\Context\FreeConfigContext;
 use Drupal\Core\Config\FileStorage;
 use Drupal\Core\Config\StorageInterface;
-use Drupal\Core\Config\ExtensionInstallStorageComparer;
 use Symfony\Component\Yaml\Dumper;
 
 /**
@@ -37,8 +36,6 @@
  *   The name of the module or theme to install default configuration for.
  *
  * @see \Drupal\Core\Config\ExtensionInstallStorage
- * @see \Drupal\Core\Config\ExtensionInstallStorageComparer
- * @see \Drupal\Core\Config\ConfigInstaller
  */
 function config_install_default_config($type, $name) {
   // Get all default configuration owned by this extension.
@@ -66,20 +63,34 @@ function ($value) use ($name) {
     $config_to_install = array_merge($config_to_install, $other_module_config);
   }
   if (!empty($config_to_install)) {
-    $storage_comparer = new ExtensionInstallStorageComparer($source_storage, \Drupal::service('config.storage'));
-    $storage_comparer->setSourceNames($config_to_install);
-    // Only import new config. Changed config is from previous enables and
-    // should not be overwritten.
-    $storage_comparer->addChangelistCreate();
-    $installer = new ConfigInstaller(
-      $storage_comparer,
-      \Drupal::service('event_dispatcher'),
-      \Drupal::service('config.factory'),
-      \Drupal::entityManager(),
-      \Drupal::lock(),
-      \Drupal::service('uuid')
-    );
-    $installer->import();
+    $entity_manager = Drupal::service('entity.manager');
+    $config_factory = Drupal::service('config.factory');
+    $context = new FreeConfigContext(Drupal::service('event_dispatcher'), Drupal::service('uuid'));
+    $target_storage = Drupal::service('config.storage');
+    foreach ($config_to_install as $name) {
+      // Only import new config.
+      if ($target_storage->exists($name)) {
+        continue;
+      }
+
+      $new_config = new Config($name, $target_storage, $context);
+      $data = $source_storage->read($name);
+      if ($data !== FALSE) {
+        $new_config->setData($data);
+      }
+      if ($entity_type = config_get_entity_type_by_name($name)) {
+        $entity_manager
+          ->getStorageController($entity_type)
+          ->create($new_config->get())
+          ->save();
+      }
+      else {
+        $new_config->save();
+      }
+
+      // Reset static cache on the config factory.
+      $config_factory->reset($name);
+    }
   }
 }
 
diff --git a/core/lib/Drupal/Core/Config/ConfigInstaller.php b/core/lib/Drupal/Core/Config/ConfigInstaller.php
deleted file mode 100644
index 11622b2..0000000
--- a/core/lib/Drupal/Core/Config/ConfigInstaller.php
+++ /dev/null
@@ -1,33 +0,0 @@
-<?php
-
-/**
- * @file
- * Contains \Drupal\Core\Config\ConfigInstaller.
- */
-
-namespace Drupal\Core\Config;
-
-/**
- * Defines a configuration installer.
- *
- * A config installer imports the changes into the configuration system during
- * module installs.
- *
- * The ConfigInstaller has a identifier which is used to construct event names.
- * The events fired during an import are:
- * - 'config.installer.validate': Events listening can throw a
- *   \Drupal\Core\Config\ConfigImporterException to prevent an import from
- *   occurring.
- *   @see \Drupal\Core\EventSubscriber\ConfigImportSubscriber
- * - 'config.installer.import': Events listening can react to a successful import.
- *
- * @see \Drupal\Core\Config\ConfigImporter
- */
-class ConfigInstaller extends ConfigImporter {
-
-  /**
-   * The name used to identify events and the lock.
-   */
-  const ID = 'config.installer';
-
-}
diff --git a/core/lib/Drupal/Core/Config/ExtensionInstallStorage.php b/core/lib/Drupal/Core/Config/ExtensionInstallStorage.php
index 689b14d..2c3bf08 100644
--- a/core/lib/Drupal/Core/Config/ExtensionInstallStorage.php
+++ b/core/lib/Drupal/Core/Config/ExtensionInstallStorage.php
@@ -30,32 +30,5 @@ protected function getAllFolders() {
     }
     return $this->folders;
   }
-
-  /**
-   * {@inheritdoc}
-   *
-   * @throws \Drupal\Core\Config\StorageException
-   */
-  public function write($name, array $data) {
-    throw new StorageException('Write operation is not allowed for config extension install storage.');
-  }
-
-  /**
-   * {@inheritdoc}
-   *
-   * @throws \Drupal\Core\Config\StorageException
-   */
-  public function delete($name) {
-    throw new StorageException('Delete operation is not allowed for config extension install storage.');
-  }
-
-  /**
-   * {@inheritdoc}
-   *
-   * @throws \Drupal\Core\Config\StorageException
-   */
-  public function rename($name, $new_name) {
-    throw new StorageException('Rename operation is not allowed for config extension install storage.');
-  }
-
 }
+
diff --git a/core/lib/Drupal/Core/Config/ExtensionInstallStorageComparer.php b/core/lib/Drupal/Core/Config/ExtensionInstallStorageComparer.php
deleted file mode 100644
index 0503315..0000000
--- a/core/lib/Drupal/Core/Config/ExtensionInstallStorageComparer.php
+++ /dev/null
@@ -1,38 +0,0 @@
-<?php
-
-/**
- * @file
- * Contains \Drupal\Core\Config\ExtensionInstallStorageComparer.
- */
-
-namespace Drupal\Core\Config;
-
-/**
- * Defines a config storage comparer.
- */
-class ExtensionInstallStorageComparer extends StorageComparer {
-
-  /**
-   * Sets the configuration names in the source storage.
-   *
-   * @param array $source_names
-   *   List of all the configuration names in the source storage.
-   */
-  public function setSourceNames(array $source_names) {
-    $this->sourceNames = $source_names;
-    return $this;
-  }
-
-  /**
-   * Gets all the configuration names in the source storage.
-   *
-   * @return array
-   *   List of all the configuration names in the source storage.
-   *
-   * @see self::setSourceNames()
-   */
-  protected function getSourceNames() {
-    return $this->sourceNames;
-  }
-
-}
diff --git a/core/modules/config/lib/Drupal/config/Tests/ConfigInstallTest.php b/core/modules/config/lib/Drupal/config/Tests/ConfigInstallTest.php
index f9c79e3..1062ea5 100644
--- a/core/modules/config/lib/Drupal/config/Tests/ConfigInstallTest.php
+++ b/core/modules/config/lib/Drupal/config/Tests/ConfigInstallTest.php
@@ -52,10 +52,6 @@ function testModuleInstallation() {
     $config = \Drupal::config($default_configuration_entity);
     $this->assertIdentical($config->isNew(), FALSE);
 
-    // Verify that configuration import callback was invoked for the dynamic
-    // configuration entity.
-    $this->assertTrue($GLOBALS['hook_config_import']);
-
     // Verify that config_test API hooks were invoked for the dynamic default
     // configuration entity.
     $this->assertFalse(isset($GLOBALS['hook_config_test']['load']));
