--- a/geocoder.widget.inc	2016-04-02 22:57:56.000000000 +0100
+++ b/geocoder.widget.inc	2017-03-06 12:34:04.000000000 +0000
@@ -478,36 +478,13 @@
 /**
  * Geocoder Widget - Parse an address field.
  */
-function geocoder_widget_parse_addressfield($field_item) {
-  $address = array();
-
-  $address[] = !empty($field_item['organization']) ? $field_item['organization'] : NULL;
-  $address[] = !empty($field_item['premise']) ? $field_item['premise'] : NULL;
-  $address[] = !empty($field_item['sub_premise']) ? $field_item['sub_premise'] : NULL;
-  $address[] = !empty($field_item['thoroughfare']) ? $field_item['thoroughfare'] : NULL;
-  $address[] = !empty($field_item['locality']) ? $field_item['locality'] : NULL;
-  $address[] = !empty($field_item['administrative_area']) ? $field_item['administrative_area'] : NULL;
-  $address[] = !empty($field_item['sub_administrative_area']) ? $field_item['sub_administrative_area'] : NULL;
-
-  if (!empty($field_item['country'])) {
-    if (module_exists('countries')) {
-      $country = country_load($field_item['country']);
-      $field_item['country'] = $country->name;
-    }
-    else {
-      // Convert country code to country name.
-      include_once DRUPAL_ROOT . '/includes/locale.inc';
-      $countries = country_get_list();
-      if (array_key_exists($field_item['country'], $countries)) {
-        $field_item['country'] = $countries[$field_item['country']];
-      }
-    }
-    $address[] = $field_item['country'];
+function geocoder_widget_parse_addressfield($field_item, $hide_street = FALSE) {
+  $format = array('address');
+  if ($hide_street) {
+    $format[] = 'address-hide-street';
   }
-
-  $address[] = !empty($field_item['postal_code']) ? $field_item['postal_code'] : NULL;
-
-  return implode(',', array_filter($address));
+  $render_array = addressfield_generate($field_item, $format);
+  return str_replace(PHP_EOL, ', ', strip_tags(drupal_render($render_array)));
 }
 
 /**
--- a/plugins/geocoder_handler/google.inc	2016-05-08 21:15:50.000000000 +0100
+++ b/plugins/geocoder_handler/google.inc	2017-03-06 12:39:29.000000000 +0000
@@ -197,6 +197,14 @@
   }
   if ($field['type'] == 'addressfield' && module_exists('addressfield') && !addressfield_field_is_empty($field_item, $field)) {
     $address = geocoder_widget_parse_addressfield($field_item);
+    try {
+      return geocoder_google($address, $options);
+    }
+    catch (Exception $e) {
+      // fall-through if exception
+    }
+    // if no location returned, get address without street and try again
+    $address = geocoder_widget_parse_addressfield($field_item, TRUE);
     return geocoder_google($address, $options);
   }
   if ($field['type'] == 'location') {
