diff --git a/src/android/app/src/main/java/org/citra/citra_emu/features/settings/model/IntSetting.kt b/src/android/app/src/main/java/org/citra/citra_emu/features/settings/model/IntSetting.kt
index cc64d29a62..b2c3783970 100644
--- a/src/android/app/src/main/java/org/citra/citra_emu/features/settings/model/IntSetting.kt
+++ b/src/android/app/src/main/java/org/citra/citra_emu/features/settings/model/IntSetting.kt
@@ -25,6 +25,7 @@ enum class IntSetting(
     SCREEN_LAYOUT("layout_option", Settings.SECTION_LAYOUT, 0),
     AUDIO_INPUT_TYPE("output_type", Settings.SECTION_AUDIO, 0),
     NEW_3DS("is_new_3ds", Settings.SECTION_SYSTEM, 1),
+    LLE_APPLETS("lle_applets", Settings.SECTION_SYSTEM, 0),
     CPU_CLOCK_SPEED("cpu_clock_percentage", Settings.SECTION_CORE, 100),
     LINEAR_FILTERING("filter_mode", Settings.SECTION_RENDERER, 1),
     SHADERS_ACCURATE_MUL("shaders_accurate_mul", Settings.SECTION_RENDERER, 0),
@@ -61,6 +62,7 @@ enum class IntSetting(
             EMULATED_REGION,
             INIT_CLOCK,
             NEW_3DS,
+            LLE_APPLETS,
             GRAPHICS_API,
             VSYNC,
             DEBUG_RENDERER,
diff --git a/src/android/app/src/main/java/org/citra/citra_emu/features/settings/ui/SettingsFragmentPresenter.kt b/src/android/app/src/main/java/org/citra/citra_emu/features/settings/ui/SettingsFragmentPresenter.kt
index efaf835407..c196da08e7 100644
--- a/src/android/app/src/main/java/org/citra/citra_emu/features/settings/ui/SettingsFragmentPresenter.kt
+++ b/src/android/app/src/main/java/org/citra/citra_emu/features/settings/ui/SettingsFragmentPresenter.kt
@@ -907,6 +907,15 @@ class SettingsFragmentPresenter(private val fragmentView: SettingsFragmentView)
                     IntSetting.NEW_3DS.defaultValue
                 )
             )
