diff --git a/src/citra/citra.cpp b/src/citra/citra.cpp
index 3a1fbe3f7c6222d86690dacb91a35cc623f1f544..d6ad13f69dfd19c7fe4b1425427b035397f4c580 100644
--- a/src/citra/citra.cpp
+++ b/src/citra/citra.cpp
@@ -93,14 +93,13 @@ int main(int argc, char **argv) {
 
     log_filter.ParseFilterString(Settings::values.log_filter);
 
-    GDBStub::ToggleServer(use_gdbstub);
-    GDBStub::SetServerPort(gdb_port);
+    // Apply the command line arguments
+    Settings::values.gdbstub_port = gdb_port;
+    Settings::values.use_gdbstub = use_gdbstub;
+    Settings::Apply();
 
     std::unique_ptr<EmuWindow_SDL2> emu_window = std::make_unique<EmuWindow_SDL2>();
 
-    VideoCore::g_hw_renderer_enabled = Settings::values.use_hw_renderer;
-    VideoCore::g_shader_jit_enabled = Settings::values.use_shader_jit;
-
     System::Init(emu_window.get());
     SCOPE_EXIT({ System::Shutdown(); });
 
diff --git a/src/citra_qt/config.cpp b/src/citra_qt/config.cpp
index ecf5c5a7507b47b1dd3e0d8433d3d7054b6d6127..e363be38a3f2412e868950690e289b7bef103b84 100644
--- a/src/citra_qt/config.cpp
+++ b/src/citra_qt/config.cpp
@@ -189,6 +189,7 @@ void Config::SaveValues() {
 
 void Config::Reload() {
     ReadValues();
+    Settings::Apply();
 }
 
 void Config::Save() {
diff --git a/src/citra_qt/configure_debug.cpp b/src/citra_qt/configure_debug.cpp
index ba66d08339bbf882cb2c5491508837b2ee8e6e0f..dc3d7b906682914e3df4333584c59b6e61e8e35f 100644
--- a/src/citra_qt/configure_debug.cpp
+++ b/src/citra_qt/configure_debug.cpp
@@ -5,7 +5,6 @@
 #include "citra_qt/configure_debug.h"
 #include "ui_configure_debug.h"
 
-#include "core/gdbstub/gdbstub.h"
 #include "core/settings.h"
 
 ConfigureDebug::ConfigureDebug(QWidget *parent) :
@@ -26,7 +25,7 @@ void ConfigureDebug::setConfiguration() {
 }
 
 void ConfigureDebug::applyConfiguration() {
-    GDBStub::ToggleServer(ui->toogle_gdbstub->isChecked());
     Settings::values.use_gdbstub = ui->toogle_gdbstub->isChecked();
     Settings::values.gdbstub_port = ui->gdbport_spinbox->value();
+    Settings::Apply();
 }
diff --git a/src/citra_qt/configure_general.cpp b/src/citra_qt/configure_general.cpp
index 350bd794d1777b13a7f4197dcbffb4a182e29e76..a27d0d26c8d3f4f46b7083af1514e4fb785f1c35 100644
--- a/src/citra_qt/configure_general.cpp
+++ b/src/citra_qt/configure_general.cpp
@@ -8,8 +8,6 @@
 
 #include "core/settings.h"
 
-#include "video_core/video_core.h"
-
 ConfigureGeneral::ConfigureGeneral(QWidget *parent) :
     QWidget(parent),
     ui(new Ui::ConfigureGeneral)
@@ -32,12 +30,8 @@ void ConfigureGeneral::setConfiguration() {
 void ConfigureGeneral::applyConfiguration() {
     UISettings::values.gamedir_deepscan = ui->toogle_deepscan->isChecked();
     UISettings::values.confirm_before_closing = ui->toogle_check_exit->isChecked();
-
     Settings::values.region_value = ui->region_combobox->currentIndex();
-
-    VideoCore::g_hw_renderer_enabled =
     Settings::values.use_hw_renderer = ui->toogle_hw_renderer->isChecked();
-
-    VideoCore::g_shader_jit_enabled =
     Settings::values.use_shader_jit = ui->toogle_shader_jit->isChecked();
+    Settings::Apply();
 }
diff --git a/src/citra_qt/main.cpp b/src/citra_qt/main.cpp
index 23eb28259f28ea111ef45f3cf78538e4c8f84d4f..2ca1e51f60c03339d9bc5d45795693ca9dc6c87d 100644
--- a/src/citra_qt/main.cpp
+++ b/src/citra_qt/main.cpp
@@ -141,9 +141,6 @@ GMainWindow::GMainWindow() : config(new Config()), emu_thread(nullptr)
 
     game_list->LoadInterfaceLayout();
 
-    GDBStub::ToggleServer(Settings::values.use_gdbstub);
-    GDBStub::SetServerPort(static_cast<u32>(Settings::values.gdbstub_port));
-
     ui.action_Single_Window_Mode->setChecked(UISettings::values.single_window_mode);
     ToggleWindowMode();
 
diff --git a/src/core/settings.cpp b/src/core/settings.cpp
index 8a14f75aaac3fffc4a57a9d0450f0c6871acda1c..1aa26fbd2a45a147b02273bcbb28d3da0035ece8 100644
--- a/src/core/settings.cpp
+++ b/src/core/settings.cpp
@@ -4,8 +4,22 @@
 
 #include "settings.h"
 
+#include "core/gdbstub/gdbstub.h"
+
+#include "video_core/video_core.h"
+
 namespace Settings {
 
 Values values = {};
 
+void Apply() {
+
+    GDBStub::SetServerPort(static_cast<u32>(values.gdbstub_port));
+    GDBStub::ToggleServer(values.use_gdbstub);
+
+    VideoCore::g_hw_renderer_enabled = values.use_hw_renderer;
+    VideoCore::g_shader_jit_enabled = values.use_shader_jit;
+
 }
+
+} // namespace
diff --git a/src/core/settings.h b/src/core/settings.h
index 97ddcdff9d960f743ae872eec93c266ba49b2c87..4933a516dcc660c94410d5dd11f80bac96799b59 100644
--- a/src/core/settings.h
+++ b/src/core/settings.h
@@ -67,4 +67,6 @@ struct Values {
     u16 gdbstub_port;
 } extern values;
 
+void Apply();
+
 }