diff --git a/src/qtlibtorrent/qbtsession.cpp b/src/qtlibtorrent/qbtsession.cpp
index b13dcc2..23b7b19 100755
--- a/src/qtlibtorrent/qbtsession.cpp
+++ b/src/qtlibtorrent/qbtsession.cpp
@@ -1626,7 +1626,8 @@ void QBtSession::saveTempFastResumeData() {
     try {
       if (!h.is_valid() || !h.has_metadata() /*|| h.is_seed() || h.is_paused()*/) continue;
       if (!h.need_save_resume_data()) continue;
-      if (h.state() == torrent_status::checking_files || h.state() == torrent_status::queued_for_checking || h.has_error()) continue;
+      if (h.state() == torrent_status::checking_files || h.state() == torrent_status::queued_for_checking || h.has_error()
+          || TorrentPersistentData::getHasMissingFiles(h)) continue;
       qDebug("Saving fastresume data for %s", qPrintable(h.name()));
       h.save_resume_data();
     }catch(std::exception &e) {}
@@ -1658,6 +1659,10 @@ void QBtSession::saveFastResumeData() {
       // Actually with should save fast resume data for paused files too
       //if (h.is_paused()) continue;
       if (h.state() == torrent_status::checking_files || h.state() == torrent_status::queued_for_checking || h.has_error()) continue;
+      if (TorrentPersistentData::getHasMissingFiles(h)) {
+        TorrentPersistentData::setHasMissingFiles(h, false);
+        continue;
+      }
       h.save_resume_data();
       ++num_resume_data;
     } catch(libtorrent::invalid_handle&) {}
@@ -2570,7 +2575,7 @@ void QBtSession::handleTorrentPausedAlert(libtorrent::torrent_paused_alert* p) {
   if (p->handle.is_valid()) {
     QTorrentHandle h(p->handle);
     if (!HiddenData::hasData(h.hash())) {
-      if (!h.has_error())
+      if (!h.has_error() && !TorrentPersistentData::getHasMissingFiles(h))
         h.save_resume_data();
       emit pausedTorrent(h);
     }
@@ -2684,11 +2689,11 @@ void QBtSession::handleFastResumeRejectedAlert(libtorrent::fastresume_rejected_a
   QTorrentHandle h(p->handle);
   if (h.is_valid()) {
     qDebug("/!\\ Fast resume failed for %s, reason: %s", qPrintable(h.name()), p->message().c_str());
-    if (p->error.value() == 134 && TorrentPersistentData::isSeed(h.hash()) && h.has_missing_files()) {
+    if (p->error.value() == errors::mismatching_file_size) {
+      // Mismatching file size (files were probably moved)
       const QString hash = h.hash();
-      // Mismatching file size (files were probably moved
       addConsoleMessage(tr("File sizes mismatch for torrent %1, pausing it.").arg(h.name()));
-      TorrentPersistentData::setErrorState(hash, true);
+      TorrentPersistentData::setHasMissingFiles(h, true);
       pauseTorrent(hash);
     } else {
       addConsoleMessage(tr("Fast resume data was rejected for torrent %1, checking again...").arg(h.name()), QString::fromUtf8("red"));
diff --git a/src/qtlibtorrent/qtorrenthandle.cpp b/src/qtlibtorrent/qtorrenthandle.cpp
index 4c06b68..f170e81 100644
--- a/src/qtlibtorrent/qtorrenthandle.cpp
+++ b/src/qtlibtorrent/qtorrenthandle.cpp
@@ -511,7 +511,8 @@ void QTorrentHandle::pause() const
 {
     torrent_handle::auto_managed(false);
     torrent_handle::pause();
-    torrent_handle::save_resume_data();
+    if (!TorrentPersistentData::getHasMissingFiles(*this))
+      torrent_handle::save_resume_data();
 }
 
 void QTorrentHandle::resume() const
diff --git a/src/torrentpersistentdata.cpp b/src/torrentpersistentdata.cpp
index 12cd30c..c5d99f8 100644
--- a/src/torrentpersistentdata.cpp
+++ b/src/torrentpersistentdata.cpp
@@ -396,6 +396,16 @@ void TorrentPersistentData::saveSeedStatus(const QString &hash, const bool seedS
   settings.setValue("torrents", all_data);
 }
 
+void TorrentPersistentData::setHasMissingFiles(const QTorrentHandle &h, bool missing) {
+  QString hash = h.hash();
+  QIniSettings settings(QString::fromUtf8("qBittorrent"), QString::fromUtf8("qBittorrent-resume"));
+  QHash<QString, QVariant> all_data = settings.value("torrents").toHash();
+  QHash<QString, QVariant> data = all_data[hash].toHash();
+  data["has_missing_files"] = missing;
+  all_data[hash] = data;
+  settings.setValue("torrents", all_data);
+}
+
 QString TorrentPersistentData::getSavePath(const QString &hash) {
   QIniSettings settings(QString::fromUtf8("qBittorrent"), QString::fromUtf8("qBittorrent-resume"));
   const QHash<QString, QVariant> all_data = settings.value("torrents").toHash();
@@ -446,3 +456,10 @@ QString TorrentPersistentData::getMagnetUri(const QString &hash) {
   Q_ASSERT(data.value("is_magnet", false).toBool());
   return data.value("magnet_uri").toString();
 }
+
+bool TorrentPersistentData::getHasMissingFiles(const QTorrentHandle &h) {
+  QIniSettings settings(QString::fromUtf8("qBittorrent"), QString::fromUtf8("qBittorrent-resume"));
+  const QHash<QString, QVariant> all_data = settings.value("torrents").toHash();
+  const QHash<QString, QVariant> data = all_data.value(h.hash()).toHash();
+  return data.value("has_missing_files").toBool();
+}
diff --git a/src/torrentpersistentdata.h b/src/torrentpersistentdata.h
index c46eb11..7d2ec27 100644
--- a/src/torrentpersistentdata.h
+++ b/src/torrentpersistentdata.h
@@ -142,6 +142,7 @@ public:
   static void savePriority(const QString &hash, const int &queue_pos);
   static void saveSeedStatus(const QTorrentHandle &h);
   static void saveSeedStatus(const QString &hash, const bool seedStatus);
+  static void setHasMissingFiles(const QTorrentHandle &h, bool missing);
 
   // Getters
   static QString getSavePath(const QString &hash);
@@ -151,6 +152,7 @@ public:
   static bool isSeed(const QString &hash);
   static bool isMagnet(const QString &hash);
   static QString getMagnetUri(const QString &hash);
+  static bool getHasMissingFiles(const QTorrentHandle &h);
 };
 
 #endif // TORRENTPERSISTENTDATA_H