+            add(
+                SwitchSetting(
+                    IntSetting.LLE_APPLETS,
+                    R.string.lle_applets,
+                    0,
+                    IntSetting.LLE_APPLETS.key,
+                    IntSetting.LLE_APPLETS.defaultValue
+                )
+            )
             add(
                 SliderSetting(
                     IntSetting.CPU_CLOCK_SPEED,
diff --git a/src/android/app/src/main/jni/config.cpp b/src/android/app/src/main/jni/config.cpp
index 551617ae70..f2210f2255 100644
--- a/src/android/app/src/main/jni/config.cpp
+++ b/src/android/app/src/main/jni/config.cpp
@@ -206,6 +206,7 @@ void Config::ReadValues() {
 
     // System
     ReadSetting("System", Settings::values.is_new_3ds);
+    ReadSetting("System", Settings::values.lle_applets);
     ReadSetting("System", Settings::values.region_value);
     ReadSetting("System", Settings::values.init_clock);
     {
diff --git a/src/android/app/src/main/jni/default_ini.h b/src/android/app/src/main/jni/default_ini.h
index a2cd02c859..31df12c5fb 100644
--- a/src/android/app/src/main/jni/default_ini.h
+++ b/src/android/app/src/main/jni/default_ini.h
@@ -270,6 +270,10 @@ use_virtual_sd =
 # 0: Old 3DS (default), 1: New 3DS
 is_new_3ds =
 
+# Whether to use LLE system applets, if installed
+# 0 (default): No, 1: Yes
+lle_applets =
+
 # The system region that Citra will use during emulation
 # -1: Auto-select (default), 0: Japan, 1: USA, 2: Europe, 3: Australia, 4: China, 5: Korea, 6: Taiwan
 region_value =
diff --git a/src/android/app/src/main/res/values/strings.xml b/src/android/app/src/main/res/values/strings.xml
index a7caab91f3..303632162c 100644
--- a/src/android/app/src/main/res/values/strings.xml
+++ b/src/android/app/src/main/res/values/strings.xml
@@ -171,6 +171,7 @@
     <!-- System settings strings -->
     <string name="username">Username</string>
     <string name="new_3ds">New 3DS Mode</string>
+    <string name="lle_applets">Use LLE Applets (if installed)</string>
     <string name="clock">Clock</string>
     <string name="init_time">Offset Time</string>
     <string name="init_time_description">If the clock is set to \"Simulated clock\", this changes the fixed date and time to start at.</string>
diff --git a/src/citra/config.cpp b/src/citra/config.cpp
index b6cfa27243..baf5bbdeda 100644
--- a/src/citra/config.cpp
+++ b/src/citra/config.cpp
@@ -203,6 +203,7 @@ void Config::ReadValues() {
 
     // System
     ReadSetting("System", Settings::values.is_new_3ds);
+    ReadSetting("System", Settings::values.lle_applets);
     ReadSetting("System", Settings::values.region_value);
     ReadSetting("System", Settings::values.init_clock);
     {
diff --git a/src/citra/default_ini.h b/src/citra/default_ini.h
index 273e9a423d..be3c679487 100644
--- a/src/citra/default_ini.h
+++ b/src/citra/default_ini.h
@@ -294,6 +294,10 @@ nand_directory =
 # 0: Old 3DS, 1: New 3DS (default)
 is_new_3ds =
 
+# Whether to use LLE system applets, if installed
+# 0 (default): No, 1: Yes
+lle_applets =
+
 # The system region that Citra will use during emulation
 # -1: Auto-select (default), 0: Japan, 1: USA, 2: Europe, 3: Australia, 4: China, 5: Korea, 6: Taiwan
 region_value =
diff --git a/src/citra_qt/configuration/config.cpp b/src/citra_qt/configuration/config.cpp
index 58495ae0cd..389a3becf8 100644
--- a/src/citra_qt/configuration/config.cpp
+++ b/src/citra_qt/configuration/config.cpp
@@ -682,6 +682,7 @@ void Config::ReadSystemValues() {
     qt_config->beginGroup(QStringLiteral("System"));
 
     ReadGlobalSetting(Settings::values.is_new_3ds);
+    ReadGlobalSetting(Settings::values.lle_applets);
     ReadGlobalSetting(Settings::values.region_value);
 
     if (global) {
@@ -1172,6 +1173,7 @@ void Config::SaveSystemValues() {
     qt_config->beginGroup(QStringLiteral("System"));
 
     WriteGlobalSetting(Settings::values.is_new_3ds);
+    WriteGlobalSetting(Settings::values.lle_applets);
     WriteGlobalSetting(Settings::values.region_value);
 
     if (global) {
diff --git a/src/citra_qt/configuration/configure_system.cpp b/src/citra_qt/configuration/configure_system.cpp
index 7936df2565..653957ca77 100644
--- a/src/citra_qt/configuration/configure_system.cpp
+++ b/src/citra_qt/configuration/configure_system.cpp
@@ -309,6 +309,7 @@ void ConfigureSystem::SetConfiguration() {
     }
 
     ui->toggle_new_3ds->setChecked(Settings::values.is_new_3ds.GetValue());
+    ui->toggle_lle_applets->setChecked(Settings::values.lle_applets.GetValue());
     ui->plugin_loader->setChecked(Settings::values.plugin_loader_enabled.GetValue());
     ui->allow_plugin_loader->setChecked(Settings::values.allow_plugin_loader.GetValue());
 }
@@ -415,6 +416,8 @@ void ConfigureSystem::ApplyConfiguration() {
 
         ConfigurationShared::ApplyPerGameSetting(&Settings::values.is_new_3ds, ui->toggle_new_3ds,
                                                  is_new_3ds);
+        ConfigurationShared::ApplyPerGameSetting(&Settings::values.lle_applets,
+                                                 ui->toggle_lle_applets, lle_applets);
 
         Settings::values.init_clock =
             static_cast<Settings::InitClock>(ui->combo_init_clock->currentIndex());
@@ -434,6 +437,7 @@ void ConfigureSystem::ApplyConfiguration() {
 
         Settings::values.init_time_offset = time_offset_days + time_offset_time;
         Settings::values.is_new_3ds = ui->toggle_new_3ds->isChecked();
+        Settings::values.lle_applets = ui->toggle_lle_applets->isChecked();
 
         Settings::values.plugin_loader_enabled.SetValue(ui->plugin_loader->isChecked());
         Settings::values.allow_plugin_loader.SetValue(ui->allow_plugin_loader->isChecked());
@@ -526,6 +530,7 @@ void ConfigureSystem::SetupPerGameUI() {
     // Block the global settings if a game is currently running that overrides them
     if (Settings::IsConfiguringGlobal()) {
         ui->toggle_new_3ds->setEnabled(Settings::values.is_new_3ds.UsingGlobal());
+        ui->toggle_lle_applets->setEnabled(Settings::values.lle_applets.UsingGlobal());
         return;
     }
 
@@ -569,6 +574,8 @@ void ConfigureSystem::SetupPerGameUI() {
 
     ConfigurationShared::SetColoredTristate(ui->toggle_new_3ds, Settings::values.is_new_3ds,
                                             is_new_3ds);
+    ConfigurationShared::SetColoredTristate(ui->toggle_lle_applets, Settings::values.lle_applets,
+                                            lle_applets);
 }
 
 void ConfigureSystem::DownloadFromNUS() {
diff --git a/src/citra_qt/configuration/configure_system.h b/src/citra_qt/configuration/configure_system.h
index 2c1d30649e..8a258bc2b1 100644
--- a/src/citra_qt/configuration/configure_system.h
+++ b/src/citra_qt/configuration/configure_system.h
@@ -54,6 +54,7 @@ private:
     std::unique_ptr<Ui::ConfigureSystem> ui;
     Core::System& system;
     ConfigurationShared::CheckState is_new_3ds;
+    ConfigurationShared::CheckState lle_applets;
     bool enabled = false;
 
     std::shared_ptr<Service::CFG::Module> cfg;
diff --git a/src/citra_qt/configuration/configure_system.ui b/src/citra_qt/configuration/configure_system.ui
index bd3332bfd5..81f764b053 100644
--- a/src/citra_qt/configuration/configure_system.ui
+++ b/src/citra_qt/configuration/configure_system.ui
@@ -29,7 +29,14 @@
           </property>
          </widget>
         </item>
-        <item row="2" column="1">
+        <item row="2" column="0">
+         <widget class="QCheckBox" name="toggle_lle_applets">
+          <property name="text">
+           <string>Use LLE applets (if installed)</string>
+          </property>
+         </widget>
+        </item>
+        <item row="3" column="1">
          <widget class="QLineEdit" name="edit_username">
           <property name="sizePolicy">
            <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
@@ -42,21 +49,21 @@
           </property>
          </widget>
         </item>
-        <item row="2" column="0">
+        <item row="3" column="0">
          <widget class="QLabel" name="label_username">
           <property name="text">
            <string>Username</string>
           </property>
          </widget>
         </item>
-        <item row="3" column="0">
+        <item row="4" column="0">
          <widget class="QLabel" name="label_birthday">
           <property name="text">
            <string>Birthday</string>
           </property>
          </widget>
         </item>
-        <item row="3" column="1">
+        <item row="4" column="1">
          <layout class="QHBoxLayout" name="horizontalLayout_birthday2">
           <item>
            <widget class="QComboBox" name="combo_birthmonth">
@@ -127,14 +134,14 @@
           </item>
          </layout>
         </item>
-        <item row="4" column="0">
+        <item row="5" column="0">
          <widget class="QLabel" name="label_language">
           <property name="text">
            <string>Language</string>
           </property>
          </widget>
         </item>
-        <item row="4" column="1">
+        <item row="5" column="1">
          <widget class="QComboBox" name="combo_language">
           <property name="toolTip">
            <string>Note: this can be overridden when region setting is auto-select</string>
@@ -201,14 +208,14 @@
           </item>
          </widget>
         </item>
-        <item row="5" column="0">
+        <item row="6" column="0">
          <widget class="QLabel" name="label_sound">
           <property name="text">
            <string>Sound output mode</string>
           </property>
          </widget>
         </item>
-        <item row="5" column="1">
+        <item row="6" column="1">
          <widget class="QComboBox" name="combo_sound">
           <item>
            <property name="text">
@@ -227,24 +234,24 @@
           </item>
          </widget>
         </item>
-        <item row="6" column="0">
+        <item row="7" column="0">
          <widget class="QLabel" name="label_country">
           <property name="text">
            <string>Country</string>
           </property>
          </widget>
         </item>
-        <item row="6" column="1">
+        <item row="7" column="1">
          <widget class="QComboBox" name="combo_country"/>
         </item>
-        <item row="7" column="0">
+        <item row="8" column="0">
          <widget class="QLabel" name="label_init_clock">
           <property name="text">
            <string>Clock</string>
           </property>
          </widget>
         </item>
-        <item row="7" column="1">
+        <item row="8" column="1">
          <widget class="QComboBox" name="combo_init_clock">
           <item>
            <property name="text">
@@ -258,28 +265,28 @@
           </item>
          </widget>
         </item>
-        <item row="8" column="0">
+        <item row="9" column="0">
          <widget class="QLabel" name="label_init_time">
           <property name="text">
            <string>Startup time</string>
           </property>
          </widget>
         </item>
-        <item row="8" column="1">
+        <item row="9" column="1">
          <widget class="QDateTimeEdit" name="edit_init_time">
           <property name="displayFormat">
            <string>yyyy-MM-ddTHH:mm:ss</string>
           </property>
          </widget>
         </item>
-        <item row="8" column="0">
+        <item row="9" column="0">
          <widget class="QLabel" name="label_init_time_offset">
           <property name="text">
            <string>Offset time</string>
           </property>
          </widget>
         </item>
-        <item row="8" column="1">
+        <item row="9" column="1">
          <layout class="QGridLayout" name="edit_init_time_offset_grid">
           <item row="0" column="0">
            <widget class="QSpinBox" name="edit_init_time_offset_days">
@@ -303,14 +310,14 @@
           </item>
          </layout>
         </item>
-        <item row="9" column="0">
+        <item row="10" column="0">
          <widget class="QLabel" name="label_init_ticks_type">
           <property name="text">
            <string>Initial System Ticks</string>
           </property>
          </widget>
         </item>
-        <item row="9" column="1">
+        <item row="10" column="1">
          <widget class="QComboBox" name="combo_init_ticks_type">
           <item>
            <property name="text">
@@ -324,14 +331,14 @@
           </item>
          </widget>
         </item>
-        <item row="10" column="0">
+        <item row="11" column="0">
          <widget class="QLabel" name="label_init_ticks_value">
           <property name="text">
            <string>Initial System Ticks Override</string>
           </property>
          </widget>
         </item>
-        <item row="10" column="1">
+        <item row="11" column="1">
          <widget class="QLineEdit" name="edit_init_ticks_value">
           <property name="sizePolicy">
            <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
@@ -344,35 +351,35 @@
           </property>
          </widget>
         </item>
-        <item row="11" column="0">
+        <item row="12" column="0">
          <widget class="QLabel" name="label_play_coins">
           <property name="text">
            <string>Play Coins:</string>
           </property>
          </widget>
         </item>
-        <item row="11" column="1">
+        <item row="12" column="1">
          <widget class="QSpinBox" name="spinBox_play_coins">
           <property name="maximum">
            <number>300</number>
           </property>
          </widget>
         </item>
-        <item row="12" column="1">
+        <item row="13" column="1">
          <widget class="QCheckBox" name="toggle_system_setup">
           <property name="text">
            <string>Run System Setup when Home Menu is launched</string>
           </property>
          </widget>
         </item>
-        <item row="13" column="0">
+        <item row="14" column="0">
          <widget class="QLabel" name="label_console_id">
           <property name="text">
            <string>Console ID:</string>
           </property>
          </widget>
         </item>
-        <item row="13" column="1">
+        <item row="14" column="1">
          <widget class="QPushButton" name="button_regenerate_console_id">
           <property name="sizePolicy">
            <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
@@ -388,35 +395,35 @@
           </property>
          </widget>
         </item>
-        <item row="14" column="0">
+        <item row="15" column="0">
          <widget class="QLabel" name="label_plugin_loader">
           <property name="text">
            <string>3GX Plugin Loader:</string>
           </property>
          </widget>
         </item>
-        <item row="14" column="1">
+        <item row="15" column="1">
          <widget class="QCheckBox" name="plugin_loader">
           <property name="text">
            <string>Enable 3GX plugin loader</string>
           </property>
          </widget>
         </item>
-        <item row="15" column="1">
+        <item row="16" column="1">
          <widget class="QCheckBox" name="allow_plugin_loader">
           <property name="text">
            <string>Allow games to change plugin loader state</string>
           </property>
          </widget>
         </item>
-        <item row="16" column="0">
+        <item row="17" column="0">
          <widget class="QLabel" name="label_nus_download">
           <property name="text">
            <string>Download System Files from Nitendo servers</string>
           </property>
          </widget>
         </item>
-        <item row="16" column="1">
+        <item row="17" column="1">
          <widget class="QWidget" name="body_nus_download">
           <layout class="QHBoxLayout" name="horizontalLayout_nus_download">
            <item>
diff --git a/src/common/settings.cpp b/src/common/settings.cpp
index e7e3d59f15..657747b617 100644
--- a/src/common/settings.cpp
+++ b/src/common/settings.cpp
@@ -138,6 +138,7 @@ void LogSettings() {
         log_setting("DataStorage_NandDir", FileUtil::GetUserPath(FileUtil::UserPath::NANDDir));
     }
     log_setting("System_IsNew3ds", values.is_new_3ds.GetValue());
+    log_setting("System_LLEApplets", values.lle_applets.GetValue());
     log_setting("System_RegionValue", values.region_value.GetValue());
     log_setting("System_PluginLoader", values.plugin_loader_enabled.GetValue());
     log_setting("System_PluginLoaderAllowed", values.allow_plugin_loader.GetValue());
@@ -175,6 +176,7 @@ void RestoreGlobalState(bool is_powered_on) {
     // Core
     values.cpu_clock_percentage.SetGlobal(true);
     values.is_new_3ds.SetGlobal(true);
+    values.lle_applets.SetGlobal(true);
 
     // Renderer
     values.graphics_api.SetGlobal(true);
diff --git a/src/common/settings.h b/src/common/settings.h
index 8fc0f36c42..a52e797ac8 100644
--- a/src/common/settings.h
+++ b/src/common/settings.h
@@ -432,6 +432,7 @@ struct Values {
     Setting<bool> use_cpu_jit{true, "use_cpu_jit"};
     SwitchableSetting<s32, true> cpu_clock_percentage{100, 5, 400, "cpu_clock_percentage"};
     SwitchableSetting<bool> is_new_3ds{true, "is_new_3ds"};
+    SwitchableSetting<bool> lle_applets{false, "lle_applets"};
 
     // Data Storage
     Setting<bool> use_virtual_sd{true, "use_virtual_sd"};
diff --git a/src/core/hle/service/apt/applet_manager.cpp b/src/core/hle/service/apt/applet_manager.cpp
index 7e976a50e1..fe640b5c5b 100644
--- a/src/core/hle/service/apt/applet_manager.cpp
+++ b/src/core/hle/service/apt/applet_manager.cpp
@@ -568,11 +568,13 @@ Result AppletManager::PrepareToStartLibraryApplet(AppletId applet_id) {
 
     capture_buffer_info.reset();
 
-    auto cfg = Service::CFG::GetModule(system);
-    auto process =
-        NS::LaunchTitle(FS::MediaType::NAND, GetTitleIdForApplet(applet_id, cfg->GetRegionValue()));
-    if (process) {
-        return ResultSuccess;
+    if (Settings::values.lle_applets) {
+        auto cfg = Service::CFG::GetModule(system);
+        auto process = NS::LaunchTitle(FS::MediaType::NAND,
+                                       GetTitleIdForApplet(applet_id, cfg->GetRegionValue()));
+        if (process) {
+            return ResultSuccess;
+        }
     }
 
     // If we weren't able to load the native applet title, try to fallback to an HLE implementation.
@@ -595,11 +597,13 @@ Result AppletManager::PreloadLibraryApplet(AppletId applet_id) {
     last_library_launcher_slot = active_slot;
     last_prepared_library_applet = applet_id;
 
-    auto cfg = Service::CFG::GetModule(system);
-    auto process =
-        NS::LaunchTitle(FS::MediaType::NAND, GetTitleIdForApplet(applet_id, cfg->GetRegionValue()));
-    if (process) {
-        return ResultSuccess;
+    if (Settings::values.lle_applets) {
+        auto cfg = Service::CFG::GetModule(system);
+        auto process = NS::LaunchTitle(FS::MediaType::NAND,
+                                       GetTitleIdForApplet(applet_id, cfg->GetRegionValue()));
+        if (process) {
+            return ResultSuccess;
+        }
     }
 
     // If we weren't able to load the native applet title, try to fallback to an HLE implementation.
diff --git a/src/core/telemetry_session.cpp b/src/core/telemetry_session.cpp
index 968e36eacb..8a4f945992 100644
--- a/src/core/telemetry_session.cpp
+++ b/src/core/telemetry_session.cpp
@@ -155,6 +155,8 @@ void TelemetrySession::AddInitialInfo(Loader::AppLoader& app_loader) {
              static_cast<int>(Settings::values.mono_render_option.GetValue()));
     AddField(Telemetry::FieldType::UserConfig, "System_IsNew3ds",
              Settings::values.is_new_3ds.GetValue());
+    AddField(Telemetry::FieldType::UserConfig, "System_LLEApplets",
+             Settings::values.lle_applets.GetValue());
     AddField(Telemetry::FieldType::UserConfig, "System_RegionValue",
              Settings::values.region_value.GetValue());
 }