diff --git search_api.module search_api.module
index 07b9a1b..3f34fdd 100644
--- search_api.module
+++ search_api.module
@@ -1038,36 +1038,36 @@ function search_api_extract_inner_type($type) {
  *   The $fields array with additional "value" and "original_type" keys set.
  */
 function search_api_extract_fields(EntityMetadataWrapper $wrapper, array $fields, array $value_options = array()) {
-  // If $wrapper is a list of entities, we have to aggregate their field values.
-  $wrapper_info = $wrapper->info();
-  if (search_api_is_list_type($wrapper_info['type'])) {
-    foreach ($fields as $field => &$info) {
-      $info['value'] = array();
-      $info['original_type'] = $info['type'];
-    }
-    unset($info);
-    foreach ($wrapper as $i => $w) {
-      $nested_fields = search_api_extract_fields($w, $fields);
-      foreach ($nested_fields as $field => $info) {
-        if (isset($info['value'])) {
-          $fields[$field]['value'][] = $info['value'];
-        }
-        if (isset($info['original_type'])) {
-          $fields[$field]['original_type'] = $info['original_type'];
+  try {
+    // If $wrapper is a list of entities, we have to aggregate their field values.
+    $wrapper_info = $wrapper->info();
+    if (search_api_is_list_type($wrapper_info['type'])) {
+      foreach ($fields as $field => &$info) {
+        $info['value'] = array();
+        $info['original_type'] = $info['type'];
+      }
+      unset($info);
+      foreach ($wrapper as $i => $w) {
+        $nested_fields = search_api_extract_fields($w, $fields);
+        foreach ($nested_fields as $field => $info) {
+          if (isset($info['value'])) {
+            $fields[$field]['value'][] = $info['value'];
+          }
+          if (isset($info['original_type'])) {
+            $fields[$field]['original_type'] = $info['original_type'];
+          }
         }
       }
+      return $fields;
     }
-    return $fields;
-  }
 
-  $nested = array();
-  foreach ($fields as $field => &$info) {
-    $pos = strpos($field, ':');
-    if ($pos === FALSE) {
-      // Set "defaults" in case an error occurs later.
-      $info['value'] = NULL;
-      $info['original_type'] = $info['type'];
-      try {
+    $nested = array();
+    foreach ($fields as $field => &$info) {
+      $pos = strpos($field, ':');
+      if ($pos === FALSE) {
+        // Set "defaults" in case an error occurs later.
+        $info['value'] = NULL;
+        $info['original_type'] = $info['type'];
         $info['value'] = $wrapper->$field->value($value_options);
         if (search_api_is_text_type($info['type']) && $wrapper->$field->optionsList('view')) {
           _search_api_add_option_values($info['value'], $wrapper->$field->optionsList('view'));
@@ -1075,32 +1075,33 @@ function search_api_extract_fields(EntityMetadataWrapper $wrapper, array $fields
         $property_info = $wrapper->$field->info();
         $info['original_type'] = $property_info['type'];
       }
-      catch (Exception $e) {
-        // This might happen for entity-typed properties that are NULL, e.g., for comments without parent.
+      else {
+        list($prefix, $key) = explode(':', $field, 2);
+        $nested[$prefix][$key] = $info;
       }
     }
-    else {
-      list($prefix, $key) = explode(':', $field, 2);
-      $nested[$prefix][$key] = $info;
-    }
-  }
-  unset($info);
+    unset($info);
 
-  foreach ($nested as $prefix => $nested_fields) {
-    if (isset($wrapper->$prefix)) {
-      $nested_fields = search_api_extract_fields($wrapper->$prefix, $nested_fields);
-      foreach ($nested_fields as $field => $info) {
-        $fields["$prefix:$field"] = $info;
+    foreach ($nested as $prefix => $nested_fields) {
+      if (isset($wrapper->$prefix)) {
+        $nested_fields = search_api_extract_fields($wrapper->$prefix, $nested_fields);
+        foreach ($nested_fields as $field => $info) {
+          $fields["$prefix:$field"] = $info;
+        }
       }
-    }
-    else {
-      foreach ($nested_fields as $field => &$info) {
-        $info['value'] = NULL;
-        $info['original_type'] = $info['type'];
+      else {
+        foreach ($nested_fields as $field => &$info) {
+          $info['value'] = NULL;
+          $info['original_type'] = $info['type'];
+        }
       }
     }
+    return $fields;
+  }
+  catch (EntityMetadataWrapperException $e) {
+    // This might happen if properties are access from a wrapper containing
+    // a NULL value; e.g. comments without a parent.
   }
-  return $fields;
 }
 
 /**
