diff --git a/core/modules/views/src/EventSubscriber/RouteSubscriber.php b/core/modules/views/src/EventSubscriber/RouteSubscriber.php
index abc5bb6..db07140 100644
--- a/core/modules/views/src/EventSubscriber/RouteSubscriber.php
+++ b/core/modules/views/src/EventSubscriber/RouteSubscriber.php
@@ -101,9 +101,8 @@ protected function getViewsDisplayIDsWithRoute() {
       // @todo Convert this method to some service.
       $views = $this->getApplicableViews();
       foreach ($views as $data) {
-        list($view, $display_id) = $data;
-        $id = $view->storage->id();
-        $this->viewsDisplayPairs[] = $id . '.' . $display_id;
+        list($view_id, $display_id) = $data;
+        $this->viewsDisplayPairs[] = $view_id . '.' . $display_id;
       }
       $this->viewsDisplayPairs = array_combine($this->viewsDisplayPairs, $this->viewsDisplayPairs);
     }
diff --git a/core/modules/views/src/Plugin/Derivative/ViewsLocalTask.php b/core/modules/views/src/Plugin/Derivative/ViewsLocalTask.php
index 434a503..343dc76 100644
--- a/core/modules/views/src/Plugin/Derivative/ViewsLocalTask.php
+++ b/core/modules/views/src/Plugin/Derivative/ViewsLocalTask.php
@@ -7,10 +7,12 @@
 
 namespace Drupal\views\Plugin\Derivative;
 
+use Drupal\Core\Entity\EntityStorageInterface;
 use Drupal\Core\State\StateInterface;
 use Drupal\Component\Plugin\Derivative\DeriverBase;
 use Drupal\Core\Plugin\Discovery\ContainerDeriverInterface;
 use Drupal\Core\Routing\RouteProviderInterface;
+use Drupal\views\ViewEntityInterface;
 use Drupal\views\Views;
 use Symfony\Component\DependencyInjection\ContainerInterface;
 
