diff --git a/recaptcha.admin.inc b/recaptcha.admin.inc
index 60fb9a9..043a780 100644
--- a/recaptcha.admin.inc
+++ b/recaptcha.admin.inc
@@ -13,22 +13,40 @@ function recaptcha_admin_settings() {
   _recaptcha_load_library();
 
   $form = array();
-  $form['recaptcha_public_key'] = array(
-    '#type' => 'textfield',
-    '#title' => t('Public Key'),
-    '#default_value' => variable_get('recaptcha_public_key', ''),
-    '#maxlength' => 40,
-    '#description' => t('The public key given to you when you <a href="@url" target="_blank">registered at reCAPTCHA.net</a>.', array('@url' => url(recaptcha_get_signup_url($_SERVER['SERVER_NAME'], variable_get('site_name', ''))))),
-    '#required' => TRUE,
-   );
-  $form['recaptcha_private_key'] = array(
-    '#type' => 'textfield',
-    '#title' => t('Private Key'),
-    '#default_value' => variable_get('recaptcha_private_key', ''),
-    '#maxlength' => 40,
-    '#description' => t('The private key given to you when you <a href="@url" target="_blank">registered at reCAPTCHA.net</a>.', array('@url' => url(recaptcha_get_signup_url($_SERVER['SERVER_NAME'], variable_get('site_name', ''))))),
-    '#required' => TRUE,
-  );
+  if (module_exists('keys')) {
+    $form['recaptcha_public_key'] = array(
+      '#type' => 'textfield',
+      '#title' => t('Public Key'),
+      '#default_value' => _recaptcha_get_key('public'),
+      '#description' => t('The public key given to you when you <a href="@url" target="_blank">registered at reCAPTCHA.net</a>.', array('@url' => url(recaptcha_get_signup_url($_SERVER['SERVER_NAME'], variable_get('site_name', ''))))) . '<br />' . t('Managed by <a href="@url">Keys</a>.', array('@url' => url('admin/settings/keys'))),
+      '#disabled' => TRUE,
+     );
+    $form['recaptcha_private_key'] = array(
+      '#type' => 'textfield',
+      '#title' => t('Private Key'),
+      '#default_value' => _recaptcha_get_key('private'),
+      '#description' => t('The private key given to you when you <a href="@url" target="_blank">registered at reCAPTCHA.net</a>.', array('@url' => url(recaptcha_get_signup_url($_SERVER['SERVER_NAME'], variable_get('site_name', ''))))) . '<br />' . t('Managed by <a href="@url">Keys</a>.', array('@url' => url('admin/settings/keys'))),
+      '#disabled' => TRUE,
+    );
+  }
+  else {
+    $form['recaptcha_public_key'] = array(
+      '#type' => 'textfield',
+      '#title' => t('Public Key'),
+      '#default_value' => variable_get('recaptcha_public_key', ''),
+      '#maxlength' => 40,
+      '#description' => t('The public key given to you when you <a href="@url" target="_blank">registered at reCAPTCHA.net</a>.', array('@url' => url(recaptcha_get_signup_url($_SERVER['SERVER_NAME'], variable_get('site_name', ''))))),
+      '#required' => TRUE,
+     );
+    $form['recaptcha_private_key'] = array(
+      '#type' => 'textfield',
+      '#title' => t('Private Key'),
+      '#default_value' => variable_get('recaptcha_private_key', ''),
+      '#maxlength' => 40,
+      '#description' => t('The private key given to you when you <a href="@url" target="_blank">registered at reCAPTCHA.net</a>.', array('@url' => url(recaptcha_get_signup_url($_SERVER['SERVER_NAME'], variable_get('site_name', ''))))),
+      '#required' => TRUE,
+    );
+  }
   $form['recaptcha_secure_connection'] = array(
     '#type' => 'checkbox',
     '#title' => t('Secure Connection'),
diff --git a/recaptcha.module b/recaptcha.module
index d1cd6ad..177fc88 100644
--- a/recaptcha.module
+++ b/recaptcha.module
@@ -56,6 +56,22 @@ function recaptcha_perm() {
 }
 
 /**
+ * Implementation of hook_keys_service().
+ */
+function recaptcha_keys_service() {
+  return array(
+    'recaptcha_public_key' => array(
+      'name' => t('ReCaptcha public key'),
+      'description' => t('ReCaptcha API Public Key')
+    ),
+    'recaptcha_private_key' => array(
+      'name' => t('ReCaptcha private key'),
+      'description' => t('ReCaptcha API Private Key')
+    )
+  );
+}
+
+/**
  * Implementation of hook_captcha().
  */
 function recaptcha_captcha() {
@@ -83,7 +99,7 @@ function recaptcha_captcha() {
         $recaptcha_secure_connection = variable_get('recaptcha_secure_connection', FALSE);
         $recaptcha_theme = variable_get('recaptcha_theme', 'red');
         $recaptcha_tabindex = variable_get('recaptcha_tabindex', NULL);
-        $recaptcha_public_key = variable_get('recaptcha_public_key', '');
+        $recaptcha_public_key = _recaptcha_get_key('public');
         $recaptcha_form_value = NULL;
         $recaptcha_ajax_api = variable_get('recaptcha_ajax_api', FALSE);
 
@@ -171,7 +187,7 @@ function recaptcha_captcha_validation($solution = NULL, $response = NULL) {
   global $user;
   if ($response == 'reCAPTCHA' && isset($_POST['recaptcha_challenge_field']) && isset($_POST['recaptcha_response_field'])) {
     $resp = recaptcha_check_answer(
-      variable_get('recaptcha_private_key', ''),
+      _recaptcha_get_key('private'),
       ip_address(),
       $_POST['recaptcha_challenge_field'],
       $_POST['recaptcha_response_field']
@@ -224,3 +240,15 @@ EOT;
 function _recaptcha_load_library() {
   module_load_include('php', 'recaptcha', 'recaptcha/recaptchalib');
 }
+
+/**
+ * Get public or private key api
+ */
+function _recaptcha_get_key($type = 'public') {
+  if (module_exists('keys')) {
+    return keys_get_key('recaptcha_' . $type .'_key');
+  }
+  else {
+    return variable_get('recaptcha_' . $type . '_key', '');
+  }
+}
