diff --git a/core/modules/views/lib/Drupal/views/Plugin/Core/Entity/View.php b/core/modules/views/lib/Drupal/views/Plugin/Core/Entity/View.php
index f31dcae..7cf5c95 100644
--- a/core/modules/views/lib/Drupal/views/Plugin/Core/Entity/View.php
+++ b/core/modules/views/lib/Drupal/views/Plugin/Core/Entity/View.php
@@ -23,6 +23,7 @@
  *   module = "views",
  *   controller_class = "Drupal\views\ViewStorageController",
  *   list_controller_class = "Drupal\views_ui\ViewListController",
+ *   render_controller_class = "Drupal\views\ViewRenderController",
  *   form_controller_class = {
  *     "edit" = "Drupal\views_ui\ViewEditFormController",
  *     "add" = "Drupal\views_ui\ViewAddFormController",
diff --git a/core/modules/views/lib/Drupal/views/Plugin/views/display/PathPluginBase.php b/core/modules/views/lib/Drupal/views/Plugin/views/display/PathPluginBase.php
index 5692b7e..e5d92af 100644
--- a/core/modules/views/lib/Drupal/views/Plugin/views/display/PathPluginBase.php
+++ b/core/modules/views/lib/Drupal/views/Plugin/views/display/PathPluginBase.php
@@ -41,7 +41,7 @@ public function executeHookMenu($callbacks) {
     // views_arg_load -- which lives in views.module
 
     $bits = explode('/', $this->getOption('path'));
-    $page_arguments = array($this->view->storage->name, $this->display['id']);
+    $page_arguments = array($this->view->storage, $this->display['id']);
     $this->view->initHandlers();
     $view_arguments = $this->view->argument;
 
diff --git a/core/modules/views/lib/Drupal/views/ViewRenderController.php b/core/modules/views/lib/Drupal/views/ViewRenderController.php
new file mode 100644
index 0000000..e27f84b
--- /dev/null
+++ b/core/modules/views/lib/Drupal/views/ViewRenderController.php
@@ -0,0 +1,43 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\views\ViewRenderController.
+ */
+
+namespace Drupal\views;
+
+use Drupal\Core\Entity\EntityInterface;
+use Drupal\Core\Entity\EntityRenderController;
+
+/**
+ * Render controller for views.
+ */
+class ViewRenderController extends EntityRenderController {
+
+  /**
+   * Overrides \Drupal\Core\Entity\EntityRenderController::buildContent().
+   */
+  public function buildContent(array $entities = array(), $view_mode = 'full', $langcode = NULL) {
+    parent::buildContent($entities, $view_mode, $langcode);
+
+    // Unset any pre-render callbacks that might conflict with the view.
+    foreach ($entities as $key => $entity) {
+      unset($entity->content['#pre_render']);
+    }
+  }
+
+  /**
+   * Overrides \Drupal\Core\Entity\EntityRenderController::getBuildDefaults().
+   */
+  protected function getBuildDefaults(EntityInterface $entity, $view_mode, $langcode) {
+    return array(
+      '#type' => $this->entityType,
+      "#{$this->entityType}" => $entity->get('executable'),
+      '#display_id' => $entity->displayId,
+      '#arguments' => $entity->arguments,
+    );
+    return $return;
+  }
+
+}
diff --git a/core/modules/views/views.module b/core/modules/views/views.module
index 2227e31..82f5353 100644
--- a/core/modules/views/views.module
+++ b/core/modules/views/views.module
@@ -57,6 +57,7 @@ function views_element_info() {
   $types['view'] = array(
     '#theme_wrappers' => array('container'),
     '#pre_render' => array('views_pre_render_view_element'),
+    '#view' => NULL,
     '#name' => NULL,
     '#display_id' => 'default',
     '#arguments' => array(),
@@ -70,7 +71,13 @@ function views_element_info() {
 function views_pre_render_view_element($element) {
   $element['#attributes']['class'][] = 'views-element-container';
 
-  $view = views_get_view($element['#name']);
+  // If the view was provided, use that, otherwise load it by name.
+  if ($element['#view']) {
+    $view = $element['#view'];
+  }
+  else {
+    $view = views_get_view($element['#name']);
+  }
   if ($view && $view->access($element['#display_id'])) {
     $element['view']['#markup'] = $view->preview($element['#display_id'], $element['#arguments']);
   }
@@ -545,27 +552,22 @@ function views_arg_load($value, $name, $display_id, $index) {
 /**
  * Page callback: Displays a page view, given a name and display id.
  *
- * @param $name
- *   The name of a view.
- * @param $display_id
- *   The display id of a view.
+ * @param \Drupal\views\Plugin\Core\Entity\View $name
+ *   The view entity.
+ * @param string $display_id
+ *   The display ID of a view.
  *
- * @return
- *   Either the HTML of a fully-executed view, or MENU_NOT_FOUND.
+ * @return array
+ *   A render array representation of the view.
  */
-function views_page($name, $display_id) {
-  $args = func_get_args();
+function views_page(View $view, $display_id) {
   // Remove $name and $display_id from the arguments.
-  array_shift($args);
-  array_shift($args);
-
-  // Load the view and render it.
-  if ($view = views_get_view($name)) {
-    return $view->executeDisplay($display_id, $args);
-  }
+  $args = func_get_args();
+  unset($args[0], $args[1]);
 
-  // Fallback; if we get here no view was found or handler was not valid.
-  return MENU_NOT_FOUND;
+  $view->displayId = $display_id;
+  $view->arguments = $args;
+  return entity_view($view, 'full', NULL);
 }
 
 /**
