diff --git a/panelizer.module b/panelizer.module
index b2b9464..7f9c01a 100644
--- a/panelizer.module
+++ b/panelizer.module
@@ -192,17 +192,7 @@ function panelizer_entity_view_alter(&$build, $entity_type) {
     return;
   }
 
-  // Love this hack, eh?
-  if ($entity_type == 'user') {
-    $element = '#account';
-  }
-  elseif ($entity_type == 'taxonomy_term') {
-    $element = '#term';
-  }
-  else {
-    $element = '#' . $entity_type;
-  }
-  $entity = $build[$element];
+  $entity = $handler->get_entity_view_entity($build);
 
   list($entity_id, $revision_id, $bundle) = entity_extract_ids($entity_type, $entity);
 
diff --git a/plugins/entity/PanelizerEntityDefault.class.php b/plugins/entity/PanelizerEntityDefault.class.php
index 1ab1d40..2ba39c0 100644
--- a/plugins/entity/PanelizerEntityDefault.class.php
+++ b/plugins/entity/PanelizerEntityDefault.class.php
@@ -147,6 +147,13 @@ interface PanelizerEntityInterface {
    */
   public function entity_bundle_label();
 
+  /**
+   * Fetch the entity out of a build for hook_entity_view.
+   *
+   * @param $build
+   *   The render array that contains the entity.
+   */
+  public function get_entity_view_entity($build);
 }
 
 /**
@@ -2227,6 +2234,19 @@ abstract class PanelizerEntityDefault implements PanelizerEntityInterface {
   }
 
   /**
+   * Fetch the entity out of a build for hook_entity_view.
+   *
+   * @param $build
+   *   The render array that contains the entity.
+   */
+  public function get_entity_view_entity($build) {
+    $element = '#' . $entity_type;
+    if (isset($build[$element])) {
+      return $build[$element];
+    }
+  }
+
+  /**
    * Implement views support for panelizer entity types.
    */
   public function hook_views_data_alter(&$items) {
diff --git a/plugins/entity/PanelizerEntityTaxonomyTerm.class.php b/plugins/entity/PanelizerEntityTaxonomyTerm.class.php
index e5e3800..32b0ba6 100644
--- a/plugins/entity/PanelizerEntityTaxonomyTerm.class.php
+++ b/plugins/entity/PanelizerEntityTaxonomyTerm.class.php
@@ -114,4 +114,17 @@ class PanelizerEntityTaxonomyTerm extends PanelizerEntityDefault {
     }
   }
 
+  /**
+   * Fetch the entity out of a build for hook_entity_view.
+   *
+   * @param $build
+   *   The render array that contains the entity.
+   */
+  public function get_entity_view_entity($build) {
+    $element = '#term';
+    if (isset($build[$element])) {
+      return $build[$element];
+    }
+  }
+
 }
diff --git a/plugins/entity/PanelizerEntityUser.class.php b/plugins/entity/PanelizerEntityUser.class.php
index cb50f34..4f0c077 100644
--- a/plugins/entity/PanelizerEntityUser.class.php
+++ b/plugins/entity/PanelizerEntityUser.class.php
@@ -103,4 +103,17 @@ class PanelizerEntityUser extends PanelizerEntityDefault {
     }
   }
 
+  /**
+   * Fetch the entity out of a build for hook_entity_view.
+   *
+   * @param $build
+   *   The render array that contains the entity.
+   */
+  public function get_entity_view_entity($build) {
+    $element = '#account';
+    if (isset($build[$element])) {
+      return $build[$element];
+    }
+  }
+
 }
