diff --git a/core/modules/file/file.module b/core/modules/file/file.module
index a2a5a80..292aa30 100644
--- a/core/modules/file/file.module
+++ b/core/modules/file/file.module
@@ -351,6 +351,17 @@ function file_file_predelete($file) {
 }
 
 /**
+ * Implements hook_user_predelete()
+ */
+function file_user_predelete($account) {
+  // Delete user picture.
+  if (!empty($account->picture)) {
+    file_usage_delete($account->picture, 'user', 'user', $account->uid);
+    file_delete($account->picture);
+  }
+}
+
+/**
  * Render API callback: Expands the managed_file element type.
  *
  * Expands the file type to include Upload and Remove buttons, as well as
diff --git a/core/modules/user/user.test b/core/modules/user/user.test
index 81d3e07..7826065 100644
--- a/core/modules/user/user.test
+++ b/core/modules/user/user.test
@@ -1074,6 +1074,45 @@ class UserPictureTestCase extends DrupalWebTestCase {
     $this->assertEqual($pic_path, (string) $elements[0]['src'], t("User picture source is correct: " . $pic_path . " " . print_r($elements, TRUE)));
   }
 
+  /**
+   * Test that picture is deleted when user account is deleted.
+   */
+  function testUserCancelDeletePicture() {
+    if ($this->_directory_test) {
+      $this->drupalLogin($this->user);
+
+      $image = current($this->drupalGetTestFiles('image'));
+      $info = image_get_info($image->uri);
+
+      // Set new variables: valid dimensions, valid filesize (0 = no limit).
+      $test_dim = ($info['width'] + 10) . 'x' . ($info['height'] + 10);
+      variable_set('user_picture_dimensions', $test_dim);
+      variable_set('user_picture_file_size', 0);
+
+      $pic_path = $this->saveUserPicture($image);
+
+      // Load user object.
+      $account = user_load($this->user->uid, TRUE);
+
+      // Create administrative user to delete account.
+      $admin_user = $this->drupalCreateUser(array('administer users'));
+      $this->drupalLogin($admin_user);
+
+      // Delete regular user.
+      variable_set('user_cancel_method', 'user_cancel_reassign');
+      $this->drupalGet('user/' . $this->user->uid . '/edit');
+      $this->drupalPost(NULL, NULL, t('Cancel account'));
+
+      // Confirm deletion.
+      $this->drupalPost(NULL, NULL, t('Cancel account'));
+
+      $this->assertFalse(file_load($account->picture->fid), 'File is removed from database');
+      // Clear out PHP's file stat cache so we see the current value.
+      clearstatcache();
+      $this->assertFalse(is_file($pic_path), 'File is removed from file system');
+    }
+  }
+
   function saveUserPicture($image) {
     $edit = array('files[picture_upload]' => drupal_realpath($image->uri));
     $this->drupalPost('user/' . $this->user->uid . '/edit', $edit, t('Save'));