@@ -34,16 +36,26 @@ class ViewsLocalTask extends DeriverBase implements ContainerDeriverInterface {
   protected $state;
 
   /**
+   * The view storage.
+   *
+   * @var \Drupal\Core\Entity\EntityStorageInterface
+   */
+  protected $viewStorage;
+
+  /**
    * Constructs a \Drupal\views\Plugin\Derivative\ViewsLocalTask instance.
    *
    * @param \Drupal\Core\Routing\RouteProviderInterface $route_provider
    *   The route provider.
    * @param \Drupal\Core\State\StateInterface $state
    *   The state key value store.
+   * @param \Drupal\Core\Entity\EntityStorageInterface $view_storage
+   *   The view storage.
    */
-  public function __construct(RouteProviderInterface $route_provider, StateInterface $state) {
+  public function __construct(RouteProviderInterface $route_provider, StateInterface $state, EntityStorageInterface $view_storage) {
     $this->routeProvider = $route_provider;
     $this->state = $state;
+    $this->viewStorage = $view_storage;
   }
 
   /**
@@ -52,7 +64,8 @@ public function __construct(RouteProviderInterface $route_provider, StateInterfa
   public static function create(ContainerInterface $container, $base_plugin_id) {
     return new static(
       $container->get('router.route_provider'),
-      $container->get('state')
+      $container->get('state'),
+      $container->get('entity.manager')->getStorage('view')
     );
   }
 
@@ -65,7 +78,8 @@ public function getDerivativeDefinitions($base_plugin_definition) {
     $view_route_names = $this->state->get('views.view_route_names');
     foreach ($this->getApplicableMenuViews() as $pair) {
       /** @var $executable \Drupal\views\ViewExecutable */
-      list($executable, $display_id) = $pair;
+      list($view_id, $display_id) = $pair;
+      $executable = $this->viewStorage->load($view_id)->getExecutable();
 
       $executable->setDisplay($display_id);
       $menu = $executable->display_handler->getOption('menu');
@@ -101,8 +115,9 @@ public function alterLocalTasks(&$local_tasks) {
     $view_route_names = $this->state->get('views.view_route_names');
 
     foreach ($this->getApplicableMenuViews() as $pair) {
+      list($view_id, $display_id) = $pair;
       /** @var $executable \Drupal\views\ViewExecutable */
-      list($executable, $display_id) = $pair;
+      $executable = $this->viewStorage->load($view_id)->getExecutable();
 
       $executable->setDisplay($display_id);
       $menu = $executable->display_handler->getOption('menu');
diff --git a/core/modules/views/src/Plugin/Derivative/ViewsMenuLink.php b/core/modules/views/src/Plugin/Derivative/ViewsMenuLink.php
index 06b1725..d7d7b61 100644
--- a/core/modules/views/src/Plugin/Derivative/ViewsMenuLink.php
+++ b/core/modules/views/src/Plugin/Derivative/ViewsMenuLink.php
@@ -8,14 +8,47 @@
 namespace Drupal\views\Plugin\Derivative;
 
 use Drupal\Component\Plugin\Derivative\DeriverBase;
+use Drupal\Core\Plugin\Discovery\ContainerDeriverInterface;
 use Drupal\views\Views;
+use Drupal\Core\Entity\EntityStorageInterface;
+use Symfony\Component\DependencyInjection\ContainerInterface;
 
 /**
  * Provides menu links for Views.
  *
  * @see \Drupal\views\Plugin\Menu\ViewsMenuLink
  */
-class ViewsMenuLink extends DeriverBase {
+class ViewsMenuLink extends DeriverBase implements ContainerDeriverInterface {
+
+  /**
+   * The view storage.
+   *
+   * @var \Drupal\Core\Entity\EntityStorageInterface
+   */
+  protected $viewStorage;
+
+  /**
+   * Constructs a \Drupal\views\Plugin\Derivative\ViewsLocalTask instance.
+   *
+   * @param \Drupal\Core\Routing\RouteProviderInterface $route_provider
+   *   The route provider.
+   * @param \Drupal\Core\State\StateInterface $state
+   *   The state key value store.
+   * @param \Drupal\Core\Entity\EntityStorageInterface $view_storage
+   *   The view storage.
+   */
+  public function __construct(EntityStorageInterface $view_storage) {
+    $this->viewStorage = $view_storage;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function create(ContainerInterface $container, $base_plugin_id) {
+    return new static(
+      $container->get('entity.manager')->getStorage('view')
+    );
+  }
 
   /**
    * {@inheritdoc}
@@ -23,10 +56,13 @@ class ViewsMenuLink extends DeriverBase {
   public function getDerivativeDefinitions($base_plugin_definition) {
     $links = array();
     $views = Views::getApplicableViews('uses_menu_links');
+
     foreach ($views as $data) {
-      /** @var \Drupal\views\ViewExecutable $view */
-      list($view, $display_id) = $data;
-      if ($result = $view->getMenuLinks($display_id)) {
+      list($view_id, $display_id) = $data;
+      /** @var \Drupal\views\ViewExecutable $executable */
+      $executable = $this->viewStorage->load($view_id)->getExecutable();
+
+      if ($result = $executable->getMenuLinks($display_id)) {
         foreach ($result as $link_id => $link) {
           $links[$link_id] = $link + $base_plugin_definition;
         }
diff --git a/core/modules/views/src/Plugin/EntityReferenceSelection/ViewsSelection.php b/core/modules/views/src/Plugin/EntityReferenceSelection/ViewsSelection.php
index bcff63b..484eb1e 100644
--- a/core/modules/views/src/Plugin/EntityReferenceSelection/ViewsSelection.php
+++ b/core/modules/views/src/Plugin/EntityReferenceSelection/ViewsSelection.php
@@ -107,12 +107,15 @@ public function buildConfigurationForm(array $form, FormStateInterface $form_sta
     // Filter views that list the entity type we want, and group the separate
     // displays by view.
     $entity_type = $this->entityManager->getDefinition($this->configuration['target_type']);
+    $view_storage = $this->entityManager->getStorage('view');
+
     $options = array();
     foreach ($displays as $data) {
-      list($view, $display_id) = $data;
-      if (in_array($view->storage->get('base_table'), [$entity_type->getBaseTable(), $entity_type->getDataTable()])) {
-        $name = $view->storage->get('id');
-        $display = $view->storage->get('display');
+      list($view_id, $display_id) = $data;
+      $view = $view_storage->load($view_id);
+      if (in_array($view->get('base_table'), [$entity_type->getBaseTable(), $entity_type->getDataTable()])) {
+        $name = $view->get('id');
+        $display = $view->get('display');
         $options[$name . ':' . $display_id] = $name . ' - ' . $display[$display_id]['display_title'];
       }
     }
diff --git a/core/modules/views/src/Views.php b/core/modules/views/src/Views.php
index 747f2f8..616034b 100644
--- a/core/modules/views/src/Views.php
+++ b/core/modules/views/src/Views.php
@@ -212,26 +212,29 @@ public static function getEnabledDisplayExtenders() {
   public static function getApplicableViews($type) {
     // Get all display plugins which provides the type.
     $display_plugins = static::pluginManager('display')->getDefinitions();
-    $ids = array();
+
+    $plugin_ids = [];
     foreach ($display_plugins as $id => $definition) {
       if (!empty($definition[$type])) {
-        $ids[$id] = $id;
+        $plugin_ids[$id] = $id;
       }
     }
 
     $entity_ids = \Drupal::service('entity.query')->get('view')
       ->condition('status', TRUE)
-      ->condition("display.*.display_plugin", $ids, 'IN')
+      ->condition("display.*.display_plugin", $plugin_ids, 'IN')
       ->execute();
 
     $result = array();
     foreach (\Drupal::entityManager()->getStorage('view')->loadMultiple($entity_ids) as $view) {
       // Check each display to see if it meets the criteria and is enabled.
-      $executable = $view->getExecutable();
-      $executable->initDisplay();
-      foreach ($executable->displayHandlers as $id => $handler) {
-        if (!empty($handler->definition[$type]) && $handler->isEnabled()) {
-          $result[] = array($executable, $id);
+
+      foreach ($view->get('display') as $id => $display) {
+        // If the key doesn't exist, enabled is assumed.
+        $enabled = !array_key_exists('enabled', $display['display_options']) || !empty($display['display_options']);
+
+        if (in_array($display['display_plugin'], $plugin_ids) && $enabled) {
+          $result[] = [$view->id(), $id];
         }
       }
     }
