diff --git a/modules/user/user.module b/modules/user/user.module
index 14e1459..0e44eeb 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,9 +1166,12 @@ 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'])) {
-      form_set_error('mail', $error);
+    // Only perform email validation if the field is required and not empty.
+    if ($form['account']['mail']['#required'] && !empty($form_state['values']['mail'])) {
+      // Validate the e-mail address, and check if it is taken by an existing user.
+      if ($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()) {
       // Format error message dependent on whether the user is logged in or not.
