diff --git a/handlers/views_handler_field_entity.inc b/handlers/views_handler_field_entity.inc
new file mode 100644
index 0000000..b53f763
--- /dev/null
+++ b/handlers/views_handler_field_entity.inc
@@ -0,0 +1,57 @@
+<?php
+/**
+ * A handler to display data from entity objects.
+ *
+ * @ingroup views_field_handlers
+ */
+class views_handler_field_entity extends views_handler_field {
+
+  protected $field_alias = NULL, $entity_type;
+
+  /**
+   * Override the parent's query method, since it doesn't need to do anything.
+   */
+  function query() {
+    // Only do something if the default backend is in use.
+    if (get_class($this->query) != 'views_plugin_query_default') {
+      return;
+    }
+
+    $base_table_alias = $base_table = $this->view->base_table;
+    $base_field = $this->view->base_field;
+
+    if (!empty($this->relationship)) {
+      foreach ($this->view->relationship as $relationship) {
+        if ($relationship->alias == $this->relationship) {
+          $base_table = $relationship->definition['base'];
+          $base_table_alias = $relationship->alias;
+
+          $table_data = views_fetch_data($base_table);
+          $base_field = $table_data['table']['base']['field'];
+        }
+      }
+    }
+
+    // We always need the base field (entity_id).
+    $this->field_alias = $this->query->add_field($base_table_alias, $base_field, '');
+  }
+
+  /**
+   * Load the entities for all fields that are about to be displayed.
+   */
+  function pre_render(&$values) {
+    if (!empty($values)) {
+      list($this->entity_type, $values) = $this->query->get_result_entities($values, !empty($this->relationship) ? $this->relationship : NULL, $this->field_alias);
+    }
+  }
+
+  /**
+   * Get the value that's supposed to be rendered.
+   *
+   * @param $entity
+   *   An entity object containing all retrieved values.
+   */
+  function get_value($entity) {
+    return entity_label($this->entity_type, $entity);
+  }
+}
diff --git a/plugins/views_plugin_query.inc b/plugins/views_plugin_query.inc
index 0d71c14..c0aa5c6 100644
--- a/plugins/views_plugin_query.inc
+++ b/plugins/views_plugin_query.inc
@@ -146,4 +146,10 @@ class views_plugin_query extends views_plugin {
     $this->group_operator = strtoupper($type);
   }
 
+  /**
+   * Returns the according entity objects for the given query results.
+   */
+  function get_result_entities($results, $relationship = NULL, $id_alias = NULL) {
+    return FALSE;
+  }
 }
diff --git a/plugins/views_plugin_query_default.inc b/plugins/views_plugin_query_default.inc
index e99df14..fa0d36e 100644
--- a/plugins/views_plugin_query_default.inc
+++ b/plugins/views_plugin_query_default.inc
@@ -1461,6 +1461,49 @@ class views_plugin_query_default extends views_plugin_query {
       ),
     );
   }
+
+  /**
+   * Returns the according entity objects for the given query results.
+   */
+  function get_result_entities($results, $relationship = NULL, $id_alias = NULL) {
+    $base_table = $this->base_table;
+
+    if (!empty($relationship)) {
+      foreach ($this->view->relationship as $relationship) {
+        if ($relationship->alias == $relationship) {
+          $base_table = $relationship->definition['base'];
+        }
+      }
+    }
+    $table_data = views_fetch_data($base_table);
+
+    // Bail out if the base-table has not specified the according entity-type.
+    if (!isset($table_data['table']['base']['entity type'])) {
+      return FALSE;
+    }
+    $entity_type = $table_data['table']['base']['entity type'];
+    if (!isset($id_alias)) {
+      $info = entity_get_info($entity_type);
+      $id_key = $info['entity keys']['id'];
+      // Assume the id has been added using the default-alias.
+      $id_alias = !empty($relationship) ? $relationship . '_' . $id_key : $id_key;
+    }
+
+    // Assemble the ids of the entities to load.
+    foreach ($results as $key => $result) {
+      if (isset($result->$id_alias)) {
+        $ids[$key] = $result->$id_alias;
+      }
+    }
+
+    $entities = entity_load($this->entity_type, $ids);
+    // Re-key the array to ensure there is an entry for each result.
+    $result = array();
+    foreach ($ids as $key => $id) {
+      $result[$key] = isset($entities[$id]) ? $entitites[$id] : FALSE;
+    }
+    return array($entity_type, $result);
+  }
 }
 
 function views_query_default_aggregation_method_simple($group_type, $field) {
