diff --git a/src/yuzu/game_list.cpp b/src/yuzu/game_list.cpp
index 6b0f0775735ddf11cbdb8f3654727cb5fd7e0dbe..9e585b082a8de46816badaf59a281b30ca952bb2 100644
--- a/src/yuzu/game_list.cpp
+++ b/src/yuzu/game_list.cpp
@@ -265,8 +265,17 @@ void GameList::ValidateEntry(const QModelIndex& item) {
     if (file_path.isEmpty())
         return;
     std::string std_file_path(file_path.toStdString());
-    if (!FileUtil::Exists(std_file_path) || FileUtil::IsDirectory(std_file_path))
+    if (!FileUtil::Exists(std_file_path))
         return;
+    if (FileUtil::IsDirectory(std_file_path)) {
+        QDir dir(std_file_path.c_str());
+        QStringList matching_main = dir.entryList(QStringList("main"), QDir::Files);
+        if (matching_main.size() == 1) {
+            emit GameChosen(dir.path() + DIR_SEP + matching_main[0]);
+        }
+        return;
+    }
+
     // Users usually want to run a diffrent game after closing one
     search_field->clear();
     emit GameChosen(file_path);
@@ -368,10 +377,10 @@ static bool IsExtractedNCAMain(const std::string& file_name) {
     return QFileInfo(file_name.c_str()).fileName() == "main";
 }
 
-static QString FormatGameName(std::string physical_name) {
-    QFileInfo fileInfo(physical_name.c_str());
+static QString FormatGameName(const std::string& physical_name) {
+    QFileInfo file_info(physical_name.c_str());
     if (IsExtractedNCAMain(physical_name)) {
-        return fileInfo.dir().dirName();
+        return file_info.dir().path();
     } else {
         return QString::fromStdString(physical_name);
     }
diff --git a/src/yuzu/main.cpp b/src/yuzu/main.cpp
index e2afe2131440ba3705ff800d8253c2c2b25eb099..97be548d730cc58dfd6f4a1f649565cbee328e5e 100644
--- a/src/yuzu/main.cpp
+++ b/src/yuzu/main.cpp
@@ -13,6 +13,7 @@
 #include <QMessageBox>
 #include <QtGui>
 #include <QtWidgets>
+#include "common/common_paths.h"
 #include "common/logging/backend.h"
 #include "common/logging/filter.h"
 #include "common/logging/log.h"
@@ -568,9 +569,12 @@ void GMainWindow::OnMenuLoadFile() {
 void GMainWindow::OnMenuLoadFolder() {
     QDir dir = QFileDialog::getExistingDirectory(this, tr("Open Extracted ROM Directory"));
 
-    QStringList matchingMain = dir.entryList(QStringList() << "main", QDir::Files);
-    if (matchingMain.size() == 1) {
-        BootGame(matchingMain[0]);
+    QStringList matching_main = dir.entryList(QStringList("main"), QDir::Files);
+    if (matching_main.size() == 1) {
+        BootGame(dir.path() + DIR_SEP + matching_main[0]);
+    } else {
+        QMessageBox::warning(this, tr("Invalid Directory Selected"),
+                             tr("The directory you have selected does not contain a 'main' file."));
     }
 }