diff --git a/modules/openid/openid.api.php b/modules/openid/openid.api.php
index 41f099148a0e86094a7286a156378cc2a274e487..2144945ee350b3f595a323e4a0486f53d14b1e9b 100644
--- a/modules/openid/openid.api.php
+++ b/modules/openid/openid.api.php
@@ -31,6 +31,21 @@ function hook_openid($op, $request) {
   return $request;
 }
 
+/**
+ * Allow modules to act upon a successful OpenID login.
+ *
+ * @param $response
+ *   Response values from the OpenID Provider.
+ * @param $account
+ *   The Drupal user account that logged in
+ *
+ */
+function hook_openid_response($response, $account) {
+  if (isset($response['openid.ns.ax'])) {
+    _mymodule_store_ax_fields($response, $account);
+  }
+}
+
 /**
  * @} End of "addtogroup hooks".
  */
diff --git a/modules/openid/openid.module b/modules/openid/openid.module
index c1a02667265afdb23af14c9da421ea0ca96d575b..df83954973abae68b13e5c0a2a633f2bf6e34e24 100644
--- a/modules/openid/openid.module
+++ b/modules/openid/openid.module
@@ -418,6 +418,8 @@ function openid_authentication($response) {
         // Load global $user and perform final login tasks.
         $form_state['uid'] = $account->uid;
         user_login_submit(array(), $form_state);
+        // Let other modules act on OpenID login
+        module_invoke_all('openid_response', $response, $account);
       }
     }
     else {
@@ -458,6 +460,8 @@ function openid_authentication($response) {
       // Load global $user and perform final login tasks.
       $form_state['uid'] = $account->uid;
       user_login_submit(array(), $form_state);
+      // Let other modules act on OpenID login
+      module_invoke_all('openid_response', $response, $account);
     }
     drupal_redirect_form($form, $form_state['redirect']);
   }