diff --git a/core/modules/user/user.module b/core/modules/user/user.module
index 016fa36..a51d624 100644
--- a/core/modules/user/user.module
+++ b/core/modules/user/user.module
@@ -943,11 +943,14 @@ function user_account_form(&$form, &$form_state) {
     '#weight' => -10,
   );
 
+  // The mail field is NOT required if account originally had no mail set
+  // and the user performing the edit has 'administer users' permission.
+  // This allows users without e-mail address to be edited and deleted.
   $form['account']['mail'] = array(
     '#type' => 'email',
     '#title' => t('E-mail address'),
     '#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 : ''),
   );
 
@@ -1129,7 +1132,7 @@ function user_account_form_validate($form, &$form_state) {
 
   $mail = $form_state['values']['mail'];
 
-  if ((bool) db_select('users')->fields('users', array('uid'))->condition('uid', $account->uid, '<>')->condition('mail', db_like($mail), 'LIKE')->range(0, 1)->execute()->fetchField()) {
+  if (!empty($mail) && (bool) db_select('users')->fields('users', array('uid'))->condition('uid', $account->uid, '<>')->condition('mail', db_like($mail), 'LIKE')->range(0, 1)->execute()->fetchField()) {
     // Format error message dependent on whether the user is logged in or not.
     if ($GLOBALS['user']->uid) {
       form_set_error('mail', t('The e-mail address %email is already taken.', array('%email' => $mail)));
@@ -3782,14 +3785,19 @@ function user_register_submit($form, &$form_state) {
   }
   // No administrator approval required.
   elseif ($account->status || $notify) {
-    $op = $notify ? 'register_admin_created' : 'register_no_approval_required';
-    _user_mail_notify($op, $account);
-    if ($notify) {
-      drupal_set_message(t('A welcome message with further instructions has been e-mailed to the new user <a href="@url">%name</a>.', array('@url' => url($uri['path'], $uri['options']), '%name' => $account->name)));
+    if (empty($account->mail) && $notify) {
+      drupal_set_message(t('The new user <a href="@url">%name</a> was created without an email address, so no welcome message was sent.', array('@url' => url($uri['path'], $uri['options']), '%name' => $account->name)));
     }
     else {
-      drupal_set_message(t('A welcome message with further instructions has been sent to your e-mail address.'));
-      $form_state['redirect'] = '';
+      $op = $notify ? 'register_admin_created' : 'register_no_approval_required';
+      _user_mail_notify($op, $account);
+      if ($notify) {
+        drupal_set_message(t('A welcome message with further instructions has been e-mailed to the new user <a href="@url">%name</a>.', array('@url' => url($uri['path'], $uri['options']), '%name' => $account->name)));
+      }
+      else {
+        drupal_set_message(t('A welcome message with further instructions has been sent to your e-mail address.'));
+        $form_state['redirect'] = '';
+      }
     }
   }
   // Administrator approval required.
diff --git a/core/modules/user/user.test b/core/modules/user/user.test
index 81d3e07..4e71bac 100644
--- a/core/modules/user/user.test
+++ b/core/modules/user/user.test
@@ -785,6 +785,34 @@ class UserCancelTestCase extends DrupalWebTestCase {
   }
 
   /**
+   * Tests deletion of a user account without an e-mail address.
+   */
+  function testUserWithoutEmailCancelByAdmin() {
+    variable_set('user_cancel_method', 'user_cancel_reassign');
+
+    // Create a regular user.
+    $account = $this->drupalCreateUser(array());
+    // This user has no e-mail address.
+    $edit = array('mail' => '');
+    $account = user_save($account, $edit);
+
+    // Create administrative user.
+    $admin_user = $this->drupalCreateUser(array('administer users'));
+    $this->drupalLogin($admin_user);
+
+    // Delete regular user without e-mail address.
+    $this->drupalGet('user/' . $account->uid . '/edit');
+    $this->drupalPost(NULL, NULL, t('Cancel account'));
+    $this->assertRaw(t('Are you sure you want to cancel the account %name?', array('%name' => $account->name)), t('Confirmation form to cancel account displayed.'));
+    $this->assertText(t('Select the method to cancel the account above.'), t('Allows to select account cancellation method.'));
+
+    // Confirm deletion.
+    $this->drupalPost(NULL, NULL, t('Cancel account'));
+    $this->assertRaw(t('%name has been deleted.', array('%name' => $account->name)), t('User deleted.'));
+    $this->assertFalse(user_load($account->uid), t('User is not found in the database.'));
+  }
+
+  /**
    * Create an administrative user and mass-delete other users.
    */
   function testMassUserCancelByAdmin() {
@@ -1690,6 +1718,22 @@ class UserEditTestCase extends DrupalWebTestCase {
     $this->drupalLogin($user1);
     $this->drupalLogout();
   }
+
+  /**
+   * Tests editing of a user account without an e-mail address.
+   */
+  function testUserWithoutEmailEdit() {
+    // Test that an admin can edit users without an e-mail address.
+    $admin = $this->drupalCreateUser(array('administer users'));
+    $this->drupalLogin($admin);
+    // Create a regular user.
+    $user1 = $this->drupalCreateUser(array());
+    // This user has no e-mail address.
+    $edit = array('mail' => '');
+    $user1 = user_save($user1, $edit);
+    $this->drupalPost("user/$user1->uid/edit", $edit, t('Save'));
+    $this->assertRaw(t("The changes have been saved."));
+  }
 }
 
 /**
