diff --git a/src/core/hid/emulated_console.cpp b/src/core/hid/emulated_console.cpp
index b51c72eae076a1dc4fdbe07389c77040963adc6a..864481f5272761768676455846da27cf75de9d91 100644
--- a/src/core/hid/emulated_console.cpp
+++ b/src/core/hid/emulated_console.cpp
@@ -2,6 +2,7 @@
 // Licensed under GPLv2 or any later version
 // Refer to the license.txt file included
 
+#include "common/settings.h"
 #include "core/hid/emulated_console.h"
 #include "core/hid/input_converter.h"
 
diff --git a/src/core/hid/emulated_console.h b/src/core/hid/emulated_console.h
index 9aec482a6decc6018f63446717775ca9e16250a4..25c183eee51791bdb69fc2a35454c553b848123a 100644
--- a/src/core/hid/emulated_console.h
+++ b/src/core/hid/emulated_console.h
@@ -15,7 +15,6 @@
 #include "common/param_package.h"
 #include "common/point.h"
 #include "common/quaternion.h"
-#include "common/settings.h"
 #include "common/vector_math.h"
 #include "core/hid/hid_types.h"
 #include "core/hid/motion_input.h"
diff --git a/src/core/hid/emulated_devices.h b/src/core/hid/emulated_devices.h
index 418b2f9b552db3209665c85ac71bfc72f7ba443c..d49d6d78a5724d0e914734f7374614becb1fbc27 100644
--- a/src/core/hid/emulated_devices.h
+++ b/src/core/hid/emulated_devices.h
@@ -15,7 +15,6 @@
 #include "common/param_package.h"
 #include "common/settings.h"
 #include "core/hid/hid_types.h"
