diff --git a/file_entity.pages.inc b/file_entity.pages.inc
index e20367a..8136f5c 100644
--- a/file_entity.pages.inc
+++ b/file_entity.pages.inc
@@ -729,7 +729,10 @@ function file_entity_edit_submit($form, &$form_state) {
   if (!empty($form_state['values']['replace_upload'])) {
     $replacement = $form_state['values']['replace_upload'];
     // Move file from temp to permanent home.
-    file_unmanaged_copy($replacement->uri, $file->uri, FILE_EXISTS_REPLACE);
+    if (file_unmanaged_copy($replacement->uri, $file->uri, FILE_EXISTS_REPLACE)) {
+      // @todo Add watchdog() about replaced file here?
+      file_delete($replacement);
+    }
   }
 
   // Run entity form submit handling and save the file.
diff --git a/file_entity.test b/file_entity.test
index acc1092..f173f52 100644
--- a/file_entity.test
+++ b/file_entity.test
@@ -17,10 +17,19 @@ class FileEntityTestHelper extends DrupalWebTestCase {
     parent::setUp($modules);
   }
 
-  protected function setUpFiles() {
+  protected function setUpFiles($defaults = array()) {
+    // Populate defaults array.
+    $defaults += array(
+      'uid' => 1,
+      'status' => FILE_STATUS_PERMANENT,
+    );
+
     $types = array('text', 'image');
     foreach ($types as $type) {
       foreach ($this->drupalGetTestFiles($type) as $file) {
+        foreach ($defaults as $key => $value) {
+          $file->$key = $value;
+        }
         $this->files[$type][] = file_save($file);
       }
     }
@@ -261,7 +270,7 @@ class FileEntityUnitTestCase extends FileEntityTestHelper {
 
   function setUp() {
     parent::setUp();
-    parent::setUpFiles();
+    $this->setUpFiles();
   }
 
   /**
@@ -665,7 +674,7 @@ class FileEntityReplaceTestCase extends FileEntityTestHelper {
 
   function setUp() {
     parent::setUp();
-    parent::setUpFiles();
+    $this->setUpFiles();
   }
 
   /**
@@ -705,7 +714,8 @@ class FileEntityReplaceTestCase extends FileEntityTestHelper {
     $this->assertEqual($file->filename, $original->filename, 'Updated file name did not change.');
     $this->assertNotEqual($file->filesize, $original->filesize, 'Updated file size changed from previous file.');
     $this->assertEqual($file->filesize, $replacement->filesize, 'Updated file size matches uploaded file.');
-    $this->assertEqual(file_get_contents($replacement->uri), file_get_contents($file->uri), 'Updated file contents matches uploaded file.');
+    $this->assertEqual(file_get_contents($file->uri), file_get_contents($replacement->uri), 'Updated file contents matches uploaded file.');
+    $this->assertFalse(entity_load('file', FALSE, array('status' => 0)), 'Temporary file used for replacement was deleted.');
 
     // Get an image file.
     $image = reset($this->files['image']);
@@ -746,7 +756,7 @@ class FileEntityTokenTestCase extends FileEntityTestHelper {
 
   function setUp() {
     parent::setUp();
-    parent::setUpFiles();
+    $this->setUpFiles();
   }
 
   function testFileEntityTokens() {
@@ -800,7 +810,7 @@ class FileEntityTypeTestCase extends FileEntityTestHelper {
 
   function setUp() {
     parent::setUp();
-    parent::setUpFiles();
+    $this->setUpFiles();
   }
 
   /**
@@ -1069,7 +1079,7 @@ class FileEntityAccessTestCase extends FileEntityTestHelper {
 
   function setUp() {
     parent::setUp();
-    parent::setUpFiles();
+    $this->setUpFiles();
   }
 
   /**
@@ -1107,32 +1117,24 @@ class FileEntityAccessTestCase extends FileEntityTestHelper {
     $web_user = $this->drupalCreateUser(array('create files', 'view own files'));
     $this->assertFileEntityAccess(array('view' => FALSE), $file, $web_user);
     $file->uid = $web_user->uid;
-    $file->status = FILE_STATUS_PERMANENT;
-    file_save($file);
     $this->assertFileEntityAccess(array('view' => TRUE), $file, $web_user);
 
     // User can download own files but no other files.
     $web_user = $this->drupalCreateUser(array('create files', 'download own image files'));
     $this->assertFileEntityAccess(array('download' => FALSE), $file, $web_user);
     $file->uid = $web_user->uid;
-    $file->status = FILE_STATUS_PERMANENT;
-    file_save($file);
     $this->assertFileEntityAccess(array('download' => TRUE), $file, $web_user);
 
     // User can update own files but no other files.
     $web_user = $this->drupalCreateUser(array('create files', 'view own files', 'edit own image files'));
     $this->assertFileEntityAccess(array('update' => FALSE), $file, $web_user);
     $file->uid = $web_user->uid;
-    $file->status = FILE_STATUS_PERMANENT;
-    file_save($file);
     $this->assertFileEntityAccess(array('update' => TRUE), $file, $web_user);
 
     // User can delete own files but no other files.
     $web_user = $this->drupalCreateUser(array('create files', 'view own files', 'edit own image files', 'delete own image files'));
     $this->assertFileEntityAccess(array('delete' => FALSE), $file, $web_user);
     $file->uid = $web_user->uid;
-    $file->status = FILE_STATUS_PERMANENT;
-    file_save($file);
     $this->assertFileEntityAccess(array('delete' => TRUE), $file, $web_user);
 
     // User can view any file.
@@ -1172,8 +1174,6 @@ class FileEntityAccessTestCase extends FileEntityTestHelper {
     $this->assertResponse(200, 'Users with access can access the file add page');
 
     $file = reset($this->files['text']);
-    $file->status = FILE_STATUS_PERMANENT;
-    file_save($file);
 
     // This fails.. No clue why but, tested manually and works as should.
     //$web_user = $this->drupalCreateUser(array('view own files'));
@@ -1233,7 +1233,6 @@ class FileEntityAccessTestCase extends FileEntityTestHelper {
       // Create private, permanent files owned by this user only he's an owner.
       if (!empty($case['owner'])) {
         $file = next($this->files['text']);
-        $file->status = FILE_STATUS_PERMANENT;
         $file->uid = $account->uid;
         file_save($file);
         $file = file_move($file, 'private://');
