diff --git a/src/citra_qt/config.cpp b/src/citra_qt/config.cpp
index 8e247ff5c..981d92a9c 100644
--- a/src/citra_qt/config.cpp
+++ b/src/citra_qt/config.cpp
@@ -7,12 +7,12 @@
 #include <QStringList>
 
 #include "citra_qt/config.h"
+#include "citra_qt/ui_settings.h"
 
 #include "common/file_util.h"
 #include "core/settings.h"
 
 Config::Config() {
-
     // TODO: Don't hardcode the path; let the frontend decide where to put the config files.
     qt_config_loc = FileUtil::GetUserPath(D_CONFIG_IDX) + "qt-config.ini";
     FileUtil::CreateFullPath(qt_config_loc);
@@ -67,6 +67,51 @@ void Config::ReadValues() {
     Settings::values.use_gdbstub = qt_config->value("use_gdbstub", false).toBool();
     Settings::values.gdbstub_port = qt_config->value("gdbstub_port", 24689).toInt();
     qt_config->endGroup();
+
+    qt_config->beginGroup("UI");
+
+    qt_config->beginGroup("UILayout");
+    UISettings::values.geometry = qt_config->value("geometry").toByteArray();
+    UISettings::values.state = qt_config->value("state").toByteArray();
+    UISettings::values.renderwindow_geometry = qt_config->value("geometryRenderWindow").toByteArray();
+    UISettings::values.gamelist_header_state = qt_config->value("gameListHeaderState").toByteArray();
+    UISettings::values.microprofile_geometry = qt_config->value("microProfileDialogGeometry").toByteArray();
+    UISettings::values.microprofile_visible = qt_config->value("microProfileDialogVisible", false).toBool();
+    qt_config->endGroup();
+
+    qt_config->beginGroup("Paths");
+    UISettings::values.roms_path = qt_config->value("romsPath").toString();
+    UISettings::values.symbols_path = qt_config->value("symbolsPath").toString();
+    UISettings::values.gamedir_path = qt_config->value("gameListRootDir", ".").toString();
+    UISettings::values.gamedir_deepscan = qt_config->value("gameListDeepScan", false).toBool();
+    UISettings::values.recent_files = qt_config->value("recentFiles").toStringList();
+    qt_config->endGroup();
+
+    qt_config->beginGroup("Shortcuts");
+    QStringList groups = qt_config->childGroups();
+    for (auto group : groups)
+    {
+        qt_config->beginGroup(group);
+
+        QStringList hotkeys = qt_config->childGroups();
+        for (auto hotkey : hotkeys)
+        {
+            qt_config->beginGroup(hotkey);
+            UISettings::values.shortcuts.push_back(UISettings::Shortcut(group + "/" + hotkey,
+                                                                        UISettings::ContextedShortcut(qt_config->value("KeySeq").toString(),
+                                                                                                      qt_config->value("Context").toInt())));
+            qt_config->endGroup();
+        }
+
+        qt_config->endGroup();
+    }
+    qt_config->endGroup();
+
+    UISettings::values.single_window_mode = qt_config->value("singleWindowMode", true).toBool();
+    UISettings::values.display_titlebar = qt_config->value("displayTitleBars", true).toBool();
+    UISettings::values.first_start = qt_config->value("firstStart", true).toBool();
+
+    qt_config->endGroup();
 }
 
 void Config::SaveValues() {
@@ -107,6 +152,39 @@ void Config::SaveValues() {
     qt_config->setValue("use_gdbstub", Settings::values.use_gdbstub);
     qt_config->setValue("gdbstub_port", Settings::values.gdbstub_port);
     qt_config->endGroup();
+
+    qt_config->beginGroup("UI");
+
+    qt_config->beginGroup("UILayout");
+    qt_config->setValue("geometry", UISettings::values.geometry);
+    qt_config->setValue("state", UISettings::values.state);
+    qt_config->setValue("geometryRenderWindow", UISettings::values.renderwindow_geometry);
+    qt_config->setValue("gameListHeaderState", UISettings::values.gamelist_header_state);
+    qt_config->setValue("microProfileDialogGeometry", UISettings::values.microprofile_geometry);
+    qt_config->setValue("microProfileDialogVisible", UISettings::values.microprofile_visible);
+    qt_config->endGroup();
+
+    qt_config->beginGroup("Paths");
+    qt_config->setValue("romsPath", UISettings::values.roms_path);
+    qt_config->setValue("symbolsPath", UISettings::values.symbols_path);
+    qt_config->setValue("gameListRootDir", UISettings::values.gamedir_path);
+    qt_config->setValue("gameListDeepScan", UISettings::values.gamedir_deepscan);
+    qt_config->setValue("recentFiles", UISettings::values.recent_files);
+    qt_config->endGroup();
+
+    qt_config->beginGroup("Shortcuts");
+    for (auto shortcut : UISettings::values.shortcuts )
+    {
+        qt_config->setValue(shortcut.first + "/KeySeq", shortcut.second.first);
+        qt_config->setValue(shortcut.first + "/Context", shortcut.second.second);
+    }
+    qt_config->endGroup();
+
+    qt_config->setValue("singleWindowMode", UISettings::values.single_window_mode);
+    qt_config->setValue("displayTitleBars", UISettings::values.display_titlebar);
+    qt_config->setValue("firstStart", UISettings::values.first_start);
+
+    qt_config->endGroup();
 }
 
 void Config::Reload() {
diff --git a/src/citra_qt/game_list.cpp b/src/citra_qt/game_list.cpp
index 1f8d69a03..faf057269 100644
--- a/src/citra_qt/game_list.cpp
+++ b/src/citra_qt/game_list.cpp
@@ -8,6 +8,7 @@
 
 #include "game_list.h"
 #include "game_list_p.h"
+#include "ui_settings.h"
 
 #include "core/loader/loader.h"
 
@@ -100,19 +101,15 @@ void GameList::PopulateAsync(const QString& dir_path, bool deep_scan)
     current_worker = std::move(worker);
 }
 
-void GameList::SaveInterfaceLayout(QSettings& settings)
+void GameList::SaveInterfaceLayout()
 {
-    settings.beginGroup("UILayout");
-    settings.setValue("gameListHeaderState", tree_view->header()->saveState());
-    settings.endGroup();
+    UISettings::values.gamelist_header_state = tree_view->header()->saveState();
 }
 
-void GameList::LoadInterfaceLayout(QSettings& settings)
+void GameList::LoadInterfaceLayout()
 {
     auto header = tree_view->header();
-    settings.beginGroup("UILayout");
-    header->restoreState(settings.value("gameListHeaderState").toByteArray());
-    settings.endGroup();
+    header->restoreState(UISettings::values.gamelist_header_state);
 
     item_model->sort(header->sortIndicatorSection(), header->sortIndicatorOrder());
 }
diff --git a/src/citra_qt/game_list.h b/src/citra_qt/game_list.h
index 0950d9622..48febdc60 100644
--- a/src/citra_qt/game_list.h
+++ b/src/citra_qt/game_list.h
@@ -31,8 +31,8 @@ public:
 
     void PopulateAsync(const QString& dir_path, bool deep_scan);
 
-    void SaveInterfaceLayout(QSettings& settings);
-    void LoadInterfaceLayout(QSettings& settings);
+    void SaveInterfaceLayout();
+    void LoadInterfaceLayout();
 
 public slots:
     void AddEntry(QList<QStandardItem*> entry_items);
diff --git a/src/citra_qt/hotkeys.cpp b/src/citra_qt/hotkeys.cpp
index 929ba6f0e..92525d53c 100644
--- a/src/citra_qt/hotkeys.cpp
+++ b/src/citra_qt/hotkeys.cpp
@@ -4,11 +4,12 @@
 
 #include <map>
 
+#include <QtGlobal>
 #include <QKeySequence>
-#include <QSettings>
 #include <QShortcut>
 
 #include "citra_qt/hotkeys.h"
+#include "citra_qt/ui_settings.h"
 
 struct Hotkey
 {
@@ -24,54 +25,38 @@ typedef std::map<QString, HotkeyMap> HotkeyGroupMap;
 
 HotkeyGroupMap hotkey_groups;
 
-void SaveHotkeys(QSettings& settings)
+void SaveHotkeys()
 {
-    settings.beginGroup("Shortcuts");
-
+    UISettings::values.shortcuts.clear();
     for (auto group : hotkey_groups)
     {
-        settings.beginGroup(group.first);
         for (auto hotkey : group.second)
         {
-            settings.beginGroup(hotkey.first);
-            settings.setValue(QString("KeySeq"), hotkey.second.keyseq.toString());
-            settings.setValue(QString("Context"), hotkey.second.context);
-            settings.endGroup();
+            UISettings::values.shortcuts.push_back(UISettings::Shortcut(group.first + "/" + hotkey.first,
+                                                                        UISettings::ContextedShortcut(hotkey.second.keyseq.toString(),
+                                                                                                      hotkey.second.context)));
         }
-        settings.endGroup();
     }
-    settings.endGroup();
 }
 
-void LoadHotkeys(QSettings& settings)
+void LoadHotkeys()
 {
-    settings.beginGroup("Shortcuts");
-
     // Make sure NOT to use a reference here because it would become invalid once we call beginGroup()
-    QStringList groups = settings.childGroups();
-    for (auto group : groups)
+    for (auto shortcut : UISettings::values.shortcuts)
     {
-        settings.beginGroup(group);
+        QStringList cat = shortcut.first.split("/");
+        Q_ASSERT(cat.size() >= 2);
 
-        QStringList hotkeys = settings.childGroups();
-        for (auto hotkey : hotkeys)
+        // RegisterHotkey assigns default keybindings, so use old values as default parameters
+        Hotkey& hk = hotkey_groups[cat[0]][cat[1]];
+        if (!shortcut.second.first.isEmpty())
         {
-            settings.beginGroup(hotkey);
-
-            // RegisterHotkey assigns default keybindings, so use old values as default parameters
-            Hotkey& hk = hotkey_groups[group][hotkey];
-            hk.keyseq = QKeySequence::fromString(settings.value("KeySeq", hk.keyseq.toString()).toString());
-            hk.context = (Qt::ShortcutContext)settings.value("Context", hk.context).toInt();
-            if (hk.shortcut)
-                hk.shortcut->setKey(hk.keyseq);
-
-            settings.endGroup();
+            hk.keyseq = QKeySequence::fromString(shortcut.second.first);
+            hk.context = (Qt::ShortcutContext)shortcut.second.second;
         }
-
-        settings.endGroup();
+        if (hk.shortcut)
+            hk.shortcut->setKey(hk.keyseq);
     }
-
-    settings.endGroup();
 }
 
 void RegisterHotkey(const QString& group, const QString& action, const QKeySequence& default_keyseq, Qt::ShortcutContext default_context)
diff --git a/src/citra_qt/hotkeys.h b/src/citra_qt/hotkeys.h
index 50e6cbc21..79a685074 100644
--- a/src/citra_qt/hotkeys.h
+++ b/src/citra_qt/hotkeys.h
@@ -33,14 +33,14 @@ QShortcut* GetHotkey(const QString& group, const QString& action, QWidget* widge
  *
  * @note Each hotkey group will be stored a settings group; For each hotkey inside that group, a settings group will be created to store the key sequence and the hotkey context.
  */
-void SaveHotkeys(QSettings& settings);
+void SaveHotkeys();
 
 /**
  * Loads hotkeys from the settings file.
  *
  * @note Yet unregistered hotkeys which are present in the settings will automatically be registered.
  */
-void LoadHotkeys(QSettings& settings);
+void LoadHotkeys();
 
 class GHotkeysDialog : public QWidget
 {
diff --git a/src/citra_qt/main.cpp b/src/citra_qt/main.cpp
index 573036a2a..26904c71d 100644
--- a/src/citra_qt/main.cpp
+++ b/src/citra_qt/main.cpp
@@ -17,6 +17,7 @@
 #include "citra_qt/game_list.h"
 #include "citra_qt/hotkeys.h"
 #include "citra_qt/main.h"
+#include "citra_qt/ui_settings.h"
 
 // Debugger
 #include "citra_qt/debugger/callstack.h"
@@ -51,12 +52,10 @@
 
 #include "video_core/video_core.h"
 
-GMainWindow::GMainWindow() : emu_thread(nullptr)
+GMainWindow::GMainWindow() : config(new Config()), emu_thread(nullptr)
 {
     Pica::g_debug_context = Pica::DebugContext::Construct();
 
-    Config config;
-
     ui.setupUi(this);
     statusBar()->hide();
 
@@ -134,25 +133,21 @@ GMainWindow::GMainWindow() : emu_thread(nullptr)
     setGeometry(x, y, w, h);
 
     // Restore UI state
-    QSettings settings;
+    restoreGeometry(UISettings::values.geometry);
+    restoreState(UISettings::values.state);
+    render_window->restoreGeometry(UISettings::values.renderwindow_geometry);
+    microProfileDialog->restoreGeometry(UISettings::values.microprofile_geometry);
+    microProfileDialog->setVisible(UISettings::values.microprofile_visible);
 
-    settings.beginGroup("UILayout");
-    restoreGeometry(settings.value("geometry").toByteArray());
-    restoreState(settings.value("state").toByteArray());
-    render_window->restoreGeometry(settings.value("geometryRenderWindow").toByteArray());
-    microProfileDialog->restoreGeometry(settings.value("microProfileDialogGeometry").toByteArray());
-    microProfileDialog->setVisible(settings.value("microProfileDialogVisible").toBool());
-    settings.endGroup();
-
-    game_list->LoadInterfaceLayout(settings);
+    game_list->LoadInterfaceLayout();
 
     GDBStub::ToggleServer(Settings::values.use_gdbstub);
     GDBStub::SetServerPort(static_cast<u32>(Settings::values.gdbstub_port));
 
-    ui.action_Single_Window_Mode->setChecked(settings.value("singleWindowMode", true).toBool());
+    ui.action_Single_Window_Mode->setChecked(UISettings::values.single_window_mode);
     ToggleWindowMode();
 
-    ui.actionDisplay_widget_title_bars->setChecked(settings.value("displayTitleBars", true).toBool());
+    ui.actionDisplay_widget_title_bars->setChecked(UISettings::values.display_titlebar);
     OnDisplayTitleBars(ui.actionDisplay_widget_title_bars->isChecked());
 
     // Prepare actions for recent files
@@ -165,12 +160,10 @@ GMainWindow::GMainWindow() : emu_thread(nullptr)
     }
     UpdateRecentFiles();
 
-    confirm_before_closing = settings.value("confirmClose", true).toBool();
-
     // Setup connections
-    connect(game_list, SIGNAL(GameChosen(QString)), this, SLOT(OnGameListLoadFile(QString)));
+    connect(game_list, SIGNAL(GameChosen(QString)), this, SLOT(OnGameListLoadFile(QString)), Qt::DirectConnection);
     connect(ui.action_Configure, SIGNAL(triggered()), this, SLOT(OnConfigure()));
-    connect(ui.action_Load_File, SIGNAL(triggered()), this, SLOT(OnMenuLoadFile()));
+    connect(ui.action_Load_File, SIGNAL(triggered()), this, SLOT(OnMenuLoadFile()),Qt::DirectConnection);
     connect(ui.action_Load_Symbol_Map, SIGNAL(triggered()), this, SLOT(OnMenuLoadSymbolMap()));
     connect(ui.action_Select_Game_List_Root, SIGNAL(triggered()), this, SLOT(OnMenuSelectGameListRoot()));
     connect(ui.action_Start, SIGNAL(triggered()), this, SLOT(OnStartGame()));
@@ -191,7 +184,7 @@ GMainWindow::GMainWindow() : emu_thread(nullptr)
     // Setup hotkeys
     RegisterHotkey("Main Window", "Load File", QKeySequence::Open);
     RegisterHotkey("Main Window", "Start Emulation");
-    LoadHotkeys(settings);
+    LoadHotkeys();
 
     connect(GetHotkey("Main Window", "Load File", this), SIGNAL(activated()), this, SLOT(OnMenuLoadFile()));
     connect(GetHotkey("Main Window", "Start Emulation", this), SIGNAL(activated()), this, SLOT(OnStartGame()));
@@ -201,7 +194,7 @@ GMainWindow::GMainWindow() : emu_thread(nullptr)
 
     show();
 
-    game_list->PopulateAsync(settings.value("gameListRootDir", ".").toString(), settings.value("gameListDeepScan", false).toBool());
+    game_list->PopulateAsync(UISettings::values.gamedir_path, UISettings::values.gamedir_deepscan);
 
     QStringList args = QApplication::arguments();
     if (args.length() >= 2) {
@@ -365,32 +358,24 @@ void GMainWindow::ShutdownGame() {
     emulation_running = false;
 }
 
-void GMainWindow::StoreRecentFile(const std::string& filename)
-{
-    QSettings settings;
-    QStringList recent_files = settings.value("recentFiles").toStringList();
-    recent_files.prepend(QString::fromStdString(filename));
-    recent_files.removeDuplicates();
-    while (recent_files.size() > max_recent_files_item) {
-        recent_files.removeLast();
+void GMainWindow::StoreRecentFile(const std::string& filename) {
+    UISettings::values.recent_files.prepend(QString::fromStdString(filename));
+    UISettings::values.recent_files.removeDuplicates();
+    while (UISettings::values.recent_files.size() > max_recent_files_item) {
+        UISettings::values.recent_files.removeLast();
     }
 
-    settings.setValue("recentFiles", recent_files);
-
     UpdateRecentFiles();
 }
 
 void GMainWindow::UpdateRecentFiles() {
-    QSettings settings;
-    QStringList recent_files = settings.value("recentFiles").toStringList();
-
-    unsigned int num_recent_files = std::min(recent_files.size(), static_cast<int>(max_recent_files_item));
+    unsigned int num_recent_files = std::min(UISettings::values.recent_files.size(), static_cast<int>(max_recent_files_item));
 
     for (unsigned int i = 0; i < num_recent_files; i++) {
-        QString text = QString("&%1. %2").arg(i + 1).arg(QFileInfo(recent_files[i]).fileName());
+        QString text = QString("&%1. %2").arg(i + 1).arg(QFileInfo(UISettings::values.recent_files[i]).fileName());
         actions_recent_files[i]->setText(text);
-        actions_recent_files[i]->setData(recent_files[i]);
-        actions_recent_files[i]->setToolTip(recent_files[i]);
+        actions_recent_files[i]->setData(UISettings::values.recent_files[i]);
+        actions_recent_files[i]->setToolTip(UISettings::values.recent_files[i]);
         actions_recent_files[i]->setVisible(true);
     }
 
@@ -411,36 +396,28 @@ void GMainWindow::OnGameListLoadFile(QString game_path) {
 }
 
 void GMainWindow::OnMenuLoadFile() {
-    QSettings settings;
-    QString rom_path = settings.value("romsPath", QString()).toString();
-
-    QString filename = QFileDialog::getOpenFileName(this, tr("Load File"), rom_path, tr("3DS executable (*.3ds *.3dsx *.elf *.axf *.cci *.cxi)"));
+    QString filename = QFileDialog::getOpenFileName(this, tr("Load File"), UISettings::values.roms_path, tr("3DS executable (*.3ds *.3dsx *.elf *.axf *.cci *.cxi)"));
     if (!filename.isEmpty()) {
-        settings.setValue("romsPath", QFileInfo(filename).path());
+        UISettings::values.roms_path = QFileInfo(filename).path();
 
         BootGame(filename.toLocal8Bit().data());
     }
 }
 
 void GMainWindow::OnMenuLoadSymbolMap() {
-    QSettings settings;
-    QString symbol_path = settings.value("symbolsPath", QString()).toString();
-
-    QString filename = QFileDialog::getOpenFileName(this, tr("Load Symbol Map"), symbol_path, tr("Symbol map (*)"));
+    QString filename = QFileDialog::getOpenFileName(this, tr("Load Symbol Map"), UISettings::values.symbols_path, tr("Symbol map (*)"));
     if (!filename.isEmpty()) {
-        settings.setValue("symbolsPath", QFileInfo(filename).path());
+        UISettings::values.symbols_path = QFileInfo(filename).path();
 
         LoadSymbolMap(filename.toLocal8Bit().data());
     }
 }
 
 void GMainWindow::OnMenuSelectGameListRoot() {
-    QSettings settings;
-
     QString dir_path = QFileDialog::getExistingDirectory(this, tr("Select Directory"));
     if (!dir_path.isEmpty()) {
-        settings.setValue("gameListRootDir", dir_path);
-        game_list->PopulateAsync(dir_path, settings.value("gameListDeepScan").toBool());
+        UISettings::values.gamedir_path = dir_path;
+        game_list->PopulateAsync(dir_path, UISettings::values.gamedir_deepscan);
     }
 }
 
@@ -456,10 +433,7 @@ void GMainWindow::OnMenuRecentFile() {
         // Display an error message and remove the file from the list.
         QMessageBox::information(this, tr("File not found"), tr("File \"%1\" not found").arg(filename));
 
-        QSettings settings;
-        QStringList recent_files = settings.value("recentFiles").toStringList();
-        recent_files.removeOne(filename);
-        settings.setValue("recentFiles", recent_files);
+        UISettings::values.recent_files.removeOne(filename);
         UpdateRecentFiles();
     }
 }
@@ -536,23 +510,18 @@ void GMainWindow::closeEvent(QCloseEvent* event) {
         return;
     }
 
-    // Save window layout
-    QSettings settings(QSettings::IniFormat, QSettings::UserScope, "Citra team", "Citra");
+    UISettings::values.geometry = saveGeometry();
+    UISettings::values.state = saveState();
+    UISettings::values.renderwindow_geometry = render_window->saveGeometry();
+    UISettings::values.microprofile_geometry = microProfileDialog->saveGeometry();
+    UISettings::values.microprofile_visible = microProfileDialog->isVisible();
 
-    settings.beginGroup("UILayout");
-    settings.setValue("geometry", saveGeometry());
-    settings.setValue("state", saveState());
-    settings.setValue("geometryRenderWindow", render_window->saveGeometry());
-    settings.setValue("microProfileDialogGeometry", microProfileDialog->saveGeometry());
-    settings.setValue("microProfileDialogVisible", microProfileDialog->isVisible());
-    settings.endGroup();
+    UISettings::values.single_window_mode = ui.action_Single_Window_Mode->isChecked();
+    UISettings::values.display_titlebar = ui.actionDisplay_widget_title_bars->isChecked();
+    UISettings::values.first_start = false;
 
-    settings.setValue("singleWindowMode", ui.action_Single_Window_Mode->isChecked());
-    settings.setValue("displayTitleBars", ui.actionDisplay_widget_title_bars->isChecked());
-    settings.setValue("firstStart", false);
-    settings.setValue("confirmClose", confirm_before_closing);
-    game_list->SaveInterfaceLayout(settings);
-    SaveHotkeys(settings);
+    game_list->SaveInterfaceLayout();
+    SaveHotkeys();
 
     // Shutdown session if the emu thread is active...
     if (emu_thread != nullptr)
@@ -577,7 +546,6 @@ int main(int argc, char* argv[]) {
     });
 
     // Init settings params
-    QSettings::setDefaultFormat(QSettings::IniFormat);
     QCoreApplication::setOrganizationName("Citra team");
     QCoreApplication::setApplicationName("Citra");
 
diff --git a/src/citra_qt/main.h b/src/citra_qt/main.h
index 7fe425b40..bd620676b 100644
--- a/src/citra_qt/main.h
+++ b/src/citra_qt/main.h
@@ -10,6 +10,7 @@
 
 #include "ui_main.h"
 
+class Config;
 class GameList;
 class GImageInfo;
 class GRenderWindow;
@@ -114,6 +115,8 @@ private:
     GRenderWindow* render_window;
     GameList* game_list;
 
+    std::unique_ptr<Config> config;
+
     // Whether emulation is currently running in Citra.
     bool emulation_running = false;
     std::unique_ptr<EmuThread> emu_thread;
diff --git a/src/citra_qt/ui_settings.h b/src/citra_qt/ui_settings.h
index f0afbf2d3..729866d56 100644
--- a/src/citra_qt/ui_settings.h
+++ b/src/citra_qt/ui_settings.h
@@ -5,10 +5,42 @@
 #ifndef UISETTINGS_H
 #define UISETTINGS_H
 
+#include <QByteArray>
+#include <QStringList>
+#include <QString>
+
+#include <vector>
+
 namespace UISettings {
 
+    typedef std::pair<QString, int> ContextedShortcut;
+    typedef std::pair<QString, ContextedShortcut> Shortcut;
+
 struct Values {
+    QByteArray geometry;
+    QByteArray state;
+
+    QByteArray renderwindow_geometry;
+
+    QByteArray gamelist_header_state;
+
+    QByteArray microprofile_geometry;
+    bool microprofile_visible;
+
+    bool single_window_mode;
+    bool display_titlebar;
+
     bool check_closure;
+    bool first_start;
+
+    QString roms_path;
+    QString symbols_path;
+    QString gamedir_path;
+    bool gamedir_deepscan;
+    QStringList recent_files;
+
+    // Shortcut name <Shortcut, context>
+    std::vector<Shortcut> shortcuts;
 } extern values;
 
 }