diff --git a/modules/geofield_map/geofield_map.admin.inc b/modules/geofield_map/geofield_map.admin.inc
new file mode 100644
index 0000000..3f3d7d4
--- /dev/null
+++ b/modules/geofield_map/geofield_map.admin.inc
@@ -0,0 +1,64 @@
+<?php
+
+/**
+ * API Key settings form callback.
+ */
+function geofield_map_admin_settings($form, &$form_state) {
+  $form['geofield_map_google_auth_method'] = array(
+    '#type' => 'select',
+    '#title' => t('Google API Authentication Method'),
+    '#description' => t(''),
+    '#default_value' => variable_get('geofield_map_google_auth_method', GEOFIELD_MAP_GOOGLE_AUTH_KEY),
+    '#options' => array(
+      GEOFIELD_MAP_GOOGLE_AUTH_KEY => t('API Key'),
+      GEOFIELD_MAP_GOOGLE_AUTH_WORK => t('Google Maps API for Work'),
+    ),
+  );
+
+  $form['geofield_map_google_apikey'] = array(
+    '#type' => 'textfield',
+    '#title' => t('Google Maps API Key'),
+    '#description' => t('Obtain a Google Maps Javascript API key at <a href="@link">@link</a>', array(
+      '@link' => 'https://developers.google.com/maps/documentation/javascript/get-api-key',
+    )),
+    '#default_value' => variable_get('geofield_map_google_apikey', ''),
+    '#required' => FALSE,
+    '#states' => array(
+      'visible' => array(
+        ':input[name="geofield_map_google_auth_method"]' => array('value' => GEOFIELD_MAP_GOOGLE_AUTH_KEY),
+      ),
+    ),
+  );
+
+  $form['geofield_map_google_client_id'] = array(
+    '#type' => 'textfield',
+    '#title' => t('Google Maps API for Work: Client ID'),
+    '#description' => t('For more information, visit: <a href="@link">@link</a>', array(
+      '@link' => 'https://developers.google.com/maps/documentation/javascript/get-api-key#client-id',
+    )),
+    '#default_value' => variable_get('geofield_map_google_client_id', ''),
+    '#required' => FALSE,
+    '#states' => array(
+      'visible' => array(
+        ':input[name="geofield_map_google_auth_method"]' => array('value' => GEOFIELD_MAP_GOOGLE_AUTH_WORK),
+      ),
+    ),
+  );
+
+  $form['geofield_map_google_private_key'] = array(
+    '#type' => 'textfield',
+    '#title' => t('Google Maps API for Work: Private/Signing Key '),
+    '#description' => t('For more information, visit: <a href="@link">@link</a>', array(
+      '@link' => 'https://developers.google.com/maps/documentation/business/webservices/auth#how_do_i_get_my_signing_key',
+    )),
+    '#default_value' => variable_get('geofield_map_google_private_key', ''),
+    '#required' => FALSE,
+    '#states' => array(
+      'visible' => array(
+        ':input[name="geofield_map_google_auth_method"]' => array('value' => GEOFIELD_MAP_GOOGLE_AUTH_WORK),
+      ),
+    ),
+  );
+
+  return system_settings_form($form);
+}
diff --git a/modules/geofield_map/geofield_map.info b/modules/geofield_map/geofield_map.info
index f703f10..1c77a5c 100644
--- a/modules/geofield_map/geofield_map.info
+++ b/modules/geofield_map/geofield_map.info
@@ -3,6 +3,8 @@ description = Provides a basic mapping interface for Geofields.
 core = 7.x
 dependencies[] = geofield
 
+configure = admin/config/content/geofield_map
+
 files[] = includes/geofield_map.views.inc
 files[] = includes/geofield_map_plugin_style_map.inc
 
diff --git a/modules/geofield_map/geofield_map.install b/modules/geofield_map/geofield_map.install
new file mode 100644
index 0000000..9cd5f32
--- /dev/null
+++ b/modules/geofield_map/geofield_map.install
@@ -0,0 +1,11 @@
+<?php
+
+/**
+ * Implements hook_uninstall().
+ */
+function geofield_map_uninstall() {
+  variable_del('geofield_map_google_auth_method');
+  variable_del('geofield_map_google_apikey');
+  variable_del('geofield_map_google_client_id');
+  variable_del('geofield_map_google_private_key');
+}
diff --git a/modules/geofield_map/geofield_map.module b/modules/geofield_map/geofield_map.module
index e22158c..29edbcb 100644
--- a/modules/geofield_map/geofield_map.module
+++ b/modules/geofield_map/geofield_map.module
@@ -4,6 +4,29 @@
 // by the available detail level of each location.
 define('GEOFIELD_MAP_MAX_ZOOM', 22);
 
