diff --git a/features.services.yml b/features.services.yml
index a4711b5..6a0fba7 100644
--- a/features.services.yml
+++ b/features.services.yml
@@ -30,3 +30,10 @@ services:
   features.extension_optional_storage:
     class: Drupal\features\FeaturesInstallStorage
     arguments: ['@config.storage', 'config/optional']
+
+  features.config.installer:
+    class: Drupal\features\FeaturesConfigInstaller
+    public: false
+    decorates: config.installer
+    decoration_priority: 5
+    arguments: ['@features.manager', '@config.factory', '@config.storage', '@config.typed', '@config.manager', '@event_dispatcher']
diff --git a/src/FeaturesConfigInstaller.php b/src/FeaturesConfigInstaller.php
index 928fa1a..9e0ea17 100644
--- a/src/FeaturesConfigInstaller.php
+++ b/src/FeaturesConfigInstaller.php
@@ -3,17 +3,49 @@
 namespace Drupal\features;
 
 use Drupal\Core\Config\ConfigInstaller;
+use Drupal\Core\Config\ConfigFactoryInterface;
 use Drupal\Core\Config\StorageInterface;
+use Drupal\Core\Config\TypedConfigManagerInterface;
+use Drupal\Core\Config\ConfigManagerInterface;
+use Symfony\Component\EventDispatcher\EventDispatcherInterface;
 
 /**
  * Class for customizing the test for pre existing configuration.
  *
- * Copy of ConfigInstaller with findPreExistingConfiguration() modified to
- * allow Feature modules to be installed.
+ * Decorates the ConfigInstaller with findPreExistingConfiguration() modified
+ * to allow Feature modules to be installed.
  */
 class FeaturesConfigInstaller extends ConfigInstaller {
 
   /**
+   * The features manager.
+   *
+   * @var \Drupal\features\FeaturesManagerInterface
+   */
+  protected $featuresManager;
+
+  /**
+   * Constructs the configuration installer.
+   *
+   * @param \Drupal\features\FeaturesManagerInterface $features_manager
+   *    The features manager.
+   * @param \Drupal\Core\Config\ConfigFactoryInterface $config_factory
+   *   The configuration factory.
+   * @param \Drupal\Core\Config\StorageInterface $active_storage
+   *   The active configuration storage.
+   * @param \Drupal\Core\Config\TypedConfigManagerInterface $typed_config
+   *   The typed configuration manager.
+   * @param \Drupal\Core\Config\ConfigManagerInterface $config_manager
+   *   The configuration manager.
+   * @param \Symfony\Component\EventDispatcher\EventDispatcherInterface $event_dispatcher
+   *   The event dispatcher.
+   */
+  public function __construct(FeaturesManagerInterface $features_manager, ConfigFactoryInterface $config_factory, StorageInterface $active_storage, TypedConfigManagerInterface $typed_config, ConfigManagerInterface $config_manager, EventDispatcherInterface $event_dispatcher) {
+    parent::__construct($config_factory, $active_storage, $typed_config, $config_manager, $event_dispatcher);
+    $this->featuresManager = $features_manager;
+  }
+
+  /**
    * {@inheritdoc}
    */
   protected function findPreExistingConfiguration(StorageInterface $storage) {
@@ -22,7 +54,7 @@ class FeaturesConfigInstaller extends ConfigInstaller {
     // Drupal\Core\Config\ConfigInstaller::findPreExistingConfiguration().
     // Allow config that already exists coming from Features.
     /** @var \Drupal\features\FeaturesManagerInterface $manager */
-    $manager = \Drupal::service('features.manager');
+    $manager = $this->featuresManager;
     $features_config = array_keys($manager->listExistingConfig());
     // Map array so we can use isset instead of in_array for faster access.
     $features_config = array_combine($features_config, $features_config);
diff --git a/src/FeaturesServiceProvider.php b/src/FeaturesServiceProvider.php
deleted file mode 100644
index 777afb0..0000000
--- a/src/FeaturesServiceProvider.php
+++ /dev/null
@@ -1,24 +0,0 @@
-<?php
-
-namespace Drupal\features;
-
-use Drupal\Core\DependencyInjection\ContainerBuilder;
-use Drupal\Core\DependencyInjection\ServiceProviderBase;
-
-/**
- * Service provider implementation for Features to override config.installer.
- *
- * @ingroup container
- */
-class FeaturesServiceProvider extends ServiceProviderBase {
-
-  /**
-   * {@inheritdoc}
-   */
-  public function alter(ContainerBuilder $container) {
-    // Override the config.installer class with a new class.
-    $definition = $container->getDefinition('config.installer');
-    $definition->setClass('Drupal\features\FeaturesConfigInstaller');
-  }
-
-}
diff --git a/src/ProxyClass/FeaturesConfigInstaller.php b/src/ProxyClass/FeaturesConfigInstaller.php
deleted file mode 100644
index 4e8673f..0000000
--- a/src/ProxyClass/FeaturesConfigInstaller.php
+++ /dev/null
@@ -1,136 +0,0 @@
-<?php
-
-/**
- * This file was generated via php core/scripts/generate-proxy-class.php 'Drupal\features\FeaturesConfigInstaller' "modules/contrib/features/src".
- */
-
-namespace Drupal\features\ProxyClass {
-
-    /**
-     * Provides a proxy class for \Drupal\features\FeaturesConfigInstaller.
-     *
-     * @see \Drupal\Component\ProxyBuilder
-     */
-    class FeaturesConfigInstaller implements \Drupal\Core\Config\ConfigInstallerInterface
-    {
-
-        use \Drupal\Core\DependencyInjection\DependencySerializationTrait;
-
-        /**
-         * The id of the original proxied service.
-         *
-         * @var string
-         */
-        protected $drupalProxyOriginalServiceId;
-
-        /**
-         * The real proxied service, after it was lazy loaded.
-         *
-         * @var \Drupal\features\FeaturesConfigInstaller
-         */
-        protected $service;
-
-        /**
-         * The service container.
-         *
-         * @var \Symfony\Component\DependencyInjection\ContainerInterface
-         */
-        protected $container;
-
-        /**
-         * Constructs a ProxyClass Drupal proxy object.
-         *
-         * @param \Symfony\Component\DependencyInjection\ContainerInterface $container
-         *   The container.
-         * @param string $drupal_proxy_original_service_id
-         *   The service ID of the original service.
-         */
-        public function __construct(\Symfony\Component\DependencyInjection\ContainerInterface $container, $drupal_proxy_original_service_id)
-        {
-            $this->container = $container;
-            $this->drupalProxyOriginalServiceId = $drupal_proxy_original_service_id;
-        }
-
-        /**
-         * Lazy loads the real service from the container.
-         *
-         * @return object
-         *   Returns the constructed real service.
-         */
-        protected function lazyLoadItself()
-        {
-            if (!isset($this->service)) {
-                $this->service = $this->container->get($this->drupalProxyOriginalServiceId);
-            }
-
-            return $this->service;
-        }
-
-        /**
-         * {@inheritdoc}
-         */
-        public function installDefaultConfig($type, $name)
-        {
-            return $this->lazyLoadItself()->installDefaultConfig($type, $name);
-        }
-
-        /**
-         * {@inheritdoc}
-         */
-        public function installOptionalConfig(\Drupal\Core\Config\StorageInterface $storage = NULL, $dependency = array (
-        ))
-        {
-            return $this->lazyLoadItself()->installOptionalConfig($storage, $dependency);
-        }
-
-        /**
-         * {@inheritdoc}
-         */
-        public function installCollectionDefaultConfig($collection)
-        {
-            return $this->lazyLoadItself()->installCollectionDefaultConfig($collection);
-        }
-
-        /**
-         * {@inheritdoc}
-         */
-        public function setSourceStorage(\Drupal\Core\Config\StorageInterface $storage)
-        {
-            return $this->lazyLoadItself()->setSourceStorage($storage);
-        }
-
-        /**
-         * {@inheritdoc}
-         */
-        public function getSourceStorage()
-        {
-            return $this->lazyLoadItself()->getSourceStorage();
-        }
-
-        /**
-         * {@inheritdoc}
-         */
-        public function setSyncing($status)
-        {
-            return $this->lazyLoadItself()->setSyncing($status);
-        }
-
-        /**
-         * {@inheritdoc}
-         */
-        public function isSyncing()
-        {
-            return $this->lazyLoadItself()->isSyncing();
-        }
-
-        /**
-         * {@inheritdoc}
-         */
-        public function checkConfigurationToInstall($type, $name)
-        {
-            return $this->lazyLoadItself()->checkConfigurationToInstall($type, $name);
-        }
-
-    }
-
-}
