diff --git a/includes/views/views_lazy_load_plugin_display_extender.inc b/includes/views/views_lazy_load_plugin_display_extender.inc
index f28c8de..41beee7 100644
--- a/includes/views/views_lazy_load_plugin_display_extender.inc
+++ b/includes/views/views_lazy_load_plugin_display_extender.inc
@@ -19,14 +19,8 @@ class views_lazy_load_plugin_display_extender extends views_plugin_display_exten
       // Marking the view as executed prevents the Search API querying Sajari.
       $this->view->executed = TRUE;
 
-      // This is a bit of a hack to make sure the view is always rendered when
-      // we're lazy loading the view. By setting an "empty" area handler in the
-      // header the view is rendered which is later used for switching in the
-      // results.
-      // @TODO, in the future we could clean out all area plugins first pass?
-      if (empty($this->display->default_display->options['empty'])) {
-        $this->addLoadingArea();
-      }
+      // Add the loading text in the area plugin.
+      $this->addLoadingArea();
 
       // Add our JavaScript to the page with an array of dom_ids that can be
       // used client side to retrieve the view instance.
@@ -111,16 +105,21 @@ class views_lazy_load_plugin_display_extender extends views_plugin_display_exten
    * Add a loading div to the view while we're loading the results.
    */
   protected function addLoadingArea() {
-    $options = array(
-      'id' => 'area',
-      'table' => 'views',
-      'field' => 'area',
-      'empty' => FALSE,
+    // Add a empty area plugin to this view display so it gets initialised.
+    $display_id = $this->display->display->id;
+    $handler_id = $this->view->add_item($display_id, 'empty', 'views', 'area', [
+      'empty' => TRUE,
       'content' => theme('views_lazy_load_throbber'),
-    );
+    ]);
+
+    // Now get the area plugin info back and initialise an area plugin.
+    $empty_info = $this->display->get_option('empty');
+    $area = views_get_handler('views', 'area', 'area');
+    $area->init($this->view, $empty_info[$handler_id]);
 
-    $this->view->set_item('default', 'header', 'area', $options);
-    $this->display->default_display->options['empty'][] = $options;
+    // We must add the area directly to the display_handler to make sure it gets
+    // rendered.
+    $this->display->handlers['empty'][$handler_id] = $area;
   }
 
 }
diff --git a/views_lazy_load.test b/views_lazy_load.test
index 19e5705..9a50ab1 100644
--- a/views_lazy_load.test
+++ b/views_lazy_load.test
@@ -44,6 +44,9 @@ class ViewsLazyLoadTest extends DrupalWebTestCase {
     $output = $view->preview('page');
     $this->assertContains('Loading...', $output, 'The view output has the lazy loading text.');
 
+    // Assert the view display to make sure we're getting the right display.
+    $this->assertContains('view-display-id-page', $output, 'Correct display title');
+
     // Make sure AJAX is forced on with lazy loading.
     $view = $this->getTestView(TRUE);
     $view->preview();
