diff --git a/core/modules/views/src/Entity/View.php b/core/modules/views/src/Entity/View.php
index c3690ed..f8addb2 100644
--- a/core/modules/views/src/Entity/View.php
+++ b/core/modules/views/src/Entity/View.php
@@ -11,8 +11,7 @@
 use Drupal\Core\Config\Entity\ConfigEntityBase;
 use Drupal\Core\Entity\EntityStorageInterface;
 use Drupal\views\Views;
-use Drupal\views_ui\ViewUI;
-use Drupal\views\ViewStorageInterface;
+use Drupal\views\ViewInterface;
 
 /**
  * Defines a View configuration entity class.
@@ -31,7 +30,7 @@
  *   }
  * )
  */
-class View extends ConfigEntityBase implements ViewStorageInterface {
+class View extends ConfigEntityBase implements ViewInterface {
 
   /**
    * The name of the base table this view will use.
@@ -72,7 +71,7 @@ class View extends ConfigEntityBase implements ViewStorageInterface {
   /**
    * The core version the view was created for.
    *
-   * @var int
+   * @var string
    */
   protected $core = \Drupal::CORE_COMPATIBILITY;
 
@@ -123,7 +122,7 @@ class View extends ConfigEntityBase implements ViewStorageInterface {
   }
 
   /**
-   * Overrides Drupal\Core\Config\Entity\ConfigEntityBase::createDuplicate().
+   * {@inheritdoc}
    */
   public function createDuplicate() {
     $duplicate = parent::createDuplicate();
@@ -132,9 +131,7 @@ class View extends ConfigEntityBase implements ViewStorageInterface {
   }
 
   /**
-   * Overrides \Drupal\Core\Entity\Entity::label().
-   *
-   * When a certain view doesn't have a label return the ID.
+   * {@inheritdoc}
    */
   public function label() {
     if (!$label = $this->get('label')) {
@@ -144,20 +141,7 @@ class View extends ConfigEntityBase implements ViewStorageInterface {
   }
 
   /**
-   * Adds a new display handler to the view, automatically creating an ID.
-   *
-   * @param string $plugin_id
-   *   (optional) The plugin type from the Views plugin annotation. Defaults to
-   *   'page'.
-   * @param string $title
-   *   (optional) The title of the display. Defaults to NULL.
-   * @param string $id
-   *   (optional) The ID to use, e.g., 'default', 'page_1', 'block_2'. Defaults
-   *   to NULL.
-   *
-   * @return string|false
-   *   The key to the display in $view->display, or FALSE if no plugin ID was
-   *   provided.
+   * {@inheritdoc}
    */
   public function addDisplay($plugin_id = 'page', $title = NULL, $id = NULL) {
     if (empty($plugin_id)) {
@@ -213,6 +197,8 @@ class View extends ConfigEntityBase implements ViewStorageInterface {
    *
    * @param string $plugin_id
    *   Which plugin should be used for the new display ID.
+   *
+   * @return string
    */
   protected function generateDisplayId($plugin_id) {
     // 'default' is singular and is unique, so just go with 'default'
@@ -236,6 +222,24 @@ class View extends ConfigEntityBase implements ViewStorageInterface {
   /**
    * {@inheritdoc}
    */
+  public function newDisplay($plugin_id = 'page', $title = NULL, $id = NULL) {
+    $id = $this->addDisplay($plugin_id, $title, $id);
+
+    // We can't use get() here as it will create an ViewExecutable instance if
+    // there is not already one.
+    if (isset($this->executable)) {
+      $executable = $this->get('executable');
+      $executable->initDisplay();
+      $executable->displayHandlers->addInstanceID($id);
+      return $executable->displayHandlers->get($id);
+    }
+
+    return $id;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
   public function &getDisplay($display_id) {
     return $this->display[$display_id];
   }
@@ -420,7 +424,7 @@ class View extends ConfigEntityBase implements ViewStorageInterface {
     parent::preDelete($storage, $entities);
 
     // Call the remove() hook on the individual displays.
-    /** @var \Drupal\views\ViewStorageInterface $entity */
+    /** @var \Drupal\views\ViewInterface $entity */
     foreach ($entities as $entity) {
       $executable = Views::executableFactory()->get($entity);
       foreach ($entity->get('display') as $display_id => $display) {
@@ -461,4 +465,46 @@ class View extends ConfigEntityBase implements ViewStorageInterface {
     $this->set('display', $displays);
   }
 
+  /**
+   * {@inheritdoc}
+   */
+  public function getBaseTableName() {
+    return $this->base_table;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getBaseFieldName() {
+    return $this->base_field;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getDescription() {
+    return $this->description;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getTags() {
+    return $this->tag;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getCoreVersion() {
+    return $this->core;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getModuleName() {
+    return $this->module;
+  }
+
 }
diff --git a/core/modules/views/src/ViewExecutable.php b/core/modules/views/src/ViewExecutable.php
index 0ca31da..69c5a22 100644
--- a/core/modules/views/src/ViewExecutable.php
+++ b/core/modules/views/src/ViewExecutable.php
@@ -12,7 +12,7 @@
 use Drupal\Core\Form\FormState;
 use Drupal\Core\Session\AccountInterface;
 use Drupal\views\Plugin\views\query\QueryPluginBase;
-use Drupal\views\ViewStorageInterface;
+use Drupal\views\ViewInterface;
 use Drupal\Component\Utility\Tags;
 use Symfony\Component\HttpFoundation\Request;
 use Symfony\Component\HttpFoundation\Response;
@@ -427,14 +427,14 @@ class ViewExecutable {
   /**
    * Constructs a new ViewExecutable object.
    *
-   * @param \Drupal\views\ViewStorageInterface $storage
+   * @param \Drupal\views\ViewInterface $storage
    *   The view config entity the actual information is stored on.
    * @param \Drupal\Core\Session\AccountInterface $user
    *   The current user.
    * @param \Drupal\views\ViewsData $views_data
    *   The views data.
    */
-  public function __construct(ViewStorageInterface $storage, AccountInterface $user, ViewsData $views_data) {
+  public function __construct(ViewInterface $storage, AccountInterface $user, ViewsData $views_data) {
     // Reference the storage and the executable to each other.
     $this->storage = $storage;
     $this->storage->set('executable', $this);
diff --git a/core/modules/views/src/ViewExecutableFactory.php b/core/modules/views/src/ViewExecutableFactory.php
index ed6bdd0..5843bd8 100644
--- a/core/modules/views/src/ViewExecutableFactory.php
+++ b/core/modules/views/src/ViewExecutableFactory.php
@@ -8,7 +8,7 @@
 namespace Drupal\views;
 
 use Drupal\Core\Session\AccountInterface;
-use Drupal\views\ViewStorageInterface;
+use Drupal\views\ViewInterface;
 use Symfony\Component\HttpFoundation\RequestStack;
 
 /**
@@ -56,13 +56,13 @@ class ViewExecutableFactory {
   /**
    * Instantiates a ViewExecutable class.
    *
-   * @param \Drupal\views\ViewStorageInterface $view
+   * @param \Drupal\views\ViewInterface $view
    *   A view entity instance.
    *
    * @return \Drupal\views\ViewExecutable
    *   A ViewExecutable instance.
    */
-  public function get(ViewStorageInterface $view) {
+  public function get(ViewInterface $view) {
     $view = new ViewExecutable($view, $this->user, $this->viewsData);
     $view->setRequest($this->requestStack->getCurrentRequest());
     return $view;
diff --git a/core/modules/views/src/ViewInterface.php b/core/modules/views/src/ViewInterface.php
new file mode 100644
index 0000000..e8d0c51
--- /dev/null
+++ b/core/modules/views/src/ViewInterface.php
@@ -0,0 +1,129 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\views\ViewInterface.
+ */
+
+namespace Drupal\views;
+
+use Drupal\Core\Config\Entity\ConfigEntityInterface;
+
+/**
+ * Defines an interface for View storage classes.
+ */
+interface ViewInterface extends ConfigEntityInterface {
+
+  /**
+   * Adds a new display handler to the view, automatically creating an ID.
+   *
+   * @param string $plugin_id
+   *   (optional) The plugin type from the Views plugin annotation. Defaults to
+   *   'page'.
+   * @param string $title
+   *   (optional) The title of the display. Defaults to NULL.
+   * @param string $id
+   *   (optional) The ID to use, e.g., 'default', 'page_1', 'block_2'. Defaults
+   *   to NULL.
+   *
+   * @return string|bool
+   *   The key to the display in $view->display, or FALSE if no plugin ID was
+   *   provided.
+   */
+  public function addDisplay($plugin_id = 'page', $title = NULL, $id = NULL);
+
+  /**
+   * Creates a new display and a display handler instance for it.
+   *
+   * @param string $plugin_id
+   *   (optional) The plugin type from the Views plugin annotation. Defaults to
+   *   'page'.
+   * @param string $title
+   *   (optional) The title of the display. Defaults to NULL.
+   * @param string $id
+   *   (optional) The ID to use, e.g., 'default', 'page_1', 'block_2'. Defaults
+   *   to NULL.
+   *
+   * @return string|\Drupal\views\Plugin\views\display\DisplayPluginBase
+   *   A new display plugin instance if executable is set, the new display ID
+   *   otherwise.
+   */
+  public function newDisplay($plugin_id = 'page', $title = NULL, $id = NULL);
+
+  /**
+   * Retrieves a specific display's configuration by reference.
+   *
+   * @param string $display_id
+   *   The display ID to retrieve, e.g., 'default', 'page_1', 'block_2'.
+   *
+   * @return array
+   *   A reference to the specified display configuration.
+   */
+  public function &getDisplay($display_id);
+
+  /**
+   * Add defaults to the display options.
+   */
+  public function mergeDefaultDisplaysOptions();
+
+  /**
+   * Returns the name of the base table this view will use.
+   *
+   * @return string
+   *   The name of the base table for this view.
+   */
+  public function getBaseTableName();
+
+  /**
+   * Returns the name of the base field to use.
+   *
+   * @return string
+   *   The name of the base field for this view.
+   */
+  public function getBaseFieldName();
+
+  /**
+   * Returns the description of the view, which is used only in the interface.
+   *
+   * @return string
+   *   The description of this view used in the interface.
+   */
+  public function getDescription();
+
+  /**
+   * Returns the "tags" of a view.
+   *
+   * The tags are stored as a single string, though it is used as multiple tags
+   * for example in the views overview.
+   *
+   * @return string
+   *   A single string of multiple tags added to this view.
+   */
+  public function getTags();
+
+  /**
+   * Returns the core version this view was created for.
+   *
+   * @return int
+   *   A drupal core version string such as DRUPAL_CORE_COMPATIBILITY (8.x)
+   */
+  public function getCoreVersion();
+
+  /**
+   * Returns a reference to the executable version of this view.
+   * If none was set previously, it is created before returning it.
+   *
+   * @return \Drupal\views\ViewExecutable
+   *   A reference to the executable version of this view.
+   */
+  public function getExecutable();
+
+  /**
+   * Returns the name of module implementing this view.
+   *
+   * @return string
+   *   The name of the module implementing this view.
+   */
+  public function getModuleName();
+
+}
diff --git a/core/modules/views/tests/modules/views_test_data/views_test_data.views_execution.inc b/core/modules/views/tests/modules/views_test_data/views_test_data.views_execution.inc
index d3ceb3b..a2eacc1 100644
--- a/core/modules/views/tests/modules/views_test_data/views_test_data.views_execution.inc
+++ b/core/modules/views/tests/modules/views_test_data/views_test_data.views_execution.inc
@@ -7,7 +7,7 @@
 
 use Drupal\field\FieldStorageConfigInterface;
 use Drupal\views\ViewExecutable;
-use Drupal\views\ViewStorageInterface;
+use Drupal\views\ViewInterface;
 
 /**
  * Implements hook_views_query_substitutions().
diff --git a/core/modules/views/tests/src/Unit/Routing/ViewPageControllerTest.php b/core/modules/views/tests/src/Unit/Routing/ViewPageControllerTest.php
index 7657fcd..f974bff 100644
--- a/core/modules/views/tests/src/Unit/Routing/ViewPageControllerTest.php
+++ b/core/modules/views/tests/src/Unit/Routing/ViewPageControllerTest.php
@@ -58,7 +58,7 @@ class ViewPageControllerTest extends UnitTestCase {
    * Tests the page controller.
    */
   public function testPageController() {
-    $view = $this->getMock('Drupal\views\ViewStorageInterface');
+    $view = $this->getMock('Drupal\views\ViewInterface');
 
     $this->storage->expects($this->once())
       ->method('load')
@@ -112,7 +112,7 @@ class ViewPageControllerTest extends UnitTestCase {
    * Tests the page controller with arguments on a non overridden page view.
    */
   public function testHandleWithArgumentsWithoutOverridden() {
-    $view = $this->getMock('Drupal\views\ViewStorageInterface');
+    $view = $this->getMock('Drupal\views\ViewInterface');
 
     $this->storage->expects($this->once())
       ->method('load')
@@ -168,7 +168,7 @@ class ViewPageControllerTest extends UnitTestCase {
    * Note: This test does not care about upcasting for now.
    */
   public function testHandleWithArgumentsOnOveriddenRoute() {
-    $view = $this->getMock('Drupal\views\ViewStorageInterface');
+    $view = $this->getMock('Drupal\views\ViewInterface');
 
     $this->storage->expects($this->once())
       ->method('load')
@@ -227,7 +227,7 @@ class ViewPageControllerTest extends UnitTestCase {
    * are pulled in.
    */
   public function testHandleWithArgumentsOnOveriddenRouteWithUpcasting() {
-    $view = $this->getMock('Drupal\views\ViewStorageInterface');
+    $view = $this->getMock('Drupal\views\ViewInterface');
 
     $this->storage->expects($this->once())
       ->method('load')
diff --git a/core/modules/views/tests/src/Unit/ViewExecutableFactoryTest.php b/core/modules/views/tests/src/Unit/ViewExecutableFactoryTest.php
index 730dd37..74d1a2a 100644
--- a/core/modules/views/tests/src/Unit/ViewExecutableFactoryTest.php
+++ b/core/modules/views/tests/src/Unit/ViewExecutableFactoryTest.php
@@ -61,7 +61,7 @@ class ViewExecutableFactoryTest extends UnitTestCase {
 
     $this->user = $this->getMock('Drupal\Core\Session\AccountInterface');
     $this->requestStack = new RequestStack();
-    $this->view = $this->getMock('Drupal\views\ViewStorageInterface');
+    $this->view = $this->getMock('Drupal\views\ViewInterface');
     $this->viewsData = $this->getMockBuilder('Drupal\views\ViewsData')
       ->disableOriginalConstructor()
       ->getMock();
diff --git a/core/modules/views_ui/src/Controller/ViewsUIController.php b/core/modules/views_ui/src/Controller/ViewsUIController.php
index 0cfc3dc..25c9ac0 100644
--- a/core/modules/views_ui/src/Controller/ViewsUIController.php
+++ b/core/modules/views_ui/src/Controller/ViewsUIController.php
@@ -12,8 +12,7 @@
 use Drupal\Core\Controller\ControllerBase;
 use Drupal\Core\Url;
 use Drupal\views\ViewExecutable;
-use Drupal\views\ViewStorageInterface;
-use Drupal\views\Views;
+use Drupal\views\ViewInterface;
 use Drupal\views_ui\ViewUI;
 use Drupal\views\ViewsData;
 use Symfony\Component\DependencyInjection\ContainerInterface;
@@ -138,7 +137,7 @@ class ViewsUIController extends ControllerBase {
   /**
    * Calls a method on a view and reloads the listing page.
    *
-   * @param \Drupal\views\ViewStorageInterface $view
+   * @param \Drupal\views\ViewInterface $view
    *   The view being acted upon.
    * @param string $op
    *   The operation to perform, e.g., 'enable' or 'disable'.
@@ -150,7 +149,7 @@ class ViewsUIController extends ControllerBase {
    *   back to the listing page.
    *
    */
-  public function ajaxOperation(ViewStorageInterface $view, $op, Request $request) {
+  public function ajaxOperation(ViewInterface $view, $op, Request $request) {
     // Perform the operation.
     $view->$op()->save();
 
diff --git a/core/modules/views_ui/src/Form/Ajax/AddHandler.php b/core/modules/views_ui/src/Form/Ajax/AddHandler.php
index afcfa43..a313ded 100644
--- a/core/modules/views_ui/src/Form/Ajax/AddHandler.php
+++ b/core/modules/views_ui/src/Form/Ajax/AddHandler.php
@@ -9,7 +9,7 @@
 
 use Drupal\Core\Form\FormStateInterface;
 use Drupal\views\ViewExecutable;
-use Drupal\views\ViewStorageInterface;
+use Drupal\views\ViewInterface;
 use Drupal\views\Views;
 
 /**
@@ -34,7 +34,7 @@ class AddHandler extends ViewsFormBase {
   /**
    * {@inheritdoc}
    */
-  public function getForm(ViewStorageInterface $view, $display_id, $js, $type = NULL) {
+  public function getForm(ViewInterface $view, $display_id, $js, $type = NULL) {
     $this->setType($type);
     return parent::getForm($view, $display_id, $js);
   }
diff --git a/core/modules/views_ui/src/Form/Ajax/ConfigHandler.php b/core/modules/views_ui/src/Form/Ajax/ConfigHandler.php
index 3f0ee62..1089483 100644
--- a/core/modules/views_ui/src/Form/Ajax/ConfigHandler.php
+++ b/core/modules/views_ui/src/Form/Ajax/ConfigHandler.php
@@ -9,7 +9,7 @@
 
 use Drupal\Core\Form\FormStateInterface;
 use Drupal\Core\Url;
-use Drupal\views\ViewStorageInterface;
+use Drupal\views\ViewInterface;
 use Drupal\views\ViewExecutable;
 use Drupal\views\Views;
 use Symfony\Component\HttpFoundation\Request;
@@ -37,7 +37,7 @@ class ConfigHandler extends ViewsFormBase {
   /**
    * {@inheritdoc}
    */
-  public function getForm(ViewStorageInterface $view, $display_id, $js, $type = NULL, $id = NULL) {
+  public function getForm(ViewInterface $view, $display_id, $js, $type = NULL, $id = NULL) {
     $this->setType($type);
     $this->setID($id);
     return parent::getForm($view, $display_id, $js);
diff --git a/core/modules/views_ui/src/Form/Ajax/ConfigHandlerExtra.php b/core/modules/views_ui/src/Form/Ajax/ConfigHandlerExtra.php
index 3cdaece..a49aed7 100644
--- a/core/modules/views_ui/src/Form/Ajax/ConfigHandlerExtra.php
+++ b/core/modules/views_ui/src/Form/Ajax/ConfigHandlerExtra.php
@@ -8,7 +8,7 @@
 namespace Drupal\views_ui\Form\Ajax;
 
 use Drupal\Core\Form\FormStateInterface;
-use Drupal\views\ViewStorageInterface;
+use Drupal\views\ViewInterface;
 use Drupal\views\ViewExecutable;
 
 /**
@@ -34,7 +34,7 @@ class ConfigHandlerExtra extends ViewsFormBase {
   /**
    * {@inheritdoc}
    */
-  public function getForm(ViewStorageInterface $view, $display_id, $js, $type = NULL, $id = NULL) {
+  public function getForm(ViewInterface $view, $display_id, $js, $type = NULL, $id = NULL) {
     $this->setType($type);
     $this->setID($id);
     return parent::getForm($view, $display_id, $js);
diff --git a/core/modules/views_ui/src/Form/Ajax/ConfigHandlerGroup.php b/core/modules/views_ui/src/Form/Ajax/ConfigHandlerGroup.php
index 3cc63f5..d9631ee 100644
--- a/core/modules/views_ui/src/Form/Ajax/ConfigHandlerGroup.php
+++ b/core/modules/views_ui/src/Form/Ajax/ConfigHandlerGroup.php
@@ -9,7 +9,7 @@
 
 use Drupal\Core\Form\FormStateInterface;
 use Drupal\views\Views;
-use Drupal\views\ViewStorageInterface;
+use Drupal\views\ViewInterface;
 use Drupal\views\ViewExecutable;
 
 /**
@@ -35,7 +35,7 @@ class ConfigHandlerGroup extends ViewsFormBase {
   /**
    * {@inheritdoc}
    */
-  public function getForm(ViewStorageInterface $view, $display_id, $js, $type = NULL, $id = NULL) {
+  public function getForm(ViewInterface $view, $display_id, $js, $type = NULL, $id = NULL) {
     $this->setType($type);
     $this->setID($id);
     return parent::getForm($view, $display_id, $js);
diff --git a/core/modules/views_ui/src/Form/Ajax/Display.php b/core/modules/views_ui/src/Form/Ajax/Display.php
index 307fda4..b3c296f 100644
--- a/core/modules/views_ui/src/Form/Ajax/Display.php
+++ b/core/modules/views_ui/src/Form/Ajax/Display.php
@@ -8,7 +8,7 @@
 namespace Drupal\views_ui\Form\Ajax;
 
 use Drupal\Core\Form\FormStateInterface;
-use Drupal\views\ViewStorageInterface;
+use Drupal\views\ViewInterface;
 
 /**
  * Provides a form for editing the Views display.
@@ -35,7 +35,7 @@ class Display extends ViewsFormBase {
    * @todo Remove this and switch all usage of $form_state->get('section') to
    *   $form_state->get('type').
    */
-  public function getFormState(ViewStorageInterface $view, $display_id, $js) {
+  public function getFormState(ViewInterface $view, $display_id, $js) {
     $form_state = parent::getFormState($view, $display_id, $js);
     $form_state->set('section', $this->type);
     return $form_state;
@@ -44,7 +44,7 @@ class Display extends ViewsFormBase {
   /**
    * {@inheritdoc}
    */
-  public function getForm(ViewStorageInterface $view, $display_id, $js, $type = NULL) {
+  public function getForm(ViewInterface $view, $display_id, $js, $type = NULL) {
     $this->setType($type);
     return parent::getForm($view, $display_id, $js);
   }
diff --git a/core/modules/views_ui/src/Form/Ajax/Rearrange.php b/core/modules/views_ui/src/Form/Ajax/Rearrange.php
index cff75fd..786bc27 100644
--- a/core/modules/views_ui/src/Form/Ajax/Rearrange.php
+++ b/core/modules/views_ui/src/Form/Ajax/Rearrange.php
@@ -9,7 +9,7 @@
 
 use Drupal\Core\Form\FormStateInterface;
 use Drupal\Core\Url;
-use Drupal\views\ViewStorageInterface;
+use Drupal\views\ViewInterface;
 use Drupal\views\ViewExecutable;
 
 /**
@@ -34,7 +34,7 @@ class Rearrange extends ViewsFormBase {
   /**
    * {@inheritdoc}
    */
-  public function getForm(ViewStorageInterface $view, $display_id, $js, $type = NULL) {
+  public function getForm(ViewInterface $view, $display_id, $js, $type = NULL) {
     $this->setType($type);
     return parent::getForm($view, $display_id, $js);
   }
diff --git a/core/modules/views_ui/src/Form/Ajax/ViewsFormBase.php b/core/modules/views_ui/src/Form/Ajax/ViewsFormBase.php
index e265ce7..a712aec 100644
--- a/core/modules/views_ui/src/Form/Ajax/ViewsFormBase.php
+++ b/core/modules/views_ui/src/Form/Ajax/ViewsFormBase.php
@@ -11,7 +11,8 @@
 use Drupal\Core\Form\FormBase;
 use Drupal\Core\Form\FormState;
 use Drupal\Core\Form\FormStateInterface;
-use Drupal\views\ViewStorageInterface;
+use Drupal\views_ui\ViewUI;
+use Drupal\views\ViewInterface;
 use Drupal\views\Ajax;
 use Drupal\Core\Ajax\AjaxResponse;
 use Drupal\Core\Ajax\CloseModalDialogCommand;
@@ -63,7 +64,7 @@
   /**
    * {@inheritdoc}
    */
-  public function getFormState(ViewStorageInterface $view, $display_id, $js) {
+  public function getFormState(ViewInterface $view, $display_id, $js) {
     // $js may already have been converted to a Boolean.
     $ajax = is_string($js) ? $js === 'ajax' : $js;
     return (new FormState())
@@ -81,7 +82,7 @@
   /**
    * {@inheritdoc}
    */
-  public function getForm(ViewStorageInterface $view, $display_id, $js) {
+  public function getForm(ViewInterface $view, $display_id, $js) {
     $form_state = $this->getFormState($view, $display_id, $js);
     $view = $form_state->get('view');
     $key = $form_state->get('form_key');
diff --git a/core/modules/views_ui/src/Form/Ajax/ViewsFormInterface.php b/core/modules/views_ui/src/Form/Ajax/ViewsFormInterface.php
index 8bc8adf..88197ca 100644
--- a/core/modules/views_ui/src/Form/Ajax/ViewsFormInterface.php
+++ b/core/modules/views_ui/src/Form/Ajax/ViewsFormInterface.php
@@ -8,7 +8,7 @@
 namespace Drupal\views_ui\Form\Ajax;
 
 use Drupal\Core\Form\FormInterface;
-use Drupal\views\ViewStorageInterface;
+use Drupal\views\ViewInterface;
 
 interface ViewsFormInterface extends FormInterface {
 
@@ -24,7 +24,7 @@
   /**
    * Gets the form state for this form.
    *
-   * @param \Drupal\views\ViewStorageInterface $view
+   * @param \Drupal\views\ViewInterface $view
    *   The view being edited.
    * @param string|null $display_id
    *   The display ID being edited, or NULL to load the first available display.
@@ -35,12 +35,12 @@
    * @return \Drupal\Core\Form\FormStateInterface
    *   The current state of the form.
    */
-  public function getFormState(ViewStorageInterface $view, $display_id, $js);
+  public function getFormState(ViewInterface $view, $display_id, $js);
 
   /**
    * Creates a new instance of this form.
    *
-   * @param \Drupal\views\ViewStorageInterface $view
+   * @param \Drupal\views\ViewInterface $view
    *   The view being edited.
    * @param string|null $display_id
    *   The display ID being edited, or NULL to load the first available display.
@@ -55,6 +55,6 @@
    * @todo When http://drupal.org/node/1843224 is in, this will return
    *   \Drupal\Core\Ajax\AjaxResponse instead of the array of AJAX commands.
    */
-  public function getForm(ViewStorageInterface $view, $display_id, $js);
+  public function getForm(ViewInterface $view, $display_id, $js);
 
 }
diff --git a/core/modules/views_ui/src/ViewUI.php b/core/modules/views_ui/src/ViewUI.php
index 58a1734..7f18c69 100644
--- a/core/modules/views_ui/src/ViewUI.php
+++ b/core/modules/views_ui/src/ViewUI.php
@@ -21,7 +21,7 @@
 use Drupal\Core\Session\AccountInterface;
 use Drupal\views\Plugin\views\query\Sql;
 use Drupal\views\Entity\View;
-use Drupal\views\ViewStorageInterface;
+use Drupal\views\ViewInterface;
 use Symfony\Cmf\Component\Routing\RouteObjectInterface;
 use Symfony\Component\HttpFoundation\ParameterBag;
 use Symfony\Component\HttpFoundation\Request;
@@ -29,7 +29,7 @@
 /**
  * Stores UI related temporary settings.
  */
-class ViewUI implements ViewStorageInterface {
+class ViewUI implements ViewInterface {
 
   /**
    * Indicates if a view is currently being edited.
@@ -165,10 +165,10 @@ class ViewUI implements ViewStorageInterface {
   /**
    * Constructs a View UI object.
    *
-   * @param \Drupal\views\ViewStorageInterface $storage
+   * @param \Drupal\views\ViewInterface $storage
    *   The View storage object to wrap.
    */
-  public function __construct(ViewStorageInterface $storage, ViewExecutable $executable = NULL) {
+  public function __construct(ViewInterface $storage, ViewExecutable $executable = NULL) {
     $this->entityType = 'view';
     $this->storage = $storage;
     if (!isset($executable)) {
@@ -1168,4 +1168,66 @@ class ViewUI implements ViewStorageInterface {
     $this->storage->getTypedData();
   }
 
+  /**
+   * {@inheritdoc}
+   */
+  public function addDisplay($plugin_id = 'page', $title = NULL, $id = NULL) {
+    return $this->storage->addDisplay($plugin_id, $title, $id);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function newDisplay($plugin_id = 'page', $title = NULL, $id = NULL) {
+    return $this->storage->newDisplay($plugin_id, $title, $id);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getBaseTableName() {
+    return $this->storage->getBaseTableName();
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getBaseFieldName() {
+    return $this->storage->getBaseFieldName();
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getDescription() {
+    return $this->storage->getDescription();
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getTags() {
+    return $this->storage->getTags();
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getCoreVersion() {
+    return $this->storage->getCoreVersion();
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getViewExecutable() {
+    return $this->storage->getViewExecutable();
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getModuleName() {
+    return $this->storage->getModuleName();
+  }
 }
diff --git a/core/modules/views_ui/views_ui.module b/core/modules/views_ui/views_ui.module
index 7bf6e71..916104b 100644
--- a/core/modules/views_ui/views_ui.module
+++ b/core/modules/views_ui/views_ui.module
@@ -10,7 +10,7 @@
 use Drupal\Core\Url;
 use Drupal\views\Views;
 use Drupal\views\ViewExecutable;
-use Drupal\views\ViewStorageInterface;
+use Drupal\views\ViewInterface;
 use Drupal\views_ui\ViewUI;
 use Drupal\views\Analyzer;
 use Drupal\Core\Ajax\AjaxResponse;
