diff --git a/views/ip_geoloc_plugin_style.inc b/views/ip_geoloc_plugin_style.inc
index 0847f97..0954c59 100644
--- a/views/ip_geoloc_plugin_style.inc
+++ b/views/ip_geoloc_plugin_style.inc
@@ -641,7 +641,7 @@ function ip_geoloc_plugin_style_extract_locations($views_plugin_style) {
 
   foreach ($latitudes as $latitude) {
     if (isset($view->field[$latitude])) {
-      $loc_field_names[] = $view->field[$latitude]->definition['field_name'];
+      $loc_field_names[] = $view->field[$latitude]->field;
       $loc_field_aliases[] = $view->field[$latitude]->field_alias;
       // Example: $loc_field_name == 'field_geo'; $loc_field_alias == 'nid';
     }
@@ -670,7 +670,6 @@ function ip_geoloc_plugin_style_extract_locations($views_plugin_style) {
   elseif (isset($views_plugin_style->options['map_options']['separator'])) {
     $separator = filter_xss_admin($views_plugin_style->options['map_options']['separator']);
   }
-  
   foreach ($sets as $set) {
     // Render as a grouping set.
     if (!empty($set['group'])) {
@@ -685,8 +684,28 @@ function ip_geoloc_plugin_style_extract_locations($views_plugin_style) {
 
         $base = _ip_geoloc_plugin_style_get_base1($row, $loc_field_name, $loc_field_alias);
         $location = new stdClass();
+        $is_location = FALSE;
 
         if (_ip_geoloc_plugin_style_extract_lat_lng($location, $row, $latitude, $longitude, $base)) {
+          $is_location = TRUE;
+        }
+        // Search API support.
+        else if (isset($row->_entity_properties)) {
+          $longitude_alias = $view->field[$longitude]->field_alias;
+
+          if (isset($row->_entity_properties[$loc_field_alias])) {
+            $location->latitude  = $row->_entity_properties[$loc_field_alias];
+          }
+          if (isset($row->_entity_properties[$longitude_alias])) {
+            $location->longitude  = $row->_entity_properties[$longitude_alias];
+          }
+
+          if (isset($location->latitude) && isset($location->longitude)) {
+            $is_location = TRUE;
+          }
+        }
+
+        if ($is_location) {
           // Remaining row values go into the balloon.
           if (!empty($views_plugin_style->rendered_fields[$i])) {
             $location->balloon_text = $views_plugin_style->rendered_fields[$i][$group_field];
@@ -729,8 +748,28 @@ function ip_geoloc_plugin_style_extract_locations($views_plugin_style) {
 
           $base = _ip_geoloc_plugin_style_get_base1($row, $loc_field_name, $loc_field_alias);
           $location = new stdClass();
+          $is_location = FALSE;
 
           if (_ip_geoloc_plugin_style_extract_lat_lng($location, $row, $latitude, $longitude, $base)) {
+            $is_location = TRUE;
+          }
+          // Search API support.
+          else if (isset($row->_entity_properties)) {
+            $longitude_alias = $view->field[$longitude]->field_alias;
+
+            if (isset($row->_entity_properties[$loc_field_alias])) {
+              $location->latitude  = $row->_entity_properties[$loc_field_alias];
+            }
+            if (isset($row->_entity_properties[$longitude_alias])) {
+              $location->longitude  = $row->_entity_properties[$longitude_alias];
+            }
+
+            if (isset($location->latitude) && isset($location->longitude)) {
+              $is_location = TRUE;
+            }
+          }
+
+          if ($is_location) {
             // Remaining row values go into the balloon.
             if (!empty($views_plugin_style->rendered_fields[$i])) {
               $location->balloon_text = implode($separator, $views_plugin_style->rendered_fields[$i]);
@@ -746,6 +785,7 @@ function ip_geoloc_plugin_style_extract_locations($views_plugin_style) {
             $locations[$j ? "$i.$j" : $i] = $location;
             $j++;
           }
+
           $loc_field_name = next($loc_field_names);
           $loc_field_alias = next($loc_field_aliases);
         }
@@ -773,7 +813,7 @@ function ip_geoloc_plugin_style_extract_locations($views_plugin_style) {
       '%id' => isset($id) ? " ($id)" : '',
       '%latitudes' => implode(' ' . t('or') . ' ', $latitudes),
     );
-    $msg = ($error_count >= $row_count) 
+    $msg = ($error_count >= $row_count)
       ? t('None of the @total result rows in view %view_title had their %latitudes set. Therefore those rows could not be displayed as locations on the map. Are you using the correct field names?', $t_args)
       : t('Out of a total of @total result rows in view %view_title, @error_count rows did not have their %latitudes set and therefore could not be shown on the map. The first row that could not be located was row #@first%id. You can improve execution efficiency by using the Views UI to add an "is not empty" filter for %latitudes.', $t_args);
     drupal_set_message($msg);
@@ -1204,7 +1244,7 @@ function ip_geoloc_plugin_style_render_fields($views_plugin_style) {
       // ticked on those fields. So even if Excluded is ticked for this field,
       // we need to theme() it for the potential sake of those other fields.
       $field_value = $field->theme($row);
-      
+
       // Add the special 'views_' fields that normally aren't in the results
       // set to the row, if required for the $differentiator or lat/lon that
       // have math expressions applied through the Views UI.
