diff --git a/src/core/hle/service/am/am.cpp b/src/core/hle/service/am/am.cpp
index 7b4af9eb7f..11181a0af2 100644
--- a/src/core/hle/service/am/am.cpp
+++ b/src/core/hle/service/am/am.cpp
@@ -532,8 +532,7 @@ void ICommonStateGetter::GetPerformanceMode(Kernel::HLERequestContext& ctx) {
 class ILibraryAppletAccessor final : public ServiceFramework<ILibraryAppletAccessor> {
 public:
     explicit ILibraryAppletAccessor(std::shared_ptr<Applets::Applet> applet)
-        : ServiceFramework("ILibraryAppletAccessor"), applet(std::move(applet)),
-          broker(std::make_shared<Applets::AppletDataBroker>()) {
+        : ServiceFramework("ILibraryAppletAccessor"), applet(std::move(applet)) {
         // clang-format off
         static const FunctionInfo functions[] = {
             {0, &ILibraryAppletAccessor::GetAppletStateChangedEvent, "GetAppletStateChangedEvent"},
@@ -562,7 +561,7 @@ public:
 
 private:
     void GetAppletStateChangedEvent(Kernel::HLERequestContext& ctx) {
-        const auto event = broker->GetStateChangedEvent();
+        const auto event = applet->GetBroker().GetStateChangedEvent();
         event->Signal();
 
         IPC::ResponseBuilder rb{ctx, 2, 1};
@@ -590,7 +589,7 @@ private:
     void Start(Kernel::HLERequestContext& ctx) {
         ASSERT(applet != nullptr);
 
-        applet->Initialize(broker);
+        applet->Initialize();
         applet->Execute();
 
         IPC::ResponseBuilder rb{ctx, 2};
@@ -601,7 +600,7 @@ private:
 
     void PushInData(Kernel::HLERequestContext& ctx) {
         IPC::RequestParser rp{ctx};
-        broker->PushNormalDataFromGame(*rp.PopIpcInterface<IStorage>());
+        applet->GetBroker().PushNormalDataFromGame(*rp.PopIpcInterface<IStorage>());
 
         IPC::ResponseBuilder rb{ctx, 2};
         rb.Push(RESULT_SUCCESS);
@@ -612,7 +611,7 @@ private:
     void PopOutData(Kernel::HLERequestContext& ctx) {
         IPC::ResponseBuilder rb{ctx, 2, 0, 1};
 
-        const auto storage = broker->PopNormalDataToGame();
+        const auto storage = applet->GetBroker().PopNormalDataToGame();
         if (storage == nullptr) {
             rb.Push(ERR_NO_DATA_IN_CHANNEL);
             return;
@@ -626,7 +625,7 @@ private:
 
     void PushInteractiveInData(Kernel::HLERequestContext& ctx) {
         IPC::RequestParser rp{ctx};
-        broker->PushInteractiveDataFromGame(*rp.PopIpcInterface<IStorage>());
+        applet->GetBroker().PushInteractiveDataFromGame(*rp.PopIpcInterface<IStorage>());
 
         ASSERT(applet->IsInitialized());
         applet->ExecuteInteractive();
@@ -641,7 +640,7 @@ private:
     void PopInteractiveOutData(Kernel::HLERequestContext& ctx) {
         IPC::ResponseBuilder rb{ctx, 2, 0, 1};
 
-        const auto storage = broker->PopInteractiveDataToGame();
+        const auto storage = applet->GetBroker().PopInteractiveDataToGame();
         if (storage == nullptr) {
             rb.Push(ERR_NO_DATA_IN_CHANNEL);
             return;
@@ -656,7 +655,7 @@ private:
     void GetPopOutDataEvent(Kernel::HLERequestContext& ctx) {
         IPC::ResponseBuilder rb{ctx, 2, 1};
         rb.Push(RESULT_SUCCESS);
-        rb.PushCopyObjects(broker->GetNormalDataEvent());
+        rb.PushCopyObjects(applet->GetBroker().GetNormalDataEvent());
 
         LOG_DEBUG(Service_AM, "called");
     }
@@ -664,13 +663,12 @@ private:
     void GetPopInteractiveOutDataEvent(Kernel::HLERequestContext& ctx) {
         IPC::ResponseBuilder rb{ctx, 2, 1};
         rb.Push(RESULT_SUCCESS);
-        rb.PushCopyObjects(broker->GetInteractiveDataEvent());
+        rb.PushCopyObjects(applet->GetBroker().GetInteractiveDataEvent());
 
         LOG_DEBUG(Service_AM, "called");
     }
 
     std::shared_ptr<Applets::Applet> applet;
-    std::shared_ptr<Applets::AppletDataBroker> broker;
 };
 
 void IStorage::Open(Kernel::HLERequestContext& ctx) {
diff --git a/src/core/hle/service/am/applets/applets.cpp b/src/core/hle/service/am/applets/applets.cpp
index 8adb818230..becbadd060 100644
--- a/src/core/hle/service/am/applets/applets.cpp
+++ b/src/core/hle/service/am/applets/applets.cpp
@@ -98,10 +98,8 @@ Applet::Applet() = default;
 
 Applet::~Applet() = default;
 
-void Applet::Initialize(std::shared_ptr<AppletDataBroker> broker_) {
-    broker = std::move(broker_);
-
-    const auto common = broker->PopNormalDataToApplet();
+void Applet::Initialize() {
+    const auto common = broker.PopNormalDataToApplet();
     ASSERT(common != nullptr);
 
     const auto common_data = common->GetData();
diff --git a/src/core/hle/service/am/applets/applets.h b/src/core/hle/service/am/applets/applets.h
index 1364456496..f65ea119c8 100644
--- a/src/core/hle/service/am/applets/applets.h
+++ b/src/core/hle/service/am/applets/applets.h
@@ -4,14 +4,17 @@
 
 #pragma once
 
-#include <functional>
 #include <memory>
 #include <queue>
 #include "common/swap.h"
-#include "core/hle/kernel/event.h"
+#include "core/hle/kernel/kernel.h"
 
 union ResultCode;
 
+namespace Kernel {
+class Event;
+}
+
 namespace Service::AM {
 
 class IStorage;
@@ -43,19 +46,26 @@ public:
 
 private:
     // Queues are named from applet's perspective
-    std::queue<std::unique_ptr<IStorage>>
-        in_channel; // PopNormalDataToApplet and PushNormalDataFromGame
-    std::queue<std::unique_ptr<IStorage>>
-        out_channel; // PopNormalDataToGame and PushNormalDataFromApplet
-    std::queue<std::unique_ptr<IStorage>>
-        in_interactive_channel; // PopInteractiveDataToApplet and PushInteractiveDataFromGame
-    std::queue<std::unique_ptr<IStorage>>
-        out_interactive_channel; // PopInteractiveDataToGame and PushInteractiveDataFromApplet
+
+    // PopNormalDataToApplet and PushNormalDataFromGame
+    std::queue<std::unique_ptr<IStorage>> in_channel;
+
+    // PopNormalDataToGame and PushNormalDataFromApplet
+    std::queue<std::unique_ptr<IStorage>> out_channel;
+
+    // PopInteractiveDataToApplet and PushInteractiveDataFromGame
+    std::queue<std::unique_ptr<IStorage>> in_interactive_channel;
+
+    // PopInteractiveDataToGame and PushInteractiveDataFromApplet
+    std::queue<std::unique_ptr<IStorage>> out_interactive_channel;
 
     Kernel::SharedPtr<Kernel::Event> state_changed_event;
-    Kernel::SharedPtr<Kernel::Event> pop_out_data_event; // Signaled on PushNormalDataFromApplet
-    Kernel::SharedPtr<Kernel::Event>
-        pop_interactive_out_data_event; // Signaled on PushInteractiveDataFromApplet
+
+    // Signaled on PushNormalDataFromApplet
+    Kernel::SharedPtr<Kernel::Event> pop_out_data_event;
+
+    // Signaled on PushInteractiveDataFromApplet
+    Kernel::SharedPtr<Kernel::Event> pop_interactive_out_data_event;
 };
 
 class Applet {
@@ -63,7 +73,7 @@ public:
     Applet();
     virtual ~Applet();
 
-    virtual void Initialize(std::shared_ptr<AppletDataBroker> broker);
+    virtual void Initialize();
 
     virtual bool TransactionComplete() const = 0;
     virtual ResultCode GetStatus() const = 0;
@@ -74,6 +84,14 @@ public:
         return initialized;
     }
 
+    AppletDataBroker& GetBroker() {
+        return broker;
+    }
+
+    const AppletDataBroker& GetBroker() const {
+        return broker;
+    }
+
 protected:
     struct CommonArguments {
         u32_le arguments_version;
@@ -85,8 +103,8 @@ protected:
     };
     static_assert(sizeof(CommonArguments) == 0x20, "CommonArguments has incorrect size.");
 
-    CommonArguments common_args;
-    std::shared_ptr<AppletDataBroker> broker;
+    CommonArguments common_args{};
+    AppletDataBroker broker;
     bool initialized = false;
 };
 
diff --git a/src/core/hle/service/am/applets/software_keyboard.cpp b/src/core/hle/service/am/applets/software_keyboard.cpp
index c4b76a5154..981bdec51f 100644
--- a/src/core/hle/service/am/applets/software_keyboard.cpp
+++ b/src/core/hle/service/am/applets/software_keyboard.cpp
@@ -42,21 +42,21 @@ SoftwareKeyboard::SoftwareKeyboard() = default;
 
 SoftwareKeyboard::~SoftwareKeyboard() = default;
 
-void SoftwareKeyboard::Initialize(std::shared_ptr<AppletDataBroker> broker_) {
+void SoftwareKeyboard::Initialize() {
     complete = false;
     initial_text.clear();
     final_data.clear();
 
-    Applet::Initialize(std::move(broker_));
+    Applet::Initialize();
 
-    const auto keyboard_config_storage = broker->PopNormalDataToApplet();
+    const auto keyboard_config_storage = broker.PopNormalDataToApplet();
     ASSERT(keyboard_config_storage != nullptr);
     const auto& keyboard_config = keyboard_config_storage->GetData();
 
     ASSERT(keyboard_config.size() >= sizeof(KeyboardConfig));
     std::memcpy(&config, keyboard_config.data(), sizeof(KeyboardConfig));
 
-    const auto work_buffer_storage = broker->PopNormalDataToApplet();
+    const auto work_buffer_storage = broker.PopNormalDataToApplet();
     ASSERT(work_buffer_storage != nullptr);
     const auto& work_buffer = work_buffer_storage->GetData();
 
@@ -81,7 +81,7 @@ void SoftwareKeyboard::ExecuteInteractive() {
     if (complete)
         return;
 
-    const auto storage = broker->PopInteractiveDataToApplet();
+    const auto storage = broker.PopInteractiveDataToApplet();
     ASSERT(storage != nullptr);
     const auto data = storage->GetData();
     const auto status = static_cast<bool>(data[0]);
@@ -95,13 +95,13 @@ void SoftwareKeyboard::ExecuteInteractive() {
         std::memcpy(string.data(), data.data() + 4, string.size() * 2);
         frontend.SendTextCheckDialog(
             Common::UTF16StringFromFixedZeroTerminatedBuffer(string.data(), string.size()),
-            [this] { broker->SignalStateChanged(); });
+            [this] { broker.SignalStateChanged(); });
     }
 }
 
 void SoftwareKeyboard::Execute() {
     if (complete) {
-        broker->PushNormalDataFromApplet(IStorage{final_data});
+        broker.PushNormalDataFromApplet(IStorage{final_data});
         return;
     }
 
@@ -145,17 +145,17 @@ void SoftwareKeyboard::WriteText(std::optional<std::u16string> text) {
         final_data = output_main;
 
         if (complete) {
-            broker->PushNormalDataFromApplet(IStorage{output_main});
+            broker.PushNormalDataFromApplet(IStorage{output_main});
         } else {
-            broker->PushInteractiveDataFromApplet(IStorage{output_sub});
+            broker.PushInteractiveDataFromApplet(IStorage{output_sub});
         }
 
-        broker->SignalStateChanged();
+        broker.SignalStateChanged();
     } else {
         output_main[0] = 1;
         complete = true;
-        broker->PushNormalDataFromApplet(IStorage{output_main});
-        broker->SignalStateChanged();
+        broker.PushNormalDataFromApplet(IStorage{output_main});
+        broker.SignalStateChanged();
     }
 }
 } // namespace Service::AM::Applets
diff --git a/src/core/hle/service/am/applets/software_keyboard.h b/src/core/hle/service/am/applets/software_keyboard.h
index 16e1fff665..efd5753a1e 100644
--- a/src/core/hle/service/am/applets/software_keyboard.h
+++ b/src/core/hle/service/am/applets/software_keyboard.h
@@ -4,7 +4,12 @@
 
 #pragma once
 
+#include <array>
+#include <string>
+#include <vector>
+
 #include "common/common_funcs.h"
+#include "common/swap.h"
 #include "core/hle/service/am/am.h"
 #include "core/hle/service/am/applets/applets.h"
 
@@ -50,7 +55,7 @@ public:
     SoftwareKeyboard();
     ~SoftwareKeyboard() override;
 
-    void Initialize(std::shared_ptr<AppletDataBroker> broker) override;
+    void Initialize() override;
 
     bool TransactionComplete() const override;
     ResultCode GetStatus() const override;