diff --git a/modules/openid/openid.inc b/modules/openid/openid.inc
index 74cd7c4940417c2fe3814738e9e9a1cb85f90735..4d4163805a6455686bdf826595fa912ef0420357 100644
--- a/modules/openid/openid.inc
+++ b/modules/openid/openid.inc
@@ -658,22 +658,26 @@ function openid_extract_namespace($response, $extension_namespace, $fallback_pre
  *
  * @param $values
  *   An array as returned by openid_extract_namespace(..., OPENID_NS_AX).
- * @param $aliases
- *   An array of aliases used in the fetch request.
+ * @param $uris
+ *   An array of identifier URIs.
  * @return
  *   An array of values.
  * @see http://openid.net/specs/openid-attribute-exchange-1_0.html#fetch_response
  */
-function openid_extract_ax_values($values, $aliases) {
+function openid_extract_ax_values($values, $uris) {
   $output = array();
-  foreach ($aliases as $alias) {
-    if (isset($values['count.' . $alias])) {
-      for ($i = 1; $i <= $values['count.' . $alias]; $i++) {
-        $output[] = $values['value.' . $alias . '.' . $i];
+  foreach ($values as $key => $value) {
+    if (in_array($value, $uris) && preg_match('/^type\.([^.]+)$/', $key, $matches)) {
+      $alias = $matches[1];
+      if (isset($values['count.' . $alias])) {
+        for ($i = 1; $i <= $values['count.' . $alias]; $i++) {
+          $output[] = $values['value.' . $alias . '.' . $i];
+        }
       }
-    }
-    elseif (isset($values['value.' . $alias])) {
-      $output[] = $values['value.' . $alias];
+      elseif (isset($values['value.' . $alias])) {
+        $output[] = $values['value.' . $alias];
+      }
+      break;
     }
   }
   return $output;
diff --git a/modules/openid/openid.module b/modules/openid/openid.module
index a6f2cd6d07d615b16683b595ec47e8e3ab73c0eb..9a6e7edfb706e6ed3cc8f4a71718515920f128a5 100644
--- a/modules/openid/openid.module
+++ b/modules/openid/openid.module
@@ -175,7 +175,7 @@ function openid_form_user_register_form_alter(&$form, &$form_state) {
       // Use the nickname returned by Simple Registration if available.
       $form['account']['name']['#default_value'] = $sreg_values['nickname'];
     }
-    elseif ($ax_name_values = openid_extract_ax_values($ax_values, array('name_ao', 'name_son'))) {
+    elseif ($ax_name_values = openid_extract_ax_values($ax_values, array('http://axschema.org/namePerson/friendly', 'http://schema.openid.net/namePerson/friendly'))) {
       // Else, use the first nickname returned by AX if available.
       $form['account']['name']['#default_value'] = current($ax_name_values);
     }
@@ -187,7 +187,7 @@ function openid_form_user_register_form_alter(&$form, &$form_state) {
       // Use the email returned by Simple Registration if available.
       $form['account']['mail']['#default_value'] = $sreg_values['email'];
     }
-    elseif ($ax_mail_values = openid_extract_ax_values($ax_values, array('mail_ao', 'mail_son'))) {
+    elseif ($ax_mail_values = openid_extract_ax_values($ax_values, array('http://axschema.org/contact/email', 'http://schema.openid.net/contact/email'))) {
       // Else, use the first nickname returned by AX if available.
       $form['account']['mail']['#default_value'] = current($ax_mail_values);
     }
diff --git a/modules/openid/openid.test b/modules/openid/openid.test
index 49f390b12fa299dc6da523877e2296ff8f6b12a4..cf90161fd7a5dd496523a1484b64e2f7d2a593cc 100644
--- a/modules/openid/openid.test
+++ b/modules/openid/openid.test
@@ -392,9 +392,11 @@ class OpenIDRegistrationTestCase extends OpenIDWebTestCase {
     // Tell openid_test.module to respond with these AX fields.
     variable_set('openid_test_response', array(
       'openid.ns.ext123' => 'http://openid.net/srv/ax/1.0',
-      'openid.ext123.value.mail_ao' => 'john@example.com',
-      'openid.ext123.count.name_son' => '1',
-      'openid.ext123.value.name_son.1' => 'john',
+      'openid.ext123.type.mail456' => 'http://axschema.org/contact/email',
+      'openid.ext123.value.mail456' => 'john@example.com',
+      'openid.ext123.type.name789' => 'http://schema.openid.net/namePerson/friendly',
+      'openid.ext123.count.name789' => '1',
+      'openid.ext123.value.name789.1' => 'john',
     ));
 
     // Use a User-supplied Identity that is the URL of an XRDS document.