diff --git contrib/search_api_views/includes/handler_field.inc contrib/search_api_views/includes/handler_field.inc
index a8fd27f..b5f4b9a 100644
--- contrib/search_api_views/includes/handler_field.inc
+++ contrib/search_api_views/includes/handler_field.inc
@@ -5,6 +5,8 @@
  * don't need any special treatment and don't have special options.
  *
  * Handles lists automatically.
+ *
+ * @TODO Building off of views_handler_field_prerender_list might give better list handling.
  */
 class SearchApiViewsHandlerField extends views_handler_field {
 
@@ -84,7 +86,7 @@ class SearchApiViewsHandlerField extends views_handler_field {
    */
   public function query() {
     // Add the field.
-    $this->query->addField($this->real_field);
+    $this->field_alias = $this->query->addField($this->real_field);
     $this->addAdditionalFields();
   }
 
@@ -108,7 +110,7 @@ class SearchApiViewsHandlerField extends views_handler_field {
     }
     if (!empty($fields) && is_array($fields)) {
       foreach ($fields as $identifier => $info) {
-        $this->query->addField(is_array($info) ? $info['field'] : $info);
+        $this->aliases[$identifier] = $this->query->addField(is_array($info) ? $info['field'] : $info);
       }
     }
   }
@@ -126,8 +128,8 @@ class SearchApiViewsHandlerField extends views_handler_field {
    * @param array $values
    *   The values retrieved from the database.
    */
-  public function render(array $values) {
-    $value = $values[$this->real_field];
+  public function render($values) {
+    $value = $this->get_value($values);
     if (is_array($value)) {
       return $this->renderArray($value, $values);
     }
@@ -137,7 +139,7 @@ class SearchApiViewsHandlerField extends views_handler_field {
   /**
    * Render a list of values.
    */
-  protected function renderArray($value, array $values) {
+  protected function renderArray($value, $values) {
     if (isset($this->options['list']['mode'])) {
       if ($this->options['list']['mode'] == 'first') {
         $value = count($value) ? array_shift($value) : NULL;
@@ -165,13 +167,13 @@ class SearchApiViewsHandlerField extends views_handler_field {
    * Render a value as a link to the entity, if applicable.
    */
   // @todo Let e.g. author:name be linked to author instead
-  protected function renderLink($value, array $values) {
+  protected function renderLink($value, $values) {
     $render = $this->renderValue($value, $values);
     if (!$this->options['link_to_entity']) {
       return $render;
     }
-    $entity = $values['entity'];
-    $type = isset($values['search_api_views_entity_type']) ? $values['search_api_views_entity_type'] : $this->query->getIndex()->entity_type;
+    $entity = $values->entity;
+    $type = isset($values->search_api_views_entity_type) ? $values->search_api_views_entity_type : $this->query->getIndex()->entity_type;
     $url = entity_uri($type, $entity);
     return l($render, $url['path'], array('html' => TRUE) + $url['options']);
   }
diff --git contrib/search_api_views/includes/handler_field_entity.inc contrib/search_api_views/includes/handler_field_entity.inc
index 4a6913a..e0f7c66 100644
--- contrib/search_api_views/includes/handler_field_entity.inc
+++ contrib/search_api_views/includes/handler_field_entity.inc
@@ -46,7 +46,7 @@ class SearchApiViewsHandlerFieldEntity extends SearchApiViewsHandlerField {
   /**
    * Render a value as a link to the entity, if applicable.
    */
-  protected function renderLink($value, array $values) {
+  protected function renderLink($value, $values) {
     $render = $this->renderValue($value, $values);
     if (!$this->options['link_to_entity'] || !is_numeric($value)) {
       return $render;
diff --git contrib/search_api_views/includes/query.inc contrib/search_api_views/includes/query.inc
index a064c1f..1b92673 100644
--- contrib/search_api_views/includes/query.inc
+++ contrib/search_api_views/includes/query.inc
@@ -89,6 +89,7 @@ class SearchApiViewsQuery extends views_plugin_query {
    */
   public function addField($field) {
     $this->fields[$field] = TRUE;
+    return $field;
   }
 
   /**
@@ -154,41 +155,46 @@ class SearchApiViewsQuery extends views_plugin_query {
    * view.
    */
   protected function addResults(array $results, $view) {
-    // Maybe the service class or a postprocessor already set the entities.
+    // Build a list of entities to load. The service class or a postprocessor
+    // may prevent entities from loading here by pre-populating the 'entity'
+    // property on results.
+    $ids = array();
     foreach ($results as $id => $result) {
-      if (!empty($result['entity'])) {
-        $wrapper = entity_metadata_wrapper($this->index->entity_type, $result['entity']);
-        $fields = $this->extractFields($wrapper, $this->fields);
-        if ($fields) {
-          $view->result[$id] = $fields;
-          $view->result[$id]['search_api_relevance'] = $result['score'];
-        }
-        else {
-          $ids[] = $id;
-        }
-      }
-      else {
+      if (empty($result['entity'])) {
         $ids[] = $id;
       }
     }
-    if (empty($ids)) {
-      return;
+
+    // Load entities.
+    $entities = array();
+    if (!empty($ids)) {
+      $entities = entity_load($this->index->entity_type, $ids);
     }
 
-    $entities = entity_load($this->index->entity_type, $ids);
-    foreach ($entities as $id => $entity) {
-      try {
-        if (!is_object($entity)) {
-          continue;
-        }
-        $wrapper = entity_metadata_wrapper($this->index->entity_type, $entity);
-        $view->result[$id]['entity'] = $entity;
-        $view->result[$id]['search_api_relevance'] = $results[$id]['score'];
-        $view->result[$id] += $this->extractFields($wrapper, $this->fields);
+    // Add each search result to the Views result set.
+    foreach ($results as $id => $result) {
+      // If we loaded an entity for this result, include it.
+      if (isset($entities[$id])) {
+        $result['entity'] = $entities[$id];
       }
-      catch (Exception $e) {
-        continue;
+
+      // Extract entity properties.
+      $entity_fields = array();
+      if (!empty($result['entity'])) {
+        $wrapper = entity_metadata_wrapper($this->index->entity_type, $result['entity']);
+        $entity_fields = $this->extractFields($wrapper, $this->fields);
       }
+
+      // Gather any fields from the search results.
+      $result['fields'] = (is_array($result['fields']) ? $result['fields'] : array());
+
+      // Merge the fields together, prioritizing the search result properties,
+      // then field values included with the search results, then entity
+      // property values.
+      $result = array_merge($entity_fields, $result['fields'], $result);
+
+      // Hand the merged results over to Views.
+      $view->result[$id] = (object) $result;
     }
   }