-#include "core/hid/motion_input.h"
 
 namespace Core::HID {
 
@@ -103,7 +102,7 @@ public:
     /// Reverts any mapped changes made that weren't saved
     void RestoreConfig();
 
-    /// Returns the current mapped motion device
+    /// Returns the current mapped mouse button device
     Common::ParamPackage GetMouseButtonParam(std::size_t index) const;
 
     /**
diff --git a/src/core/hle/service/hid/controllers/console_sixaxis.cpp b/src/core/hle/service/hid/controllers/console_sixaxis.cpp
index 2bebcf0d0b97de9781080a225af74b97de28c6d4..ea7e8f18fd5762d566ab0b269a356ab1f5dd4567 100644
--- a/src/core/hle/service/hid/controllers/console_sixaxis.cpp
+++ b/src/core/hle/service/hid/controllers/console_sixaxis.cpp
@@ -3,17 +3,17 @@
 // Refer to the license.txt file included.
 
 #include "common/settings.h"
-#include "core/core.h"
 #include "core/core_timing.h"
 #include "core/hid/emulated_console.h"
+#include "core/hid/hid_core.h"
 #include "core/hle/service/hid/controllers/console_sixaxis.h"
 
 namespace Service::HID {
 constexpr std::size_t SHARED_MEMORY_OFFSET = 0x3C200;
 
-Controller_ConsoleSixAxis::Controller_ConsoleSixAxis(Core::System& system_)
-    : ControllerBase{system_} {
-    console = system.HIDCore().GetEmulatedConsole();
+Controller_ConsoleSixAxis::Controller_ConsoleSixAxis(Core::HID::HIDCore& hid_core_)
+    : ControllerBase{hid_core_} {
+    console = hid_core.GetEmulatedConsole();
 }
 
 Controller_ConsoleSixAxis::~Controller_ConsoleSixAxis() = default;
diff --git a/src/core/hle/service/hid/controllers/console_sixaxis.h b/src/core/hle/service/hid/controllers/console_sixaxis.h
index 95729e6b23ebd658c9e034e54f9667f829ea22bd..7c92413e8d0b8505229594a9e4f240ab94700582 100644
--- a/src/core/hle/service/hid/controllers/console_sixaxis.h
+++ b/src/core/hle/service/hid/controllers/console_sixaxis.h
@@ -5,16 +5,20 @@
 #pragma once
 
 #include <array>
+
 #include "common/common_types.h"
 #include "common/quaternion.h"
-#include "core/hid/hid_core.h"
 #include "core/hid/hid_types.h"
 #include "core/hle/service/hid/controllers/controller_base.h"
 
+namespace Core::HID {
+class EmulatedConsole;
+} // namespace Core::HID
+
 namespace Service::HID {
 class Controller_ConsoleSixAxis final : public ControllerBase {
 public:
-    explicit Controller_ConsoleSixAxis(Core::System& system_);
+    explicit Controller_ConsoleSixAxis(Core::HID::HIDCore& hid_core_);
     ~Controller_ConsoleSixAxis() override;
 
     // Called when the controller is initialized
diff --git a/src/core/hle/service/hid/controllers/controller_base.cpp b/src/core/hle/service/hid/controllers/controller_base.cpp
index 74a39478426e3f0020bd69eb9d6569d4f8a93b8f..788ae9ae7ab41eb4352d4a6bbc989a9e6b298915 100644
--- a/src/core/hle/service/hid/controllers/controller_base.cpp
+++ b/src/core/hle/service/hid/controllers/controller_base.cpp
@@ -6,7 +6,7 @@
 
 namespace Service::HID {
 
-ControllerBase::ControllerBase(Core::System& system_) : system(system_) {}
+ControllerBase::ControllerBase(Core::HID::HIDCore& hid_core_) : hid_core(hid_core_) {}
 ControllerBase::~ControllerBase() = default;
 
 void ControllerBase::ActivateController() {
diff --git a/src/core/hle/service/hid/controllers/controller_base.h b/src/core/hle/service/hid/controllers/controller_base.h
index 4ba2eda1a96fe984a42efdf1a589b94c5fb38d54..8125bbc8422b9ea1c5ac69b96f2331474fdc307f 100644
--- a/src/core/hle/service/hid/controllers/controller_base.h
+++ b/src/core/hle/service/hid/controllers/controller_base.h
@@ -11,14 +11,14 @@ namespace Core::Timing {
 class CoreTiming;
 }
 
-namespace Core {
-class System;
+namespace Core::HID {
+class HIDCore;
 }
 
 namespace Service::HID {
 class ControllerBase {
 public:
-    explicit ControllerBase(Core::System& system_);
+    explicit ControllerBase(Core::HID::HIDCore& hid_core_);
     virtual ~ControllerBase();
 
     // Called when the controller is initialized
@@ -44,6 +44,6 @@ public:
 protected:
     bool is_activated{false};
 
-    Core::System& system;
+    Core::HID::HIDCore& hid_core;
 };
 } // namespace Service::HID
diff --git a/src/core/hle/service/hid/controllers/debug_pad.cpp b/src/core/hle/service/hid/controllers/debug_pad.cpp
index 86b95f2c8ba6d742f23e230f1ea5971ee61595f7..6a6fb9cab3f6085d496c2995eca72f199c0a432e 100644
--- a/src/core/hle/service/hid/controllers/debug_pad.cpp
+++ b/src/core/hle/service/hid/controllers/debug_pad.cpp
@@ -5,7 +5,6 @@
 #include <cstring>
 #include "common/common_types.h"
 #include "common/settings.h"
-#include "core/core.h"
 #include "core/core_timing.h"
 #include "core/hid/emulated_controller.h"
 #include "core/hid/hid_core.h"
@@ -15,8 +14,9 @@
 namespace Service::HID {
 constexpr std::size_t SHARED_MEMORY_OFFSET = 0x00000;
 
-Controller_DebugPad::Controller_DebugPad(Core::System& system_) : ControllerBase{system_} {
-    controller = system.HIDCore().GetEmulatedController(Core::HID::NpadIdType::Other);
+Controller_DebugPad::Controller_DebugPad(Core::HID::HIDCore& hid_core_)
+    : ControllerBase{hid_core_} {
+    controller = hid_core.GetEmulatedController(Core::HID::NpadIdType::Other);
 }
 
 Controller_DebugPad::~Controller_DebugPad() = default;
diff --git a/src/core/hle/service/hid/controllers/debug_pad.h b/src/core/hle/service/hid/controllers/debug_pad.h
index bd0f15eaa62ca0ad6d39bf51bfd1411fecd2ff4b..15b3afb7a3e3b594cf1b234b3c0a5f6c2164c1a3 100644
--- a/src/core/hle/service/hid/controllers/debug_pad.h
+++ b/src/core/hle/service/hid/controllers/debug_pad.h
@@ -8,7 +8,6 @@
 #include "common/bit_field.h"
 #include "common/common_funcs.h"
 #include "common/common_types.h"
-#include "common/settings.h"
 #include "common/swap.h"
 #include "core/hle/service/hid/controllers/controller_base.h"
 #include "core/hle/service/hid/ring_lifo.h"
@@ -22,7 +21,7 @@ struct AnalogStickState;
 namespace Service::HID {
 class Controller_DebugPad final : public ControllerBase {
 public:
-    explicit Controller_DebugPad(Core::System& system_);
+    explicit Controller_DebugPad(Core::HID::HIDCore& hid_core_);
     ~Controller_DebugPad() override;
 
     // Called when the controller is initialized
diff --git a/src/core/hle/service/hid/controllers/gesture.cpp b/src/core/hle/service/hid/controllers/gesture.cpp
index 00df50f323d80651c34c9eb31ab363e8565188ef..fe895c4f671d4b52f0b9266062b97a9519d947df 100644
--- a/src/core/hle/service/hid/controllers/gesture.cpp
+++ b/src/core/hle/service/hid/controllers/gesture.cpp
@@ -5,7 +5,6 @@
 #include "common/logging/log.h"
 #include "common/math_util.h"
 #include "common/settings.h"
-#include "core/core.h"
 #include "core/core_timing.h"
 #include "core/frontend/emu_window.h"
 #include "core/hid/hid_core.h"
@@ -25,8 +24,8 @@ constexpr f32 Square(s32 num) {
     return static_cast<f32>(num * num);
 }
 
-Controller_Gesture::Controller_Gesture(Core::System& system_) : ControllerBase(system_) {
-    console = system.HIDCore().GetEmulatedConsole();
+Controller_Gesture::Controller_Gesture(Core::HID::HIDCore& hid_core_) : ControllerBase(hid_core_) {
+    console = hid_core.GetEmulatedConsole();
 }
 Controller_Gesture::~Controller_Gesture() = default;
 
diff --git a/src/core/hle/service/hid/controllers/gesture.h b/src/core/hle/service/hid/controllers/gesture.h
index 9bffde438e7bb0d86df1f33eebe965e0c634bc0c..f924464e0dcc900c35ba763a374c99893689f9ec 100644
--- a/src/core/hle/service/hid/controllers/gesture.h
+++ b/src/core/hle/service/hid/controllers/gesture.h
@@ -15,7 +15,7 @@
 namespace Service::HID {
 class Controller_Gesture final : public ControllerBase {
 public:
-    explicit Controller_Gesture(Core::System& system_);
+    explicit Controller_Gesture(Core::HID::HIDCore& hid_core_);
     ~Controller_Gesture() override;
 
     // Called when the controller is initialized
diff --git a/src/core/hle/service/hid/controllers/keyboard.cpp b/src/core/hle/service/hid/controllers/keyboard.cpp
index acea68e24ece3ced3ce728db3a8eedbb155d6e43..1dc219bf599c5943e5c3a8a53d7123543b277f0f 100644
--- a/src/core/hle/service/hid/controllers/keyboard.cpp
+++ b/src/core/hle/service/hid/controllers/keyboard.cpp
@@ -5,7 +5,6 @@
 #include <cstring>
 #include "common/common_types.h"
 #include "common/settings.h"
-#include "core/core.h"
 #include "core/core_timing.h"
 #include "core/hid/emulated_devices.h"
 #include "core/hid/hid_core.h"
@@ -14,8 +13,9 @@
 namespace Service::HID {
 constexpr std::size_t SHARED_MEMORY_OFFSET = 0x3800;
 
-Controller_Keyboard::Controller_Keyboard(Core::System& system_) : ControllerBase{system_} {
-    emulated_devices = system.HIDCore().GetEmulatedDevices();
+Controller_Keyboard::Controller_Keyboard(Core::HID::HIDCore& hid_core_)
+    : ControllerBase{hid_core_} {
+    emulated_devices = hid_core.GetEmulatedDevices();
 }
 
 Controller_Keyboard::~Controller_Keyboard() = default;
diff --git a/src/core/hle/service/hid/controllers/keyboard.h b/src/core/hle/service/hid/controllers/keyboard.h
index aba4f123ec87b9f74f91287bcdf177306b314560..ec5dd607cb120e9ca43254da09760506cadc0acc 100644
--- a/src/core/hle/service/hid/controllers/keyboard.h
+++ b/src/core/hle/service/hid/controllers/keyboard.h
@@ -8,7 +8,6 @@
 #include "common/bit_field.h"
 #include "common/common_funcs.h"
 #include "common/common_types.h"
-#include "common/settings.h"
 #include "common/swap.h"
 #include "core/hle/service/hid/controllers/controller_base.h"
 #include "core/hle/service/hid/ring_lifo.h"
@@ -22,7 +21,7 @@ struct KeyboardKey;
 namespace Service::HID {
 class Controller_Keyboard final : public ControllerBase {
 public:
-    explicit Controller_Keyboard(Core::System& system_);
+    explicit Controller_Keyboard(Core::HID::HIDCore& hid_core_);
     ~Controller_Keyboard() override;
 
     // Called when the controller is initialized
diff --git a/src/core/hle/service/hid/controllers/mouse.cpp b/src/core/hle/service/hid/controllers/mouse.cpp
index 21f7e48bb60ca103ea4e2762838bf8087f7e1708..83e69ca94f1795b000fadde400de65f2da91f007 100644
--- a/src/core/hle/service/hid/controllers/mouse.cpp
+++ b/src/core/hle/service/hid/controllers/mouse.cpp
@@ -4,7 +4,6 @@
 
 #include <cstring>
 #include "common/common_types.h"
-#include "core/core.h"
 #include "core/core_timing.h"
 #include "core/frontend/emu_window.h"
 #include "core/hid/emulated_devices.h"
@@ -14,8 +13,8 @@
 namespace Service::HID {
 constexpr std::size_t SHARED_MEMORY_OFFSET = 0x3400;
 
-Controller_Mouse::Controller_Mouse(Core::System& system_) : ControllerBase{system_} {
-    emulated_devices = system.HIDCore().GetEmulatedDevices();
+Controller_Mouse::Controller_Mouse(Core::HID::HIDCore& hid_core_) : ControllerBase{hid_core_} {
+    emulated_devices = hid_core.GetEmulatedDevices();
 }
 
 Controller_Mouse::~Controller_Mouse() = default;
diff --git a/src/core/hle/service/hid/controllers/mouse.h b/src/core/hle/service/hid/controllers/mouse.h
index ce868a247125791b278954e89bcbd243da1d967f..25017f1173a1e05b9cd7c29481fc7bddcc715c13 100644
--- a/src/core/hle/service/hid/controllers/mouse.h
+++ b/src/core/hle/service/hid/controllers/mouse.h
@@ -7,7 +7,6 @@
 #include <array>
 #include "common/bit_field.h"
 #include "common/common_types.h"
-#include "common/settings.h"
 #include "common/swap.h"
 #include "core/hle/service/hid/controllers/controller_base.h"
 #include "core/hle/service/hid/ring_lifo.h"
@@ -20,7 +19,7 @@ struct MouseState;
 namespace Service::HID {
 class Controller_Mouse final : public ControllerBase {
 public:
-    explicit Controller_Mouse(Core::System& system_);
+    explicit Controller_Mouse(Core::HID::HIDCore& hid_core_);
     ~Controller_Mouse() override;
 
     // Called when the controller is initialized
diff --git a/src/core/hle/service/hid/controllers/npad.cpp b/src/core/hle/service/hid/controllers/npad.cpp
index fcc36bbc1683ee8444c689f29a92279b71669add..b97e575f3920e7199bd2af2b3da277a0efe78fe6 100644
--- a/src/core/hle/service/hid/controllers/npad.cpp
+++ b/src/core/hle/service/hid/controllers/npad.cpp
@@ -10,7 +10,6 @@
 #include "common/common_types.h"
 #include "common/logging/log.h"
 #include "common/settings.h"
-#include "core/core.h"
 #include "core/core_timing.h"
 #include "core/hid/emulated_controller.h"
 #include "core/hid/hid_core.h"
@@ -97,12 +96,12 @@ bool Controller_NPad::IsDeviceHandleValid(const DeviceHandle& device_handle) {
            device_handle.device_index < DeviceIndex::MaxDeviceIndex;
 }
 
-Controller_NPad::Controller_NPad(Core::System& system_,
+Controller_NPad::Controller_NPad(Core::HID::HIDCore& hid_core_,
                                  KernelHelpers::ServiceContext& service_context_)
-    : ControllerBase{system_}, service_context{service_context_} {
+    : ControllerBase{hid_core_}, service_context{service_context_} {
     for (std::size_t i = 0; i < controller_data.size(); ++i) {
         auto& controller = controller_data[i];
-        controller.device = system.HIDCore().GetEmulatedControllerByIndex(i);
+        controller.device = hid_core.GetEmulatedControllerByIndex(i);
         controller.vibration[Core::HID::DeviceIndex::LeftIndex].latest_vibration_value =
             DEFAULT_VIBRATION_VALUE;
         controller.vibration[Core::HID::DeviceIndex::RightIndex].latest_vibration_value =
@@ -284,7 +283,7 @@ void Controller_NPad::OnInit() {
             service_context.CreateEvent(fmt::format("npad:NpadStyleSetChanged_{}", i));
     }
 
-    if (system.HIDCore().GetSupportedStyleTag().raw == 0) {
+    if (hid_core.GetSupportedStyleTag().raw == 0) {
         // We want to support all controllers
         Core::HID::NpadStyleTag style{};
         style.handheld.Assign(1);
@@ -294,7 +293,7 @@ void Controller_NPad::OnInit() {
         style.fullkey.Assign(1);
         style.gamecube.Assign(1);
         style.palma.Assign(1);
-        system.HIDCore().SetSupportedStyleTag(style);
+        hid_core.SetSupportedStyleTag(style);
     }
 
     supported_npad_id_types.resize(npad_id_list.size());
@@ -678,11 +677,11 @@ void Controller_NPad::OnMotionUpdate(const Core::Timing::CoreTiming& core_timing
 }
 
 void Controller_NPad::SetSupportedStyleSet(Core::HID::NpadStyleTag style_set) {
-    system.HIDCore().SetSupportedStyleTag(style_set);
+    hid_core.SetSupportedStyleTag(style_set);
 }
 
 Core::HID::NpadStyleTag Controller_NPad::GetSupportedStyleSet() const {
-    return system.HIDCore().GetSupportedStyleTag();
+    return hid_core.GetSupportedStyleTag();
 }
 
 void Controller_NPad::SetSupportedNpadIdTypes(u8* data, std::size_t length) {
diff --git a/src/core/hle/service/hid/controllers/npad.h b/src/core/hle/service/hid/controllers/npad.h
index 512fb5afcda6a5069f888668c163c3f1b954ef93..a996755ed5324cdd5407dd2b896b40f299f41ab5 100644
--- a/src/core/hle/service/hid/controllers/npad.h
+++ b/src/core/hle/service/hid/controllers/npad.h
@@ -11,7 +11,6 @@
 #include "common/bit_field.h"
 #include "common/common_types.h"
 #include "common/quaternion.h"
-#include "common/settings.h"
 #include "core/hid/hid_types.h"
 #include "core/hle/service/hid/controllers/controller_base.h"
 #include "core/hle/service/hid/ring_lifo.h"
@@ -37,7 +36,7 @@ constexpr u32 NPAD_UNKNOWN = 16; // TODO(ogniK): What is this?
 
 class Controller_NPad final : public ControllerBase {
 public:
-    explicit Controller_NPad(Core::System& system_,
+    explicit Controller_NPad(Core::HID::HIDCore& hid_core_,
                              KernelHelpers::ServiceContext& service_context_);
     ~Controller_NPad() override;
 
diff --git a/src/core/hle/service/hid/controllers/stubbed.cpp b/src/core/hle/service/hid/controllers/stubbed.cpp
index a8c93909dd79f7a1023bd8cfb8fd04f34dcde102..b7d7a57560f3a83071a6d205e63bd3e20b2604f9 100644
--- a/src/core/hle/service/hid/controllers/stubbed.cpp
+++ b/src/core/hle/service/hid/controllers/stubbed.cpp
@@ -5,11 +5,12 @@
 #include <cstring>
 #include "common/common_types.h"
 #include "core/core_timing.h"
+#include "core/hid/hid_core.h"
 #include "core/hle/service/hid/controllers/stubbed.h"
 
 namespace Service::HID {
 
-Controller_Stubbed::Controller_Stubbed(Core::System& system_) : ControllerBase{system_} {}
+Controller_Stubbed::Controller_Stubbed(Core::HID::HIDCore& hid_core_) : ControllerBase{hid_core_} {}
 Controller_Stubbed::~Controller_Stubbed() = default;
 
 void Controller_Stubbed::OnInit() {}
diff --git a/src/core/hle/service/hid/controllers/stubbed.h b/src/core/hle/service/hid/controllers/stubbed.h
index 10aecad4cab2c95c6bc589500777f099597875b7..0044a4efaa761ee9a654f1034ca6e281ed89bfbd 100644
--- a/src/core/hle/service/hid/controllers/stubbed.h
+++ b/src/core/hle/service/hid/controllers/stubbed.h
@@ -10,7 +10,7 @@
 namespace Service::HID {
 class Controller_Stubbed final : public ControllerBase {
 public:
-    explicit Controller_Stubbed(Core::System& system_);
+    explicit Controller_Stubbed(Core::HID::HIDCore& hid_core_);
     ~Controller_Stubbed() override;
 
     // Called when the controller is initialized
diff --git a/src/core/hle/service/hid/controllers/touchscreen.cpp b/src/core/hle/service/hid/controllers/touchscreen.cpp
index 9ae2bf2b156de8665510b9ff2fe0d3a24961a8ba..48978e5c6a674346627d32de06ff1a78370b88c3 100644
--- a/src/core/hle/service/hid/controllers/touchscreen.cpp
+++ b/src/core/hle/service/hid/controllers/touchscreen.cpp
@@ -10,13 +10,16 @@
 #include "core/core.h"
 #include "core/core_timing.h"
 #include "core/frontend/emu_window.h"
+#include "core/hid/emulated_console.h"
+#include "core/hid/hid_core.h"
 #include "core/hle/service/hid/controllers/touchscreen.h"
 
 namespace Service::HID {
 constexpr std::size_t SHARED_MEMORY_OFFSET = 0x400;
 
-Controller_Touchscreen::Controller_Touchscreen(Core::System& system_) : ControllerBase{system_} {
-    console = system.HIDCore().GetEmulatedConsole();
+Controller_Touchscreen::Controller_Touchscreen(Core::HID::HIDCore& hid_core_)
+    : ControllerBase{hid_core_} {
+    console = hid_core.GetEmulatedConsole();
 }
 
 Controller_Touchscreen::~Controller_Touchscreen() = default;
diff --git a/src/core/hle/service/hid/controllers/touchscreen.h b/src/core/hle/service/hid/controllers/touchscreen.h
index 50dadd25f51e2c2866b6e3fc6dbcf5658f2ff5aa..135c2bf13838614485e6d315b2c63f6a81a2ecfd 100644
--- a/src/core/hle/service/hid/controllers/touchscreen.h
+++ b/src/core/hle/service/hid/controllers/touchscreen.h
@@ -9,12 +9,14 @@
 #include "common/common_types.h"
 #include "common/point.h"
 #include "common/swap.h"
-#include "core/hid/emulated_console.h"
-#include "core/hid/hid_core.h"
 #include "core/hid/hid_types.h"
 #include "core/hle/service/hid/controllers/controller_base.h"
 #include "core/hle/service/hid/ring_lifo.h"
 
+namespace Core::HID {
+class EmulatedConsole;
+} // namespace Core::HID
+
 namespace Service::HID {
 class Controller_Touchscreen final : public ControllerBase {
 public:
@@ -34,7 +36,7 @@ public:
     static_assert(sizeof(TouchScreenConfigurationForNx) == 0x17,
                   "TouchScreenConfigurationForNx is an invalid size");
 
-    explicit Controller_Touchscreen(Core::System& system_);
+    explicit Controller_Touchscreen(Core::HID::HIDCore& hid_core_);
     ~Controller_Touchscreen() override;
 
     // Called when the controller is initialized
diff --git a/src/core/hle/service/hid/controllers/xpad.cpp b/src/core/hle/service/hid/controllers/xpad.cpp
index a2ed1e7c2c4c7270e9b4f09118a7c74e203e38c6..e4da164665a403b4882c2ea280f1a7ab3ee05229 100644
--- a/src/core/hle/service/hid/controllers/xpad.cpp
+++ b/src/core/hle/service/hid/controllers/xpad.cpp
@@ -5,12 +5,13 @@
 #include <cstring>
 #include "common/common_types.h"
 #include "core/core_timing.h"
+#include "core/hid/hid_core.h"
 #include "core/hle/service/hid/controllers/xpad.h"
 
 namespace Service::HID {
 constexpr std::size_t SHARED_MEMORY_OFFSET = 0x3C00;
 
-Controller_XPad::Controller_XPad(Core::System& system_) : ControllerBase{system_} {}
+Controller_XPad::Controller_XPad(Core::HID::HIDCore& hid_core_) : ControllerBase{hid_core_} {}
 Controller_XPad::~Controller_XPad() = default;
 
 void Controller_XPad::OnInit() {}
diff --git a/src/core/hle/service/hid/controllers/xpad.h b/src/core/hle/service/hid/controllers/xpad.h
index 75e0d291161844bb2c7525e44c8191dd89e2d607..54dae0be1b9838bd0d9423ca35a2da035e0f943b 100644
--- a/src/core/hle/service/hid/controllers/xpad.h
+++ b/src/core/hle/service/hid/controllers/xpad.h
@@ -15,7 +15,7 @@
 namespace Service::HID {
 class Controller_XPad final : public ControllerBase {
 public:
-    explicit Controller_XPad(Core::System& system_);
+    explicit Controller_XPad(Core::HID::HIDCore& hid_core_);
     ~Controller_XPad() override;
 
     // Called when the controller is initialized
diff --git a/src/core/hle/service/hid/hid.cpp b/src/core/hle/service/hid/hid.cpp
index 648e69de9f2a3282afb5488d67a98063075be47d..96e8fb7e1c22571239ae1773cde31ddba5375582 100644
--- a/src/core/hle/service/hid/hid.cpp
+++ b/src/core/hle/service/hid/hid.cpp
@@ -8,6 +8,7 @@
 #include "common/settings.h"
 #include "core/core.h"
 #include "core/core_timing.h"
+#include "core/hid/hid_core.h"
 #include "core/hle/ipc_helpers.h"
 #include "core/hle/kernel/k_readable_event.h"
 #include "core/hle/kernel/k_shared_memory.h"
diff --git a/src/core/hle/service/hid/hid.h b/src/core/hle/service/hid/hid.h
index 2e0c33c1cfce9dbb0d10ba64901c7b0a7f88f75e..973e6a8acf7a03af8bb9bb6d4de060619ba8d041 100644
--- a/src/core/hle/service/hid/hid.h
+++ b/src/core/hle/service/hid/hid.h
@@ -60,12 +60,12 @@ public:
 private:
     template <typename T>
     void MakeController(HidController controller) {
-        controllers[static_cast<std::size_t>(controller)] = std::make_unique<T>(system);
+        controllers[static_cast<std::size_t>(controller)] = std::make_unique<T>(system.HIDCore());
     }
     template <typename T>
     void MakeControllerWithServiceContext(HidController controller) {
         controllers[static_cast<std::size_t>(controller)] =
-            std::make_unique<T>(system, service_context);
+            std::make_unique<T>(system.HIDCore(), service_context);
     }
 
     void GetSharedMemoryHandle(Kernel::HLERequestContext& ctx);
diff --git a/src/yuzu/bootmanager.cpp b/src/yuzu/bootmanager.cpp
index 4b3cd9f3e49ab74dfb31e066d8c08852041b1b38..3c5590a01715cadbc1498fe8cb12f14e75eac5c3 100644
--- a/src/yuzu/bootmanager.cpp
+++ b/src/yuzu/bootmanager.cpp
@@ -27,7 +27,6 @@
 
 #include "common/assert.h"
 #include "common/microprofile.h"
-#include "common/param_package.h"
 #include "common/scm_rev.h"
 #include "common/scope_exit.h"
 #include "common/settings.h"
diff --git a/src/yuzu/debugger/controller.cpp b/src/yuzu/debugger/controller.cpp
index aaca494b8dff8c233b0cc35bc4dcf664c9666bfc..6b834c42e9c561a517f706b37c8d18d520363c59 100644
--- a/src/yuzu/debugger/controller.cpp
+++ b/src/yuzu/debugger/controller.cpp
@@ -6,17 +6,17 @@
 #include <QLayout>
 #include <QString>
 #include "common/settings.h"
-#include "core/core.h"
 #include "core/hid/emulated_controller.h"
+#include "core/hid/hid_core.h"
 #include "input_common/drivers/tas_input.h"
 #include "input_common/main.h"
 #include "yuzu/configuration/configure_input_player_widget.h"
 #include "yuzu/debugger/controller.h"
 
-ControllerDialog::ControllerDialog(Core::System& system_,
+ControllerDialog::ControllerDialog(Core::HID::HIDCore& hid_core_,
                                    std::shared_ptr<InputCommon::InputSubsystem> input_subsystem_,
                                    QWidget* parent)
-    : QWidget(parent, Qt::Dialog), system{system_}, input_subsystem{input_subsystem_} {
+    : QWidget(parent, Qt::Dialog), hid_core{hid_core_}, input_subsystem{input_subsystem_} {
     setObjectName(QStringLiteral("Controller"));
     setWindowTitle(tr("Controller P1"));
     resize(500, 350);
@@ -41,8 +41,8 @@ ControllerDialog::ControllerDialog(Core::System& system_,
 
 void ControllerDialog::refreshConfiguration() {
     UnloadController();
-    auto* player_1 = system.HIDCore().GetEmulatedController(Core::HID::NpadIdType::Player1);
-    auto* handheld = system.HIDCore().GetEmulatedController(Core::HID::NpadIdType::Handheld);
+    auto* player_1 = hid_core.GetEmulatedController(Core::HID::NpadIdType::Player1);
+    auto* handheld = hid_core.GetEmulatedController(Core::HID::NpadIdType::Handheld);
     // Display the correct controller
     controller = handheld->IsConnected() ? handheld : player_1;
 
diff --git a/src/yuzu/debugger/controller.h b/src/yuzu/debugger/controller.h
index d08643baaf587d326266024fc603265b8228b3d7..52cea33265668b89d5afd815bb8106c04cc65778 100644
--- a/src/yuzu/debugger/controller.h
+++ b/src/yuzu/debugger/controller.h
@@ -15,11 +15,8 @@ namespace InputCommon {
 class InputSubsystem;
 }
 
-namespace Core {
-class System;
-}
-
 namespace Core::HID {
+class HIDCore;
 class EmulatedController;
 enum class ControllerTriggerType;
 } // namespace Core::HID
@@ -28,7 +25,7 @@ class ControllerDialog : public QWidget {
     Q_OBJECT
 
 public:
-    explicit ControllerDialog(Core::System& system_,
+    explicit ControllerDialog(Core::HID::HIDCore& hid_core_,
                               std::shared_ptr<InputCommon::InputSubsystem> input_subsystem_,
                               QWidget* parent = nullptr);
 
@@ -55,6 +52,6 @@ private:
 
     QAction* toggle_view_action = nullptr;
     PlayerControlPreview* widget;
-    Core::System& system;
+    Core::HID::HIDCore& hid_core;
     std::shared_ptr<InputCommon::InputSubsystem> input_subsystem;
 };
diff --git a/src/yuzu/main.cpp b/src/yuzu/main.cpp
index baf7b38b41c16a820148ee0881b5aa424da109c1..cd8ea221d7251a3d3dc1d808a4f63ccd11ff86d6 100644
--- a/src/yuzu/main.cpp
+++ b/src/yuzu/main.cpp
@@ -928,7 +928,7 @@ void GMainWindow::InitializeDebugWidgets() {
     waitTreeWidget->hide();
     debug_menu->addAction(waitTreeWidget->toggleViewAction());
 
-    controller_dialog = new ControllerDialog(*system, input_subsystem, this);
+    controller_dialog = new ControllerDialog(system->HIDCore(), input_subsystem, this);
     controller_dialog->hide();
     debug_menu->addAction(controller_dialog->toggleViewAction());