diff --git a/entity.info b/entity.info
index 12cd58f..f658098 100644
--- a/entity.info
+++ b/entity.info
@@ -11,6 +11,7 @@ files[] = includes/entity.ui.inc
 files[] = includes/entity.wrapper.inc
 files[] = views/entity.views.inc
 files[] = views/handlers/entity_views_field_handler_helper.inc
+files[] = views/handlers/entity_views_handler_area_entity.inc
 files[] = views/handlers/entity_views_handler_field_boolean.inc
 files[] = views/handlers/entity_views_handler_field_date.inc
 files[] = views/handlers/entity_views_handler_field_duration.inc
diff --git a/views/entity.views.inc b/views/entity.views.inc
index 596d721..cd271a3 100644
--- a/views/entity.views.inc
+++ b/views/entity.views.inc
@@ -59,6 +59,10 @@ function entity_views_data() {
           // selector as special case for loading the base entity.
           'real field' => 'entity object',
         ),
+        'area' => array(
+          'handler' => 'entity_views_handler_area_entity',
+          'type' => $entity_type,
+        ),
       );
     }
   }
diff --git a/views/handlers/entity_views_handler_area_entity.inc b/views/handlers/entity_views_handler_area_entity.inc
new file mode 100644
index 0000000..a53a739
--- /dev/null
+++ b/views/handlers/entity_views_handler_area_entity.inc
@@ -0,0 +1,85 @@
+<?php
+/**
+ * @file
+ * Renders a full entity in a views area.
+ */
+
+class entity_views_handler_area_entity extends views_handler_area {
+  /**
+   * Stores the entity type of the entity.
+   */
+  public $entity_type;
+
+  public function init(&$view, &$display, $options = NULL) {
+    parent::init($view, $display, $options);
+
+    // Initialize the entity-type used.
+    $this->entity_type = $this->definition['type'];
+  }
+
+  public function option_definition() {
+    $options = parent::option_definition();
+    $options['view_mode'] = array('default' => 'full');
+    $options['entity_id'] = array('default' => '');
+    return $options;
+  }
+
+  public function options_form(&$form, &$form_state) {
+    parent::options_form($form, $form_state);
+
+    $form['entity_id'] = array(
+      '#type' => 'textfield',
+      '#title' => t('Entity id'),
+      '#description' => t('Choose the entity you want to display in the area.'),
+      '#default_value' => $this->options['entity_id'],
+    );
+
+    $entity_info = entity_get_info($this->entity_type);
+    $options = array();
+    if (!empty($entity_info['view modes'])) {
+      foreach ($entity_info['view modes'] as $mode => $settings) {
+        $options[$mode] = $settings['label'];
+      }
+    }
+
+    if (count($options) > 1) {
+      $form['view_mode'] = array(
+        '#type' => 'select',
+        '#options' => $options,
+        '#title' => t('View mode'),
+        '#default_value' => $this->options['view_mode'],
+      );
+    }
+    else {
+      $form['view_mode_info'] = array(
+        '#type' => 'item',
+        '#title' => t('View mode'),
+        '#description' => t('Only one view mode is available for this entity type.'),
+        '#markup' => $options ? current($options) : t('Default'),
+      );
+      $form['view_mode'] = array(
+        '#type' => 'value',
+        '#value' => $options ? key($options) : 'default',
+      );
+    }
+    return $form;
+  }
+
+
+  public function render($empty = FALSE) {
+    if (!$empty || !empty($this->options['entity_id'])) {
+      return $this->render_entity($this->options['entity_id'], $this->options['view_mode']);
+    }
+    return '';
+  }
+
+  /**
+   * Render an entity using the view mode.
+   */
+  public function render_entity($entity_id, $view_mode) {
+    $entities = entity_load($this->entity_type, array($entity_id));
+    $render = entity_view($this->entity_type, $entities, $this->options['view_mode']);
+    $render_entity = reset($render);
+    return drupal_render($render_entity);
+  }
+}
