diff --git a/core/lib/Drupal/Core/Plugin/DefaultPluginManager.php b/core/lib/Drupal/Core/Plugin/DefaultPluginManager.php
index 6377ee6..8a1cce3 100644
--- a/core/lib/Drupal/Core/Plugin/DefaultPluginManager.php
+++ b/core/lib/Drupal/Core/Plugin/DefaultPluginManager.php
@@ -8,7 +8,7 @@
 namespace Drupal\Core\Plugin;
 
 use Drupal\Component\Plugin\Discovery\CachedDiscoveryInterface;
-use Drupal\Component\Plugin\Discovery\DerivativeDiscoveryDecorator;
+use Drupal\Core\Plugin\Discovery\DerivativeDiscoveryDecorator;
 use Drupal\Component\Plugin\PluginManagerBase;
 use Drupal\Component\Plugin\PluginManagerInterface;
 use Drupal\Component\Utility\NestedArray;
diff --git a/core/lib/Drupal/Core/Plugin/Discovery/DerivativeDiscoveryDecorator.php b/core/lib/Drupal/Core/Plugin/Discovery/DerivativeDiscoveryDecorator.php
new file mode 100644
index 0000000..5483c6e
--- /dev/null
+++ b/core/lib/Drupal/Core/Plugin/Discovery/DerivativeDiscoveryDecorator.php
@@ -0,0 +1,34 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\Core\Plugin\Discovery\DerivativeDiscoveryDecorator.
+ */
+
+namespace Drupal\Core\Plugin\Discovery;
+
+use Drupal\Component\Plugin\Discovery\DerivativeDiscoveryDecorator as ComponentDerivativeDiscoveryDecorator;
+
+class DerivativeDiscoveryDecorator extends ComponentDerivativeDiscoveryDecorator {
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function getDerivativeFetcher($base_plugin_id, array $base_definition) {
+    if (!isset($this->derivativeFetchers[$base_plugin_id])) {
+      $this->derivativeFetchers[$base_plugin_id] = FALSE;
+      if (isset($base_definition['derivative'])) {
+        $derivative = $base_definition['derivative'];
+        if (class_exists($derivative)) {
+          $this->derivativeFetchers[$base_plugin_id] = new $derivative($base_plugin_id);
+        }
+        // Assume a service name has been provided.
+        else {
+          $this->derivativeFetchers[$base_plugin_id] = \Drupal::service($derivative);
+        }
+      }
+    }
+    return $this->derivativeFetchers[$base_plugin_id] ?: NULL;
+  }
+
+}
diff --git a/core/modules/views/lib/Drupal/views/Plugin/Block/ViewsBlock.php b/core/modules/views/lib/Drupal/views/Plugin/Block/ViewsBlock.php
index 270ed26..fc86d2b 100644
--- a/core/modules/views/lib/Drupal/views/Plugin/Block/ViewsBlock.php
+++ b/core/modules/views/lib/Drupal/views/Plugin/Block/ViewsBlock.php
@@ -20,7 +20,7 @@
  *   id = "views_block",
  *   admin_label = @Translation("Views Block"),
  *   module = "views",
- *   derivative = "Drupal\views\Plugin\Derivative\ViewsBlock"
+ *   derivative = "plugin.derivative.views.block"
  * )
  */
 class ViewsBlock extends BlockBase {
diff --git a/core/modules/views/lib/Drupal/views/Plugin/Derivative/ViewsBlock.php b/core/modules/views/lib/Drupal/views/Plugin/Derivative/ViewsBlock.php
index 1d243d5..be0d196 100644
--- a/core/modules/views/lib/Drupal/views/Plugin/Derivative/ViewsBlock.php
+++ b/core/modules/views/lib/Drupal/views/Plugin/Derivative/ViewsBlock.php
@@ -7,6 +7,7 @@
 
 namespace Drupal\views\Plugin\Derivative;
 
+use Drupal\Core\Entity\EntityManager;
 use Drupal\Component\Plugin\Derivative\DerivativeInterface;
 
 /**
@@ -24,6 +25,25 @@ class ViewsBlock implements DerivativeInterface {
   protected $derivatives = array();
 
   /**
+   * The view storage controller.
+   *
+   * @var \Drupal\Core\Entity\EntityStorageControllerInterface
+   */
+  protected $viewStorageController;
+
+  /**
+   * Constructs a ViewsBlock object.
+   *
+   * @param string $base_plugin_id
+   *   The base plugin ID.
+   * @param \Drupal\Core\Entity\EntityStorageControllerInterface $view_storage_controller
+   *   The entity storage controller to load views.
+   */
+  public function __construct(EntityManager $entity_manager) {
+    $this->viewStorageController = $entity_manager->getStorageController('view');
+  }
+
+  /**
    * Implements \Drupal\Component\Plugin\Derivative\DerivativeInterface::getDerivativeDefinition().
    */
   public function getDerivativeDefinition($derivative_id, array $base_plugin_definition) {
@@ -39,7 +59,7 @@ public function getDerivativeDefinition($derivative_id, array $base_plugin_defin
    */
   public function getDerivativeDefinitions(array $base_plugin_definition) {
     // Check all Views for block displays.
-    foreach (views_get_all_views() as $view) {
+    foreach ($this->viewStorageController->load() as $view) {
       // Do not return results for disabled views.
       if (!$view->status()) {
         continue;
diff --git a/core/modules/views/views.services.yml b/core/modules/views/views.services.yml
index d5ab9d9..23695ee 100644
--- a/core/modules/views/views.services.yml
+++ b/core/modules/views/views.services.yml
@@ -56,6 +56,9 @@ services:
   plugin.manager.views.wizard:
     class: Drupal\views\Plugin\ViewsPluginManager
     arguments: [wizard, '@container.namespaces']
+  plugin.derivative.views.block:
+    class: Drupal\views\Plugin\Derivative\ViewsBlock
+    arguments: ['@plugin.manager.entity']
   views.views_data:
     class: Drupal\views\ViewsData
     arguments: ['@cache.views_info', '@config.factory', '@module_handler', '@language_manager']
