diff --git a/src/base/bittorrent/session.cpp b/src/base/bittorrent/session.cpp
index 6b03658a2..07f42888d 100644
--- a/src/base/bittorrent/session.cpp
+++ b/src/base/bittorrent/session.cpp
@@ -1424,16 +1424,17 @@ bool Session::deleteTorrent(const QString &hash, bool deleteLocalFiles)
     // Remove it from session
     if (deleteLocalFiles) {
         if (torrent->savePath(true) == torrentTempPath(torrent->hash())) {
-            m_savePathsToRemove[torrent->hash()] = torrent->savePath(true);
+            m_removedTorrents[torrent->hash()] = {torrent->name(), torrent->savePath(true), true};
         }
         else {
             QString rootPath = torrent->rootPath(true);
             if (!rootPath.isEmpty())
-                m_savePathsToRemove[torrent->hash()] = rootPath;
+                m_removedTorrents[torrent->hash()] = {torrent->name(), rootPath, true};
         }
         m_nativeSession->remove_torrent(torrent->nativeHandle(), libt::session::delete_files);
     }
     else {
+        m_removedTorrents[torrent->hash()] = {torrent->name(), "", false};
         QStringList unwantedFiles;
         if (torrent->hasMetadata())
             unwantedFiles = torrent->absoluteFilePathsUnwanted();
@@ -1460,11 +1461,6 @@ bool Session::deleteTorrent(const QString &hash, bool deleteLocalFiles)
     foreach (const QString &file, files)
         Utils::Fs::forceRemove(resumeDataDir.absoluteFilePath(file));
 
-    if (deleteLocalFiles)
-        Logger::instance()->addMessage(tr("'%1' was removed from transfer list and hard disk.", "'xxx.avi' was removed...").arg(torrent->name()));
-    else
-        Logger::instance()->addMessage(tr("'%1' was removed from transfer list.", "'xxx.avi' was removed...").arg(torrent->name()));
-
     delete torrent;
     qDebug("Torrent deleted.");
     return true;
@@ -3380,20 +3376,35 @@ void Session::handleTorrentRemovedAlert(libt::torrent_removed_alert *p)
 {
     if (m_loadedMetadata.contains(p->info_hash))
         emit metadataLoaded(m_loadedMetadata.take(p->info_hash));
+
+    if (m_removedTorrents.contains(p->info_hash)) {
+        const RemovedTorrentData tmpRemovedTorrentData = m_removedTorrents[p->info_hash];
+        if (!tmpRemovedTorrentData.deletesFiles) {
+            LogMsg(tr("'%1' was removed from the transfer list.", "'xxx.avi' was removed...").arg(tmpRemovedTorrentData.name));
+            m_removedTorrents.remove(p->info_hash);
+        }
+    }
 }
 
 void Session::handleTorrentDeletedAlert(libt::torrent_deleted_alert *p)
 {
-    const QString path = m_savePathsToRemove.take(p->info_hash);
-    if (path == torrentTempPath(p->info_hash))
-        Utils::Fs::smartRemoveEmptyFolderTree(path);
+    const RemovedTorrentData tmpRemovedTorrentData = m_removedTorrents.take(p->info_hash);
+    if (tmpRemovedTorrentData.savePathToRemove == torrentTempPath(p->info_hash))
+        Utils::Fs::smartRemoveEmptyFolderTree(tmpRemovedTorrentData.savePathToRemove);
+
+    LogMsg(tr("'%1' was removed from the transfer list and hard disk.", "'xxx.avi' was removed...").arg(tmpRemovedTorrentData.name));
 }
 
 void Session::handleTorrentDeleteFailedAlert(libt::torrent_delete_failed_alert *p)
 {
+    const RemovedTorrentData tmpRemovedTorrentData = m_removedTorrents.take(p->info_hash);
     // libtorrent won't delete the directory if it contains files not listed in the torrent,
     // so we remove the directory ourselves
-    Utils::Fs::smartRemoveEmptyFolderTree(m_savePathsToRemove.take(p->info_hash));
+    Utils::Fs::smartRemoveEmptyFolderTree(tmpRemovedTorrentData.savePathToRemove);
+
+    LogMsg(tr("'%1' was removed from the transfer list but the files couldn't be deleted. Error: %2", "'xxx.avi' was removed...")
+           .arg(tmpRemovedTorrentData.name)
+           .arg(QString::fromLocal8Bit(p->error.message().c_str())), Log::CRITICAL);
 }
 
 void Session::handleMetadataReceivedAlert(libt::metadata_received_alert *p)
diff --git a/src/base/bittorrent/session.h b/src/base/bittorrent/session.h
index 03bb90328..8c99e4358 100644
--- a/src/base/bittorrent/session.h
+++ b/src/base/bittorrent/session.h
@@ -430,6 +430,13 @@ namespace BitTorrent
         void networkConfigurationChange(const QNetworkConfiguration&);
 
     private:
+        struct RemovedTorrentData
+        {
+            QString name;
+            QString savePathToRemove;
+            bool deletesFiles;
+        };
+
         explicit Session(QObject *parent = 0);
         ~Session();
 
@@ -578,7 +585,6 @@ namespace BitTorrent
         QList<BitTorrent::TrackerEntry> m_additionalTrackerList;
         QString m_resumeFolderPath;
         QFile m_resumeFolderLock;
-        QHash<InfoHash, QString> m_savePathsToRemove;
         bool m_useProxy;
 
         QTimer *m_refreshTimer;
@@ -598,6 +604,7 @@ namespace BitTorrent
         QHash<InfoHash, TorrentHandle *> m_torrents;
         QHash<InfoHash, AddTorrentData> m_addingTorrents;
         QHash<QString, AddTorrentParams> m_downloadedTorrents;
+        QHash<InfoHash, RemovedTorrentData> m_removedTorrents;
         TorrentStatusReport m_torrentStatusReport;
         QStringMap m_categories;
 
