diff --git a/core/core.services.yml b/core/core.services.yml
index 53a2725..a33d0f2 100644
--- a/core/core.services.yml
+++ b/core/core.services.yml
@@ -1281,18 +1281,17 @@ services:
     class: Drupal\Core\Asset\AssetDumper
   library.discovery:
     class: Drupal\Core\Asset\LibraryDiscovery
-    arguments: ['@library.discovery.collector', '@module_handler']
-  library.discovery.collector:
-    class: Drupal\Core\Asset\LibraryDiscoveryCollector
-    arguments: ['@cache.discovery', '@lock', '@library.discovery.parser']
-    tags:
-      - { name: needs_destruction }
+    arguments: ['@module_handler']
   library.discovery.parser:
     class: Drupal\Core\Asset\LibraryDiscoveryParser
     arguments: ['@app.root', '@module_handler']
   library.dependency_resolver:
     class: Drupal\Core\Asset\LibraryDependencyResolver
     arguments: ['@library.discovery']
+  library.event_subscriber:
+    class: Drupal\Core\Asset\LibraryEventSubscriber
+    tags:
+      - { name: 'event_subscriber' }
   asset.resolver:
     class: Drupal\Core\Asset\AssetResolver
     arguments: ['@library.discovery', '@library.dependency_resolver', '@module_handler', '@theme.manager']
diff --git a/core/lib/Drupal/Core/Asset/AssetStorage.php b/core/lib/Drupal/Core/Asset/AssetStorage.php
new file mode 100644
index 0000000..f8ba180
--- /dev/null
+++ b/core/lib/Drupal/Core/Asset/AssetStorage.php
@@ -0,0 +1,110 @@
+<?php
+/**
+ * @file
+ * Contains \Drupal\Core\Asset\AssetStorageInterface.
+ */
+
+namespace Drupal\Core\Asset;
+
+use Drupal\Core\PhpStorage\PhpStorageFactory;
+use Drupal\Core\Asset\LibraryDiscoveryParser;
+use Drupal\Core\Asset\Exception\LibraryDefinitionInvalidCachedData;
+
+/**
+ * @todo
+ */
+
+class AssetStorage {
+  protected $discovery = NULL;
+  protected $storage = NULL;
+
+  /** @var array already instantiated classes stored here */
+  protected $classes = [];
+
+  public function load($ext) {
+    $className = "__Libraries_$ext";
+    if (isset($this->classes[$className])) {
+      return $this->classes[$className]->data;
+    }
+
+    if (!class_exists($className)) {
+      $loadingResult = $this->storage()->load('main');
+      if (!$loadingResult) {
+        $this->rebuildDumpedAssetLibrariesInfo();
+        $loadingResult = $this->storage()->load('main');
+      }
+    }
+
+    if (!class_exists($className)) {
+      throw new LibraryDefinitionInvalidCachedData(sprintf("Missing expected definition for class '%s' in the libraries PHP cache file.", $className));
+    }
+    $this->classes[$className] = new $className;
+    return $this->classes[$className]->data;
+  }
+
+  public function clear() {
+// @todo: test
+    $this->storage()->deleteAll();
+  }
+
+  public function rebuildDumpedAssetLibrariesInfo() {
+    $extensions = ['core'];
+
+    /* @var $moduleHandler \Drupal\Core\Extension\ModuleHandlerInterface */
+    // $moduleHandler = \Drupal::service('module_handler');
+    foreach (\Drupal::service('module_handler')->getModuleList() as $name => $extension) {
+      $extensions[] = $extension->getName();
+    }
+
+    foreach (\Drupal::service('theme_handler')->listInfo() as $name => $extension) {
+      $extensions[] = $extension->getName();
+    }
+
+    $classDefinitions = [];
+    foreach ($extensions as $extension) {
+      $libraries = $this->discovery()->buildByExtension($extension);
+      $classDefinitions[] = $this->generateClassDefinition($extension, $libraries);
+    }
+    $cachingContent = sprintf("<?php\n\n// Generated by %s on %s\n%s",
+      __METHOD__,
+      format_date(time()),
+      implode("\n", $classDefinitions));
+
+    $this->storage()->save('main', $cachingContent);
+  }
+
+  /**
+   * Generate caching class definition.
+   *
+   * @param string $extension
+   * @param string $libraries
+   * @return string
+   *   Generated class definition.
+   */
+  protected function generateClassDefinition($extension, $libraries) {
+    return "\nclass __Libraries_$extension {\n  public \$data = " . var_export($libraries, 1) . ";\n}\n";
+  }
+
+  /**
+   * Gets the PHP code storage object to use for the library caching files.
+   *
+   * @return \Drupal\Component\PhpStorage\PhpStorageInterface
+   */
+  protected function storage() {
+    if (!isset($this->storage)) {
+      $this->storage = PhpStorageFactory::get('libraries');
+    }
+    return $this->storage;
+  }
+
+  /**
+   * Gets the discovery object.
+   *
+   * @return \Drupal\Core\Asset\LibraryDiscoveryParser
+   */
+  protected function discovery() {
+    return \Drupal::service('library.discovery.parser');
+  }
+
+}
+
diff --git a/core/lib/Drupal/Core/Asset/Exception/LibraryDefinitionInvalidCachedData.php b/core/lib/Drupal/Core/Asset/Exception/LibraryDefinitionInvalidCachedData.php
new file mode 100644
index 0000000..bde7336
--- /dev/null
+++ b/core/lib/Drupal/Core/Asset/Exception/LibraryDefinitionInvalidCachedData.php
@@ -0,0 +1,15 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\Core\Asset\Exception\LibraryDefinitionMissingLicenseException.
+ */
+
+namespace Drupal\Core\Asset\Exception;
+
+/**
+ * Defines a custom exception if a library cached info by AssetStorage is missing or invalid.
+ */
+class LibraryDefinitionInvalidCachedData extends \RuntimeException {
+
+}
diff --git a/core/lib/Drupal/Core/Asset/LibraryDiscovery.php b/core/lib/Drupal/Core/Asset/LibraryDiscovery.php
index c79674a..431e558 100644
--- a/core/lib/Drupal/Core/Asset/LibraryDiscovery.php
+++ b/core/lib/Drupal/Core/Asset/LibraryDiscovery.php
@@ -7,8 +7,8 @@
 
 namespace Drupal\Core\Asset;
 
