diff --git a/src/Composer/Downloader/ArchiveDownloader.php b/src/Composer/Downloader/ArchiveDownloader.php
index <HASH>..<HASH> 100644
--- a/src/Composer/Downloader/ArchiveDownloader.php
+++ b/src/Composer/Downloader/ArchiveDownloader.php
@@ -29,7 +29,9 @@ abstract class ArchiveDownloader extends FileDownloader
     public function download(PackageInterface $package, $path, PackageInterface $prevPackage = null, $output = true)
     {
         $res = parent::download($package, $path, $prevPackage, $output);
-        if (is_dir($path) && !$this->filesystem->isDirEmpty($path)) {
+
+        // if not downgrading and the dir already exists it seems we have an inconsistent state in the vendor dir and the user should fix it
+        if (!$prevPackage && is_dir($path) && !$this->filesystem->isDirEmpty($path)) {
             throw new IrrecoverableDownloadException('Expected empty path to extract '.$package.' into but directory exists: '.$path);
         }
Allow downgrades to go through even though the target dir for archive extraction exists