diff --git a/src/NzbDrone.Common.Test/DiskTests/DiskTransferServiceFixture.cs b/src/NzbDrone.Common.Test/DiskTests/DiskTransferServiceFixture.cs
index 56338080d..8013fc12e 100644
--- a/src/NzbDrone.Common.Test/DiskTests/DiskTransferServiceFixture.cs
+++ b/src/NzbDrone.Common.Test/DiskTests/DiskTransferServiceFixture.cs
@@ -352,6 +352,26 @@ namespace NzbDrone.Common.Test.DiskTests
                 .Verify(v => v.DeleteFile(_targetPath), Times.Once());
         }
 
+        [Test]
+        public void should_not_rollback_move_on_partial_if_destination_already_exists()
+        {
+            Mocker.GetMock<IDiskProvider>()
+                .Setup(v => v.MoveFile(_sourcePath, _targetPath, false))
+                .Callback(() =>
+                {
+                    WithExistingFile(_targetPath, true, 900);
+                });
+
+            Mocker.GetMock<IDiskProvider>()
+                .Setup(v => v.MoveFile(_sourcePath, _targetPath, false))
+                .Throws(new FileAlreadyExistsException("File already exists", _targetPath));
+
+            Assert.Throws<FileAlreadyExistsException>(() => Subject.TransferFile(_sourcePath, _targetPath, TransferMode.Move));
+
+            Mocker.GetMock<IDiskProvider>()
+                .Verify(v => v.DeleteFile(_targetPath), Times.Never());
+        }
+
         [Test]
         public void should_log_error_if_rollback_partialmove_fails()
         {
diff --git a/src/NzbDrone.Common/Disk/DiskTransferService.cs b/src/NzbDrone.Common/Disk/DiskTransferService.cs
index a9ea0ff8f..7b0fac952 100644
--- a/src/NzbDrone.Common/Disk/DiskTransferService.cs
+++ b/src/NzbDrone.Common/Disk/DiskTransferService.cs
@@ -501,9 +501,13 @@ namespace NzbDrone.Common.Disk
                     throw new IOException(string.Format("File move incomplete, data loss may have occurred. [{0}] was {1} bytes long instead of the expected {2}.", targetPath, targetSize, originalSize));
                 }
             }
-            catch
+            catch (Exception ex)
             {
-                RollbackPartialMove(sourcePath, targetPath);
+                if (ex is not FileAlreadyExistsException)
+                {
+                    RollbackPartialMove(sourcePath, targetPath);
+                }
+
                 throw;
             }
         }