diff --git a/modules/user/user.module b/modules/user/user.module
index 14e1459..ced5e3a 100644
--- a/modules/user/user.module
+++ b/modules/user/user.module
@@ -980,7 +980,7 @@ function user_account_form(&$form, &$form_state) {
     '#title' => t('E-mail address'),
     '#maxlength' => EMAIL_MAX_LENGTH,
     '#description' => t('A valid e-mail address. All e-mails from the system will be sent to this address. The e-mail address is not made public and will only be used if you wish to receive a new password or wish to receive certain news or notifications by e-mail.'),
-    '#required' => TRUE,
+    '#required' => !(empty($account->mail) && user_access('administer users')),
     '#default_value' => (!$register ? $account->mail : ''),
   );
 
@@ -1166,8 +1166,9 @@ function user_account_form_validate($form, &$form_state) {
     $mail = trim($form_state['values']['mail']);
     form_set_value($form['account']['mail'], $mail, $form_state);
 
-    // Validate the e-mail address, and check if it is taken by an existing user.
-    if ($error = user_validate_mail($form_state['values']['mail'])) {
+    // Validate the e-mail address, and check if it is taken by an existing
+    // user, but only if the field is required.
+    if ($form['account']['mail']['#required'] && ($error = user_validate_mail($form_state['values']['mail']))) {
       form_set_error('mail', $error);
     }
     elseif ((bool) db_select('users')->fields('users', array('uid'))->condition('uid', $account->uid, '<>')->condition('mail', db_like($form_state['values']['mail']), 'LIKE')->range(0, 1)->execute()->fetchField()) {
