diff --git a/src/qtlibtorrent/qbtsession.cpp b/src/qtlibtorrent/qbtsession.cpp
index b13dcc2..e0a9edc 100755
--- a/src/qtlibtorrent/qbtsession.cpp
+++ b/src/qtlibtorrent/qbtsession.cpp
@@ -1769,7 +1769,7 @@ bool QBtSession::isFilePreviewPossible(const QString &hash) const {
   }
   const unsigned int nbFiles = h.num_files();
   for (unsigned int i=0; i<nbFiles; ++i) {
-    const QString extension = fsutils::fileExtension(h.filename_at(i));
+    const QString extension = fsutils::fileExtension(h.filepath_at(i));
     if (misc::isPreviewable(extension))
       return true;
   }
diff --git a/src/transferlistwidget.cpp b/src/transferlistwidget.cpp
index 0711091..762f35f 100644
--- a/src/transferlistwidget.cpp
+++ b/src/transferlistwidget.cpp
@@ -809,8 +809,14 @@ void TransferListWidget::displayListMenu(const QPoint&)
                 has_pause = true;
             }
         }
-        if (h.has_metadata() && BTSession->isFilePreviewPossible(hash) && !has_preview)
-            has_preview = true;
+        if (!has_preview) {
+            // If the torrent contains many files, don't bother checking if any
+            // of them is previewable. qBittorrent might hang while doing so.
+            if (h.num_files() > 100)
+                has_preview = true;
+            else if (h.has_metadata() && BTSession->isFilePreviewPossible(hash))
+                has_preview = true;
+        }
         first = false;
         if (has_pause && has_start && has_preview && one_not_seed) break;
     }
