diff -u gcg/gcg.module gcg.mine/gcg.module
--- gcg/gcg.module	2008-03-19 01:02:45.000000000 +1100
+++ gcg.mine/gcg.module	2008-05-22 13:04:23.000000000 +1000
@@ -41,11 +41,23 @@
 }
 
 function gcg_settings() {
-  $form['gcg_gmaps_key'] = array('#type' => 'textfield',
-    '#title' => t('Google MAPS API key'),
-    '#default_value' => variable_get('gcg_gmaps_key', ''),
-    '#required' => TRUE,
-  );
+
+  if (module_exists('keys_api')) {
+    $key = keys_api_get_key('gmap', $_SERVER['HTTP_HOST']);
+    if(strlen($key)) {
+      $form['gcg_gmaps_key'] = array('#value' => 'GCG GMAP API Key currently set via keys_api');
+     } else {
+      // @todo: give a link to admin page of key_api
+      $form['gcg_gmaps_key'] = array('#value' => 'Please define GCG GMAP API Key in key_api config');
+    }
+    return $form;
+  } else {
+    $form['gcg_gmaps_key'] = array('#type' => 'textfield',
+      '#title' => t('Google MAPS API key'),
+      '#default_value' => variable_get('gcg_gmaps_key', ''),
+      '#required' => TRUE,
+    );
+  }
   return system_settings_form($form);
 }
 
@@ -77,7 +89,12 @@
   static $primary = NULL;
   static $details = NULL;
 
-  if (!variable_get('gcg_gmaps_key', '')) {
+  $keys_api_key = false;
+  if (module_exists('keys_api')) {
+    $keys_api_key = keys_api_get_key('gmap', $_SERVER['HTTP_HOST']);
+  }
+
+  if (!variable_get('gcg_gmaps_key', '') && !$keys_api_key) {
     $element['config_error']['#value'] = t('You should set a Google MAPS API key to use this form item.');
   } else if ((!$element['#disabled'] || !$element['#gcg_custom_result']) && $element['#gcg_result_format'] != 'full' && $element['#gcg_required_accuracy'] > 1) {
     $element['config_error']['#value'] = t('Invalid accurcy configuration. The user will not be able to submit a valid address.');
@@ -380,7 +397,14 @@
   }
 
   if (is_null($headers)) {
-    drupal_set_html_head('<script src="http://maps.google.com/maps?file=api&v=2&key=' . variable_get('gcg_gmaps_key', '') . '" type="text/javascript"></script>');
+
+    if (module_exists('keys_api')) {
+      $key = keys_api_get_key('gmap', $_SERVER['HTTP_HOST']);
+    } else {
+      $key = variable_get('gcg_gmaps_key', '');
+    }
+    drupal_set_html_head('<script src="http://maps.google.com/maps?file=api&v=2&key=' . $key . '" type="text/javascript"></script>');
+
     drupal_add_js(drupal_get_path('module', 'gcg') .'/misc/gcg.js');
     drupal_add_css(drupal_get_path('module', 'gcg') .'/misc/gcg.css');
     $settings = array('gcg' =>
diff -u gcg/gcg_node.module gcg.mine/gcg_node.module
--- gcg/gcg_node.module	2008-03-20 21:18:54.000000000 +1100
+++ gcg.mine/gcg_node.module	2008-05-22 12:58:07.000000000 +1000
@@ -159,7 +159,11 @@
                 list ($node->gcg_node_address['latitude'], $node->gcg_node_address['longitude']) = gcg_apply_privacy($node->gcg_node_address['latitude'], $node->gcg_node_address['longitude'], $node->gcg_node_address['privacy']);
               }
               if ($conf['mapapi_type'] == 'dynamic') {
-                drupal_set_html_head('<script src="http://maps.google.com/maps?file=api&v=2&key=' . variable_get('gcg_gmaps_key', '') . '" type="text/javascript"></script>');
+                $key = variable_get('gcg_gmaps_key', '');
+                if (module_exists('keys_api')) {
+                  $key = keys_api_get_key('gmap', $_SERVER['HTTP_HOST']);
+                }
+                drupal_set_html_head('<script src="http://maps.google.com/maps?file=api&v=2&key=' . $key . '" type="text/javascript"></script>');
               }
               $settings = array('gcgNode' =>
                 array('onLoad' => $conf['map_onload'],
@@ -175,7 +179,11 @@
                   'protectedAddress' => t('Protected: within @privacy around here.', array('@privacy' => $node->gcg_node_address['privacy'] . 'm')),
                 ));
               if ($conf['mapapi_type'] == 'static') {
-                $settings['gcgNode']['apiKey'] = variable_get('gcg_gmaps_key', '');
+                $key = variable_get('gcg_gmaps_key', '');
+                if (module_exists('keys_api')) {
+                  $key = keys_api_get_key('gmap', $_SERVER['HTTP_HOST']);
+                }
+                $settings['gcgNode']['apiKey'] = $key;
               }
               drupal_add_js($settings, 'setting');
               drupal_add_js(drupal_get_path('module', 'gcg') .'/misc/gcg-node.js');
@@ -243,7 +251,11 @@
               }
               $block['subject'] = t('Content map');
               if ($conf['mapapi_type'] == 'dynamic') {
-                drupal_set_html_head('<script src="http://maps.google.com/maps?file=api&v=2&key=' . variable_get('gcg_gmaps_key', '') . '" type="text/javascript"></script>');
+                $key = variable_get('gcg_gmaps_key', '');
+                if (module_exists('keys_api')) {
+                  $key = keys_api_get_key('gmap', $_SERVER['HTTP_HOST']);
+                }
+                drupal_set_html_head('<script src="http://maps.google.com/maps?file=api&v=2&key=' . $key . '" type="text/javascript"></script>');
               }
               $settings = array('gcgNode' =>
                 array('onLoad' => $conf['map_onload'],
@@ -259,7 +271,11 @@
                   'protectedAddress' => t('Protected: within @privacy around here.', array('@privacy' => $node->gcg_node_address['privacy'] . 'm')),
                 ));
               if ($conf['mapapi_type'] == 'static') {
-                $settings['gcgNode']['apiKey'] = variable_get('gcg_gmaps_key', '');
+                $key = variable_get('gcg_gmaps_key', '');
+                if (module_exists('keys_api')) {
+                  $key = keys_api_get_key('gmap', $_SERVER['HTTP_HOST']);
+                }                
+                $settings['gcgNode']['apiKey'] = $key;
               }
               drupal_add_js($settings, 'setting');
               drupal_add_js(drupal_get_path('module', 'gcg') .'/misc/gcg-node.js');
diff -u gcg/gcg_views.module gcg.mine/gcg_views.module
--- gcg/gcg_views.module	2008-03-19 01:02:45.000000000 +1100
+++ gcg.mine/gcg_views.module	2008-05-22 12:58:07.000000000 +1000
@@ -172,6 +172,9 @@
   
   if (is_null($apikey)) {
     $apikey = variable_get('gcg_gmaps_key', '');
+    if (module_exists('keys_api')) {
+      $apikey = keys_api_get_key('gmap', $_SERVER['HTTP_HOST']);
+    }           
   }
 
   $node = node_load($data->nid);