+// Enumerate options for type of API authentication.
+define('GEOFIELD_MAP_GOOGLE_AUTH_KEY', 1);
+define('GEOFIELD_MAP_GOOGLE_AUTH_WORK', 2);
+
+/**
+ * Implements hook_menu().
+ */
+
+function geofield_map_menu() {
+  $items = array();
+  $items['admin/config/content/geofield_map'] = array(
+    'title' => t('Geofield map settings'),
+    'description' => t('Configuration for API keys.'),
+    'page callback' => 'drupal_get_form',
+    'page arguments' => array('geofield_map_admin_settings'),
+    'file' => 'geofield_map.admin.inc',
+    'access arguments' => array('administer site configuration'),
+    'type' => MENU_NORMAL_ITEM,
+  );
+
+  return $items;
+}
+
 /**
  * Implements hook_views_api().
  */
@@ -99,10 +122,13 @@ function geofield_map_field_formatter_view($entity_type, $entity, $field, $insta
       'class' => 'geofieldMap',
     );
 
+    // Build API url.
+    $api_url = geofield_map_build_api_url();
+
     $element[0] = array(
       '#attached' => array(
         'js' => array(
-          '//maps.googleapis.com/maps/api/js?sensor=false' => array('type' => 'external'),
+          "$api_url" => array('type' => 'external'),
           drupal_get_path('module', 'geofield_map') . '/js/GeoJSON.js',
           drupal_get_path('module', 'geofield_map') . '/js/geofield_map.js',
           array('data' => array('geofieldMap' => $js_settings), 'type' => 'setting'),
@@ -408,3 +434,80 @@ function geofield_map_settings_do($settings) {
   return $map_settings;
 
 }
+
+/**
+ * Builds the javascript maps api url based on authentication method.
+ */
+function geofield_map_build_api_url() {
+  // Google api url.
+  $api_url = '//maps.googleapis.com/maps/api/js';
+  // Array to hold query paramters for the google maps url.
+  // Including version number as it's required for Premium plans.
+  // https://developers.google.com/maps/documentation/javascript/versions
+  $query = array('v' => '3');
+
+  switch (variable_get('geofield_map_google_auth_method')) {
+    case GEOFIELD_MAP_GOOGLE_AUTH_KEY:
+      $key = variable_get('geofield_map_google_apikey', FALSE);
+      if (!empty($key)) {
+        $query['key'] = $key;
+      }
+      break;
+
+    case GEOFIELD_MAP_GOOGLE_AUTH_WORK:
+      $client_id = variable_get('geofield_map_google_client_id', FALSE);
+      $private_key = variable_get('geofield_map_google_private_key', FALSE);
+      if (!empty($client_id)) {
+        $query['client'] = $client_id;
+        if (!empty($private_key)) {
+          $query['signature'] = $private_key;
+	}
+      }
+      break;
+  }
+
+  // Add query params to API url.
+  if (!empty($query)) {
+    $api_url .= '?' . drupal_http_build_query($query);
+  }
+
+  return $api_url;
+}
+
+/**
+* Implementation of hook_requirements().
+*/
+function geofield_map_requirements($phase) {
+  $requirements = array();
+
+  // Whether or not an API key or client id is provided.
+  $key_provided = FALSE;
+
+  switch (variable_get('geofield_map_google_auth_method')) {
+    case GEOFIELD_MAP_GOOGLE_AUTH_KEY:
+      $key = variable_get('geofield_map_google_apikey', FALSE);
+      if (!empty($key)) {
+        $key_provided = TRUE;
+      }
+    break;
+
+    case GEOFIELD_MAP_GOOGLE_AUTH_WORK:
+      $client_id = variable_get('geofield_map_google_client_id', FALSE);
+      if (!empty($client_id)) {
+        $key_provided = TRUE;
+      }
+    break;
+  }
+
+  if (!$key_provided) {
+    $requirements['geofield_map'] = array(
+      'title' => t('Geofield Map'),
+      'severity' => REQUIREMENT_WARNING,
+      'value' => t('Google Maps API key or Client ID was not found. As of 2016/06/22, keyless access is no longer supported and it may impact rendering of maps. For more information visit: <a href="@link">@link</a>', array(
+        '@link' => 'http://googlegeodevelopers.blogspot.ca/2016/06/building-for-scale-updates-to-google.html',
+      )),
+    );
+  }
+
+  return $requirements;
+}
diff --git a/modules/geofield_map/includes/geofield_map_plugin_style_map.inc b/modules/geofield_map/includes/geofield_map_plugin_style_map.inc
index 5aa4c67..054eda1 100644
--- a/modules/geofield_map/includes/geofield_map_plugin_style_map.inc
+++ b/modules/geofield_map/includes/geofield_map_plugin_style_map.inc
@@ -157,7 +157,10 @@ class geofield_map_plugin_style_map extends views_plugin_style {
       drupal_add_js(array('geofieldMap' => $js_settings), 'setting');
     }
 
-    drupal_add_js('//maps.googleapis.com/maps/api/js?sensor=false', 'external');
+    // Build API url.
+    $api_url = geofield_map_build_api_url();
+
+    drupal_add_js($api_url, 'external');
     drupal_add_js(drupal_get_path('module', 'geofield_map') . '/js/GeoJSON.js');
     drupal_add_js(drupal_get_path('module', 'geofield_map') . '/js/geofield_map.js');
     drupal_add_css(drupal_get_path('module', 'geofield_map') . '/css/geofield_map.css');