-use Drupal\Core\Cache\CacheCollectorInterface;
 use Drupal\Core\Extension\ModuleHandlerInterface;
+use Drupal\Core\Asset\AssetStorage;
 
 /**
  * Discovers available asset libraries in Drupal.
@@ -16,11 +16,11 @@
 class LibraryDiscovery implements LibraryDiscoveryInterface {
 
   /**
-   * The library discovery cache collector.
+   * The library discovery files cache.
    *
-   * @var \Drupal\Core\Cache\CacheCollectorInterface
+   * @var \Drupal\Core\Asset\AssetStorage
    */
-  protected $collector;
+  protected $storage;
 
   /**
    * The module handler.
@@ -42,13 +42,11 @@ class LibraryDiscovery implements LibraryDiscoveryInterface {
   /**
    * Constructs a new LibraryDiscovery instance.
    *
-   * @param \Drupal\Core\Cache\CacheCollectorInterface $library_discovery_collector
-   *   The library discovery cache collector.
    * @param \Drupal\Core\Extension\ModuleHandlerInterface $module_handler
    *   The module handler.
    */
-  public function __construct(CacheCollectorInterface $library_discovery_collector, ModuleHandlerInterface $module_handler) {
-    $this->collector = $library_discovery_collector;
+  public function __construct(ModuleHandlerInterface $module_handler) {
+    $this->storage = new AssetStorage();
     $this->moduleHandler = $module_handler;
   }
 
@@ -57,7 +55,7 @@ public function __construct(CacheCollectorInterface $library_discovery_collector
    */
   public function getLibrariesByExtension($extension) {
     if (!isset($this->libraryDefinitions[$extension])) {
-      $libraries = $this->collector->get($extension);
+      $libraries = $this->storage->load($extension);
       $this->libraryDefinitions[$extension] = [];
       foreach ($libraries as $name => $definition) {
         // Allow modules and themes to dynamically attach request and context
@@ -83,7 +81,7 @@ public function getLibraryByName($extension, $name) {
    * {@inheritdoc}
    */
   public function clearCachedDefinitions() {
-    $this->collector->clear();
+    $this->storage->clear();
   }
 
 }
diff --git a/core/lib/Drupal/Core/Asset/LibraryDiscoveryCollector.php b/core/lib/Drupal/Core/Asset/LibraryDiscoveryCollector.php
deleted file mode 100644
index dfac4fa..0000000
--- a/core/lib/Drupal/Core/Asset/LibraryDiscoveryCollector.php
+++ /dev/null
@@ -1,75 +0,0 @@
-<?php
-
-/**
- * @file
- * Contains \Drupal\Core\Asset\LibraryDiscoveryCollector.
- */
-
-namespace Drupal\Core\Asset;
-
-use Drupal\Core\Cache\CacheCollector;
-use Drupal\Core\Cache\CacheBackendInterface;
-use Drupal\Core\Lock\LockBackendInterface;
-
-/**
- * A CacheCollector implementation for building library extension info.
- */
-class LibraryDiscoveryCollector extends CacheCollector {
-
-  /**
-   * The cache key.
-   *
-   * @var string
-   */
-  protected $cacheKey = 'library_info';
-
-  /**
-   * The cache backend.
-   *
-   * @var \Drupal\Core\Cache\CacheBackendInterface
-   */
-  protected $cache;
-
-  /**
-   * The lock backend.
-   *
-   * @var \Drupal\Core\Lock\LockBackendInterface
-   */
-  protected $lock;
-
-  /**
-   * The library discovery parser.
-   *
-   * @var \Drupal\Core\Asset\LibraryDiscoveryParser
-   */
-  protected $discoveryParser;
-
-  /**
-   * Constructs a CacheCollector object.
-   *
-   * @param string $cid
-   *   The cid for the array being cached.
-   * @param \Drupal\Core\Cache\CacheBackendInterface $cache
-   *   The cache backend.
-   * @param \Drupal\Core\Lock\LockBackendInterface $lock
-   *   The lock backend.
-   * @param \Drupal\Core\Asset\LibraryDiscoveryParser $discovery_parser
-   *   The library discovery parser.
-   */
-  public function __construct(CacheBackendInterface $cache, LockBackendInterface $lock, LibraryDiscoveryParser $discovery_parser) {
-    parent::__construct($this->cacheKey, $cache, $lock, array($this->cacheKey));
-
-    $this->discoveryParser = $discovery_parser;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  protected function resolveCacheMiss($key) {
-    $this->storage[$key] = $this->discoveryParser->buildByExtension($key);
-    $this->persist($key);
-
-    return $this->storage[$key];
-  }
-
-}
diff --git a/core/lib/Drupal/Core/Asset/LibraryDiscoveryParser.php b/core/lib/Drupal/Core/Asset/LibraryDiscoveryParser.php
index 4746b1e..1331350 100644
--- a/core/lib/Drupal/Core/Asset/LibraryDiscoveryParser.php
+++ b/core/lib/Drupal/Core/Asset/LibraryDiscoveryParser.php
@@ -62,8 +62,6 @@ public function __construct($root, ModuleHandlerInterface $module_handler) {
    *   Thrown when a js file defines a positive weight.
    */
   public function buildByExtension($extension) {
-    $libraries = array();
-
     if ($extension === 'core') {
       $path = 'core';
       $extension_type = 'core';
diff --git a/core/lib/Drupal/Core/Asset/LibraryEventSubscriber.php b/core/lib/Drupal/Core/Asset/LibraryEventSubscriber.php
new file mode 100644
index 0000000..d4451d9
--- /dev/null
+++ b/core/lib/Drupal/Core/Asset/LibraryEventSubscriber.php
@@ -0,0 +1,38 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\Core\Asset\LibraryEventSubscriber.
+ */
+
+namespace Drupal\Core\Asset;
+
+use Drupal\Core\Config\ConfigEvents;
+use Drupal\Core\Config\ConfigCrudEvent;
+use Drupal\Core\Asset\AssetStorage;
+use Symfony\Component\EventDispatcher\EventSubscriberInterface;
+
+class LibraryEventSubscriber implements EventSubscriberInterface {
+
+  public function onExtensionListChange(ConfigCrudEvent $event) {
+    $config = $event->getConfig();
+
+    if ($config->getName() == 'core.extension') {
+      /* @var $assetStorage \Drupal\Core\Asset\AssetStorage */
+      $this->assetStorage = new AssetStorage;
+      $assetStorage->rebuildDumpedAssetLibrariesInfo();
+    }
+  }
+
+  /**
+   * Registers the methods in this class that should be listeners.
+   *
+   * @return array
+   *   An array of event listener definitions.
+   */
+  static function getSubscribedEvents() {
+    $events[ConfigEvents::SAVE][] = ['onExtensionListChange'];
+    return $events;
+  }
+
+}
\ No newline at end of file
diff --git a/core/modules/color/color.module b/core/modules/color/color.module
index 65c60d7..eb9cb6b 100644
--- a/core/modules/color/color.module
+++ b/core/modules/color/color.module
@@ -489,7 +489,9 @@ function color_scheme_form_submit($form, FormStateInterface $form_state) {
     ->save();
 
   // Clear the library cache.
-  Cache::invalidateTags(['library_info']);
+  // @todo: probably AssetStorage should become service
+  $libraryCache = new \Drupal\Core\Asset\AssetStorage();
+  $libraryCache->clear();
 }
 
 /**
