diff --git a/geocoding/google.inc b/geocoding/google.inc
index 8f5d5bf..02c60eb 100644
--- a/geocoding/google.inc
+++ b/geocoding/google.inc
@@ -110,96 +110,28 @@ function google_geocode_info() {
  *   an associative array with keys 'lat' and 'lon' containing the coordinates.
  */
 function google_geocode_location($location = array()) {
-
-  if (function_exists('gmap_get_key')) {
-    $key = gmap_get_key();
-  }
-  else {
-    $key = variable_get('location_geocode_google_apikey', '');
-  }
-
+  
   $query = array(
-    'key' => $key,
-    'sensor' => 'false', // Required by TOS.
-    'output' => 'xml',
-    //'ll' => 0,
-    //'spn' => 0,
-    'gl' => $location['country'],
-    'q' => _google_geocode_flatten($location),
+    'sensor' => 'false',
+    'components' => 'country:' . $location['country'],
+    'address' => _google_geocode_flatten($location),
   );
 
-  $url = url('http://maps.google.com/maps/geo', array(
+  $url = url('https://maps.googleapis.com/maps/api/geocode/json', array(
     'query' => $query,
     'external' => TRUE,
   ));
 
   $http_reply = drupal_http_request($url);
+  $geocode_data = json_decode($http_reply->data);
 
-  $status_code_match = array();
-  preg_match('/<code>(.*)<\/code>/', $http_reply->data, $status_code_match);
-  $status_code = $status_code_match[1];
-  if ($status_code != 200) {
-    watchdog('location', 'Google geocoding returned status code: %status_code', array('%status_code' => $status_code));
+  if ($geocode_data->status != 'OK') {
+    watchdog('location', 'Google geocoding returned status code: %status_code', array('%status_code' => $geocode_data->status));
     return NULL;
   }
 
-  $accuracy_code_match = array();
-  preg_match('/Accuracy="([0-9])"/', $http_reply->data, $accuracy_code_match);
-  $accuracy_code = $accuracy_code_match[1];
-  $min_accuracy = variable_get('location_geocode_' . $location['country'] . 'google_accuracy_code', variable_get('location_geocode_google_minimum_accuracy', '3'));
-  if ($accuracy_code < $min_accuracy) {
-    watchdog('location', 'Google geocoding result for %country did not meet the minimum accuracy level of %min_accuracy. Result accuracy: %accuracy_code', array('%country' => $location['country'], '%min_accuracy' => $min_accuracy, '%accuracy_code' => $accuracy_code));
-    return NULL;
-  }
-
-  $latlon_match = array();
-  preg_match('/<coordinates>(.*)<\/coordinates>/', $http_reply->data, $latlon_match);
-
-  $latlon_exploded = explode(',', $latlon_match[1]);
-
-  return array('lat' => $latlon_exploded[1], 'lon' => $latlon_exploded[0]);
-}
-
-/**
- * General settings for this geocoder.
- */
-function google_geocode_settings() {
-  $form = array();
-  $key = '';
-  if (function_exists('gmap_get_key')) {
-    $key = gmap_get_key();
-  }
-
-  if (!empty($key)) {
-    $form['location_geocode_google_apikey'] = array(
-      '#type' => 'item',
-      '#title' => t('Google Maps API Key'),
-      '#value' => $key,
-      '#description' => t('The key in use was automatically provided by GMap.'),
-    );
-  }
-  else {
-    $form['location_geocode_google_apikey'] = array(
-      '#type' => 'textfield',
-      '#title' => t('Google Maps API Key'),
-      '#size' => 64,
-      '#maxlength' => 128,
-      '#default_value' => variable_get('location_geocode_google_apikey', ''),
-      '#description' => t('In order to use the Google Maps API geocoding web-service, you will need a Google Maps API Key.  You can obtain one at the !sign_up_link for the !google_maps_api.  PLEASE NOTE: You will <em>not</em> have to re-enter your API key for each country for which you have selected Google Maps for geocoding.  This setting is global.', array('!sign_up_link' => '<a href="http://www.google.com/apis/maps/signup.html">sign-up page</a>', '!google_maps_api' => '<a href="http://www.google.com/apis/maps/">Google Maps API</a>'))
-    );
-  }
-
-  $country = arg(4);
-  if ($country) {
-    $form['location_geocode_' . $country . '_google_accuracy_code'] = array(
-      '#type' => 'select',
-      '#title' => t('Google Maps Geocoding Accuracy for %country', array('%country' => $country ) ),
-      '#default_value' => variable_get('location_geocode_' . $country . '_google_accuracy_code', variable_get('location_geocode_google_minimum_accuracy', '3')),
-      '#options' => location_google_geocode_accuracy_codes(),
-      '#description' => t('The minimum required accuracy for the geolocation data to be saved.'),
-    );
-  }
-  return $form;
+  $coordinates = $geocode_data->results[0]->geometry->location;
+  return array('lat' => $coordinates->lat, 'lon' => $coordinates->lng);
 }
 
 function _google_geocode_flatten($location = array()) {
diff --git a/location.admin.inc b/location.admin.inc
index 37200bc..0ce248a 100644
--- a/location.admin.inc
+++ b/location.admin.inc
@@ -157,13 +157,6 @@ function location_map_link_options_form() {
 function location_geocoding_options_form() {
   $form = array();
 
-  $form['location_geocode_google_minimum_accuracy'] = array(
-    '#type' => 'select',
-    '#title' => t('Google Maps geocoding minimum accuracy'),
-    '#options' => location_google_geocode_accuracy_codes(),
-    '#default_value' => variable_get('location_geocode_google_minimum_accuracy', '3'),
-    '#description' => t('The Google Maps geocoding API returns results with a given accuracy. Any responses below this minimum accuracy will be ignored. See a !accuracy_values_link.', array('!accuracy_values_link' => '<a href="http://code.google.com/apis/maps/documentation/reference.html#GGeoAddressAccuracy">description of these values</a>'))
-  );
   $form['countries'] = array();
 
   // First, we build two arrays to help us figure out on the fly whether a specific country is covered by a multi-country geocoder,
@@ -276,7 +269,7 @@ function location_geocoding_options_form_submit($form, &$form_state) {
   $general_geocoders_in_use = array();
 
   foreach ($form_state['values'] as $key => $value) {
-    if (substr($key, 0, 17) == 'location_geocode_'  && $key != 'location_geocode_google_minimum_accuracy') {
+    if (substr($key, 0, 17) == 'location_geocode_') {
       if (in_array($value, $general_geocoders)) {
         $general_geocoders_in_use[$value] = $value;
         variable_set($key, $value);
@@ -284,7 +277,6 @@ function location_geocoding_options_form_submit($form, &$form_state) {
     }
   }
 
-  variable_set('location_geocode_google_minimum_accuracy', $form_state['values']['location_geocode_google_minimum_accuracy']);
   variable_set('location_general_geocoders_in_use', $general_geocoders_in_use);
 }
 
@@ -310,7 +302,7 @@ function theme_location_map_link_options($form) {
 }
 
 function theme_location_geocoding_options($form) {
-  $output = drupal_render($form['location_geocode_google_minimum_accuracy']);
+  $output = '';
   $header = array(
     array('align' => 'center', 'data' => '<center>'. t('Country') .'</center>'),
     array('align' => 'center', 'data' => '<center>'. t('Options') .'</center>'),
