diff --git a/lib/Drupal/views/DisplayArray.php b/lib/Drupal/views/DisplayArray.php
new file mode 100644
index 0000000..4f1b62c
--- /dev/null
+++ b/lib/Drupal/views/DisplayArray.php
@@ -0,0 +1,153 @@
+<?php
+
+/**
+ * @file
+ * Definition of Drupal\views\DisplayArray.
+ */
+
+namespace Drupal\views;
+
+/**
+ * A class which wraps the displays of a view so you can lazy-initialize them.
+ */
+class DisplayArray implements \ArrayAccess, \Iterator {
+
+  /**
+   * Stores a reference to the view which has this displays attached.
+   *
+   * @var \Drupal\views\ViewExecutable
+   */
+  protected $view;
+
+  /**
+   * Stores the actual display instances in an array.
+   *
+   * @var array
+   */
+  protected $display = array();
+
+  /**
+   * Constructs a DisplayArray object.
+   *
+   * @param \Drupal\views\ViewExecutable
+   *   The view which has this displays attached.
+   */
+  function __construct(ViewExecutable $view) {
+    $this->view = $view;
+
+    // @todo Figure out whether it might be helpful to initialize at least the
+    //   default display automatically.
+  }
+
+
+  /**
+   * Initializes a single display and stores the result in self::display.
+   *
+   * @param string $display_id
+   *   The name of the display to initialize.
+   *
+   * @return \Drupal\views\Plugin\views\display\DisplayPluginBase
+   *   Returns the display instance.
+   */
+  protected function initializeDisplay($display_id) {
+    // If the display was initialize before just return it.
+    if (isset($this->display[$display_id])) {
+      return $this->display[$display_id];
+    }
+    $this->display[$display_id] = views_get_plugin('display', $this->view->storage->display[$display_id]['display_plugin']);
+    if (!empty($this->display[$display_id])) {
+      // Initialize the new display handler with data.
+      $this->display[$display_id]->init($this, $this->view->storage->display[$display_id]);
+      // If this is NOT the default display handler, let it know which is
+      // since it may well utilize some data from the default.
+      // This assumes that the 'default' handler is always first. It always
+      // is. Make sure of it.
+      if ($display_id != 'default') {
+        $this->display[$display_id]->default_display = $this->display['default'];
+      }
+    }
+    return $this->display[$display_id];
+  }
+
+  /**
+   * Initialized all displays of the view.
+   */
+  protected function initializeAllDisplays() {
+    foreach (array_keys($this->view->storage->display) as $display_id) {
+      $this->initializeDisplay($display_id);
+    }
+  }
+
+  /**
+   * Implements \ArrayAccess::offsetExists().
+   */
+  public function offsetExists($offset) {
+    return isset($this->display[$offset]);
+  }
+
+  /**
+   * Implements \ArrayAccess::offsetGet().
+   */
+  public function offsetGet($offset) {
+    if (isset($this->display[$offset])) {
+      return $this->display[$offset];
+    }
+    else {
+      return $this->initializeDisplay($offset);
+    }
+  }
+
+  /**
+   * Implements \ArrayAccess::offsetSet().
+   */
+  public function offsetSet($offset, $value) {
+    $this->display[$offset] = $value;
+  }
+
+  /**
+   * Implements \ArrayAccess::offsetUnset().
+   */
+  public function offsetUnset($offset) {
+    unset($this->display[$offset]);
+  }
+
+  /**
+   * Implements \Iterator::current().
+   */
+  public function current() {
+    return current($this->display);
+  }
+
+  /**
+   * Implements \Iterator::current().
+   */
+  public function next() {
+    // If we do an actual iteration over the elements, let's initialize all
+    // displays.
+    $this->initializeAllDisplays();
+    return next($this->display);
+  }
+
+  /**
+   * Implements \Iterator::key().
+   */
+  public function key() {
+    return key($this->display);
+  }
+
+  /**
+   * Implements \Iterator::valid().
+   */
+  public function valid() {
+    $display_id = key($this->display);
+    return isset($this->display[$display_id]);
+  }
+
+  /**
+   * Implements \Iterator::rewind().
+   */
+  public function rewind() {
+    reset($this->display);
+  }
+
+}
diff --git a/lib/Drupal/views/ViewExecutable.php b/lib/Drupal/views/ViewExecutable.php
index 36aaee8..fe46f4a 100644
--- a/lib/Drupal/views/ViewExecutable.php
+++ b/lib/Drupal/views/ViewExecutable.php
@@ -574,21 +574,8 @@ class ViewExecutable {
       return TRUE;
     }
 
-    // Instantiate all displays
-    foreach (array_keys($this->storage->display) as $id) {
-      $this->displayHandlers[$id] = views_get_plugin('display', $this->storage->display[$id]['display_plugin']);
-      if (!empty($this->displayHandlers[$id])) {
-        // Initialize the new display handler with data.
-        $this->displayHandlers[$id]->init($this, $this->storage->display[$id]);
-        // If this is NOT the default display handler, let it know which is
-        // since it may well utilize some data from the default.
-        // This assumes that the 'default' handler is always first. It always
-        // is. Make sure of it.
-        if ($id != 'default') {
-          $this->displayHandlers[$id]->default_display =& $this->displayHandlers['default'];
-        }
-      }
-    }
+    // Initialize the display cache array.
+    $this->displayHandlers = new DisplayArray($this);
 
     $this->current_display = 'default';
     $this->display_handler = $this->displayHandlers['default'];
