diff --git a/src/core/core.cpp b/src/core/core.cpp
index 613a98b4ca..89bb2887e3 100644
--- a/src/core/core.cpp
+++ b/src/core/core.cpp
@@ -141,14 +141,14 @@ System::ResultStatus System::Init(EmuWindow* emu_window, u32 system_mode) {
 
     switch (Settings::values.cpu_core) {
     case Settings::CpuCore::Unicorn:
-        cpu_core = std::make_unique<ARM_Unicorn>();
+        cpu_core = std::make_shared<ARM_Unicorn>();
         break;
     case Settings::CpuCore::Dynarmic:
     default:
 #ifdef ARCHITECTURE_x86_64
-        cpu_core = std::make_unique<ARM_Dynarmic>();
+        cpu_core = std::make_shared<ARM_Dynarmic>();
 #else
-        cpu_core = std::make_unique<ARM_Unicorn>();
+        cpu_core = std::make_shared<ARM_Unicorn>();
         LOG_WARNING(Core, "CPU JIT requested, but Dynarmic not available");
 #endif
         break;
diff --git a/src/core/core.h b/src/core/core.h
index f63cc47ccb..e7599e18ce 100644
--- a/src/core/core.h
+++ b/src/core/core.h
@@ -140,9 +140,7 @@ private:
     /// AppLoader used to load the current executing application
     std::unique_ptr<Loader::AppLoader> app_loader;
 
-    ///< ARM11 CPU core
-    std::unique_ptr<ARM_Interface> cpu_core;
-
+    std::shared_ptr<ARM_Interface> cpu_core;
     std::unique_ptr<Tegra::GPU> gpu_core;
 
     /// When true, signals that a reschedule should happen