diff --git a/modules/openid/openid.module b/modules/openid/openid.module
index f1885df..74d8358 100644
--- a/modules/openid/openid.module
+++ b/modules/openid/openid.module
@@ -291,7 +291,7 @@ function openid_complete($response = array()) {
  * @return Array of services discovered (including OpenID version, endpoint
  * URI, etc).
  */
-function openid_discovery($claimed_id) {
+function openid_discovery(&$claimed_id) {
   module_load_include('inc', 'openid');
   module_load_include('inc', 'openid', 'xrds');
 
@@ -308,6 +308,12 @@ function openid_discovery($claimed_id) {
     $result = drupal_http_request($xrds_url, $headers);
 
     if (!isset($result->error)) {
+
+      // Replace user entered claimed_id if we get 302 "Found" redirect
+      if ($result->code == 302 && !empty($result->redirect_url)) {
+        $claimed_id = $result->redirect_url;
+      }
+
       if (isset($result->headers['Content-Type']) && preg_match("/application\/xrds\+xml/", $result->headers['Content-Type'])) {
         // Parse XML document to find URL
         $services = xrds_parse($result->data);
