diff --git a/examples/all-clusters-app/all-clusters-common/src/boolcfg-stub.cpp b/examples/all-clusters-app/all-clusters-common/src/boolcfg-stub.cpp
index 36716ec..fe2ec90 100644
--- a/examples/all-clusters-app/all-clusters-common/src/boolcfg-stub.cpp
+++ b/examples/all-clusters-app/all-clusters-common/src/boolcfg-stub.cpp
@@ -15,7 +15,7 @@
  *    limitations under the License.
  */
 
-#include <app/clusters/boolean-state-configuration-server/BooleanStateConfigurationTestEventTriggerDelegate.h>
+#include <app/clusters/boolean-state-configuration-server/BooleanStateConfigurationTestEventTriggerHandler.h>
 #include <app/clusters/boolean-state-configuration-server/boolean-state-configuration-server.h>
 
 #include <platform/CHIPDeviceLayer.h>
diff --git a/examples/all-clusters-app/all-clusters-common/src/smco-stub.cpp b/examples/all-clusters-app/all-clusters-common/src/smco-stub.cpp
index 4b1e883..88c85f7 100644
--- a/examples/all-clusters-app/all-clusters-common/src/smco-stub.cpp
+++ b/examples/all-clusters-app/all-clusters-common/src/smco-stub.cpp
@@ -15,7 +15,7 @@
  *    limitations under the License.
  */
 
-#include <app/clusters/smoke-co-alarm-server/SmokeCOTestEventTriggerDelegate.h>
+#include <app/clusters/smoke-co-alarm-server/SmokeCOTestEventTriggerHandler.h>
 #include <app/clusters/smoke-co-alarm-server/smoke-co-alarm-server.h>
 
 #include <platform/CHIPDeviceLayer.h>
diff --git a/examples/all-clusters-app/ameba/main/SmokeCOAlarmManager.cpp b/examples/all-clusters-app/ameba/main/SmokeCOAlarmManager.cpp
index bede2bc..027bb05 100644
--- a/examples/all-clusters-app/ameba/main/SmokeCOAlarmManager.cpp
+++ b/examples/all-clusters-app/ameba/main/SmokeCOAlarmManager.cpp
@@ -16,7 +16,7 @@
  */
 
 #include "SmokeCOAlarmManager.h"
-#include <app/clusters/smoke-co-alarm-server/SmokeCOTestEventTriggerDelegate.h>
+#include <app/clusters/smoke-co-alarm-server/SmokeCOTestEventTriggerHandler.h>
 #include <lib/support/TypeTraits.h>
 
 using namespace chip;
diff --git a/examples/all-clusters-app/ameba/main/chipinterface.cpp b/examples/all-clusters-app/ameba/main/chipinterface.cpp
index 21280c6..20de9cd 100644
--- a/examples/all-clusters-app/ameba/main/chipinterface.cpp
+++ b/examples/all-clusters-app/ameba/main/chipinterface.cpp
@@ -140,8 +140,10 @@
     static chip::CommonCaseDeviceServerInitParams initParams;
 
 #if CONFIG_ENABLE_AMEBA_TEST_EVENT_TRIGGER
-    static AmebaTestEventTriggerDelegate testEventTriggerDelegate{ ByteSpan(sTestEventTriggerEnableKey) };
-    initParams.testEventTriggerDelegate = &testEventTriggerDelegate;
+    // TODO(#31723): Show to customers that they can do `Server::GetInstance().GetTestEventTriggerDelegate().AddHandler(xxx)`
+    // to add custom handlers during their app init, after InitServer.
+    static AmebaTestEventTriggerDelegate sTestEventTriggerDelegate{ ByteSpan(sTestEventTriggerEnableKey) };
+    initParams.testEventTriggerDelegate = &sTestEventTriggerDelegate;
 #endif
 
     initParams.InitializeStaticResourcesBeforeServerInit();
diff --git a/examples/all-clusters-app/ameba/main/include/SmokeCOAlarmManager.h b/examples/all-clusters-app/ameba/main/include/SmokeCOAlarmManager.h
index 390ee67..af61772 100644
--- a/examples/all-clusters-app/ameba/main/include/SmokeCOAlarmManager.h
+++ b/examples/all-clusters-app/ameba/main/include/SmokeCOAlarmManager.h
@@ -22,8 +22,6 @@
 #include <stdbool.h>
 #include <stdint.h>
 
-bool emberAfHandleEventTrigger(uint64_t eventTrigger);
-
 class SmokeCoAlarmManager
 {
 public:
diff --git a/examples/all-clusters-app/nrfconnect/main/AppTask.cpp b/examples/all-clusters-app/nrfconnect/main/AppTask.cpp
index 9f47194..f8d1177 100644
--- a/examples/all-clusters-app/nrfconnect/main/AppTask.cpp
+++ b/examples/all-clusters-app/nrfconnect/main/AppTask.cpp
@@ -27,8 +27,9 @@
 #include <app/server/OnboardingCodesUtil.h>
 #include <app/server/Server.h>
 
+#include <app/TestEventTriggerDelegate.h>
 #include <app/clusters/identify-server/identify-server.h>
-#include <app/clusters/ota-requestor/OTATestEventTriggerDelegate.h>
+#include <app/clusters/ota-requestor/OTATestEventTriggerHandler.h>
 #include <app/util/attribute-storage.h>
 
 #include <credentials/DeviceAttestationCredsProvider.h>
@@ -204,9 +205,12 @@
 #endif
 
     static CommonCaseDeviceServerInitParams initParams;
-    static OTATestEventTriggerDelegate testEventTriggerDelegate{ ByteSpan(sTestEventTriggerEnableKey) };
+    static SimpleTestEventTriggerDelegate sTestEventTriggerDelegate{};
+    static OTATestEventTriggerHandler sOtaTestEventTriggerHandler{};
+    VerifyOrDie(sTestEventTriggerDelegate.Init(ByteSpan(sTestEventTriggerEnableKey)) == CHIP_NO_ERROR);
+    VerifyOrDie(sTestEventTriggerDelegate.AddHandler(&sOtaTestEventTriggerHandler) == CHIP_NO_ERROR);
     (void) initParams.InitializeStaticResourcesBeforeServerInit();
-    initParams.testEventTriggerDelegate = &testEventTriggerDelegate;
+    initParams.testEventTriggerDelegate = &sTestEventTriggerDelegate;
     ReturnErrorOnFailure(chip::Server::GetInstance().Init(initParams));
     AppFabricTableDelegate::Init();
 
diff --git a/examples/energy-management-app/energy-management-common/src/EVSEManufacturerImpl.cpp b/examples/energy-management-app/energy-management-common/src/EVSEManufacturerImpl.cpp
index 70cd63e..0f20467 100644
--- a/examples/energy-management-app/energy-management-common/src/EVSEManufacturerImpl.cpp
+++ b/examples/energy-management-app/energy-management-common/src/EVSEManufacturerImpl.cpp
@@ -18,9 +18,9 @@
 
 #include <EVSEManufacturerImpl.h>
 #include <EnergyEvseManager.h>
-#include <app/clusters/electrical-energy-measurement-server/EnergyReportingTestEventTriggerDelegate.h>
+#include <app/clusters/electrical-energy-measurement-server/EnergyReportingTestEventTriggerHandler.h>
 #include <app/clusters/electrical-energy-measurement-server/electrical-energy-measurement-server.h>
-#include <app/clusters/energy-evse-server/EnergyEvseTestEventTriggerDelegate.h>
+#include <app/clusters/energy-evse-server/EnergyEvseTestEventTriggerHandler.h>
 
 using namespace chip;
 using namespace chip::app;
diff --git a/examples/energy-management-app/linux/README.md b/examples/energy-management-app/linux/README.md
index d316dd8..424ef46 100644
--- a/examples/energy-management-app/linux/README.md
+++ b/examples/energy-management-app/linux/README.md
@@ -366,7 +366,7 @@
 then you can use a few of the test event triggers to simulate these scenarios.
 
 The test event triggers values can be found in:
-[EnergyEvseTestEventTriggerDelegate.h](../../../src/app/clusters/energy-evse-server/EnergyEvseTestEventTriggerDelegate.h)
+[EnergyEvseTestEventTriggerHandler.h](../../../src/app/clusters/energy-evse-server/EnergyEvseTestEventTriggerHandler.h)
 
 -   0x0099000000000000 - Simulates the EVSE being installed on a 32A supply
 -   0x0099000000000002 - Simulates the EVSE being plugged in (this should
diff --git a/examples/light-switch-app/infineon/cyw30739/src/main.cpp b/examples/light-switch-app/infineon/cyw30739/src/main.cpp
index dbfdb81..483a475 100644
--- a/examples/light-switch-app/infineon/cyw30739/src/main.cpp
+++ b/examples/light-switch-app/infineon/cyw30739/src/main.cpp
@@ -26,8 +26,9 @@
 #if CHIP_DEVICE_CONFIG_ENABLE_OTA_REQUESTOR
 #include <OTAConfig.h>
 #endif
+#include <app/TestEventTriggerDelegate.h>
 #include <app/clusters/identify-server/identify-server.h>
-#include <app/clusters/ota-requestor/OTATestEventTriggerDelegate.h>
+#include <app/clusters/ota-requestor/OTATestEventTriggerHandler.h>
 #include <app/server/OnboardingCodesUtil.h>
 #include <app/server/Server.h>
 #include <credentials/examples/DeviceAttestationCredsExample.h>
@@ -192,10 +193,13 @@
     // Print QR Code URL
     PrintOnboardingCodes(chip::RendezvousInformationFlag(chip::RendezvousInformationFlag::kBLE));
     /* Start CHIP datamodel server */
-    static chip::OTATestEventTriggerDelegate testEventTriggerDelegate{ chip::ByteSpan(sTestEventTriggerEnableKey) };
+    static chip::SimpleTestEventTriggerDelegate sTestEventTriggerDelegate{};
+    static chip::OTATestEventTriggerHandler sOtaTestEventTriggerHandler{};
+    VerifyOrDie(sTestEventTriggerDelegate.Init(chip::ByteSpan(sTestEventTriggerEnableKey)) == CHIP_NO_ERROR);
+    VerifyOrDie(sTestEventTriggerDelegate.AddHandler(&sOtaTestEventTriggerHandler) == CHIP_NO_ERROR);
     static chip::CommonCaseDeviceServerInitParams initParams;
     (void) initParams.InitializeStaticResourcesBeforeServerInit();
-    initParams.testEventTriggerDelegate = &testEventTriggerDelegate;
+    initParams.testEventTriggerDelegate = &sTestEventTriggerDelegate;
     gExampleDeviceInfoProvider.SetStorageDelegate(initParams.persistentStorageDelegate);
     chip::DeviceLayer::SetDeviceInfoProvider(&gExampleDeviceInfoProvider);
     chip::Inet::EndPointStateOpenThread::OpenThreadEndpointInitParam nativeParams;
diff --git a/examples/light-switch-app/nrfconnect/main/AppTask.cpp b/examples/light-switch-app/nrfconnect/main/AppTask.cpp
index a4b5ac5..06ac797 100644
--- a/examples/light-switch-app/nrfconnect/main/AppTask.cpp
+++ b/examples/light-switch-app/nrfconnect/main/AppTask.cpp
@@ -24,8 +24,9 @@
 #include "LightSwitch.h"
 
 #include <DeviceInfoProviderImpl.h>
+#include <app/TestEventTriggerDelegate.h>
 #include <app/clusters/identify-server/identify-server.h>
-#include <app/clusters/ota-requestor/OTATestEventTriggerDelegate.h>
+#include <app/clusters/ota-requestor/OTATestEventTriggerHandler.h>
 #include <app/server/OnboardingCodesUtil.h>
 #include <app/server/Server.h>
 #include <credentials/DeviceAttestationCredsProvider.h>
@@ -215,9 +216,12 @@
 #endif
 
     static CommonCaseDeviceServerInitParams initParams;
-    static OTATestEventTriggerDelegate testEventTriggerDelegate{ ByteSpan(sTestEventTriggerEnableKey) };
+    static SimpleTestEventTriggerDelegate sTestEventTriggerDelegate{};
+    static OTATestEventTriggerHandler sOtaTestEventTriggerHandler{};
+    VerifyOrDie(sTestEventTriggerDelegate.Init(ByteSpan(sTestEventTriggerEnableKey)) == CHIP_NO_ERROR);
+    VerifyOrDie(sTestEventTriggerDelegate.AddHandler(&sOtaTestEventTriggerHandler) == CHIP_NO_ERROR);
     (void) initParams.InitializeStaticResourcesBeforeServerInit();
-    initParams.testEventTriggerDelegate = &testEventTriggerDelegate;
+    initParams.testEventTriggerDelegate = &sTestEventTriggerDelegate;
     ReturnErrorOnFailure(chip::Server::GetInstance().Init(initParams));
     AppFabricTableDelegate::Init();
 
diff --git a/examples/light-switch-app/qpg/BUILD.gn b/examples/light-switch-app/qpg/BUILD.gn
index 659f2d4..055cfd4 100644
--- a/examples/light-switch-app/qpg/BUILD.gn
+++ b/examples/light-switch-app/qpg/BUILD.gn
@@ -51,7 +51,7 @@
   output_name = "chip-${qpg_target_ic}-light-switch-example.out"
 
   sources = [
-    "${chip_root}/src/app/clusters/general-diagnostics-server/GenericFaultTestEventTriggerDelegate.cpp",
+    "${chip_root}/src/app/clusters/general-diagnostics-server/GenericFaultTestEventTriggerHandler.cpp",
     "${examples_plat_dir}/app/main.cpp",
     "${examples_plat_dir}/ota/ota.cpp",
     "src/AppTask.cpp",
diff --git a/examples/light-switch-app/qpg/src/AppTask.cpp b/examples/light-switch-app/qpg/src/AppTask.cpp
index 9f66622..f02823b 100644
--- a/examples/light-switch-app/qpg/src/AppTask.cpp
+++ b/examples/light-switch-app/qpg/src/AppTask.cpp
@@ -31,7 +31,8 @@
 
 #include <app/server/OnboardingCodesUtil.h>
 
-#include <app/clusters/general-diagnostics-server/GenericFaultTestEventTriggerDelegate.h>
+#include <app/TestEventTriggerDelegate.h>
+#include <app/clusters/general-diagnostics-server/GenericFaultTestEventTriggerHandler.h>
 #include <app/clusters/general-diagnostics-server/general-diagnostics-server.h>
 #include <app/clusters/identify-server/identify-server.h>
 #include <app/server/Dnssd.h>
@@ -191,10 +192,13 @@
     nativeParams.openThreadInstancePtr = chip::DeviceLayer::ThreadStackMgrImpl().OTInstance();
     initParams.endpointNativeParams    = static_cast<void *>(&nativeParams);
 
-    // Use GenericFaultTestEventTriggerDelegate to inject faults
-    static GenericFaultTestEventTriggerDelegate testEventTriggerDelegate{ ByteSpan(sTestEventTriggerEnableKey) };
+    // Use GenericFaultTestEventTriggerHandler to inject faults
+    static SimpleTestEventTriggerDelegate sTestEventTriggerDelegate{};
+    static GenericFaultTestEventTriggerHandler sFaultTestEventTriggerHandler{};
+    VerifyOrDie(sTestEventTriggerDelegate.Init(ByteSpan(sTestEventTriggerEnableKey)) == CHIP_NO_ERROR);
+    VerifyOrDie(sTestEventTriggerDelegate.AddHandler(&sFaultTestEventTriggerHandler) == CHIP_NO_ERROR);
     (void) initParams.InitializeStaticResourcesBeforeServerInit();
-    initParams.testEventTriggerDelegate = &testEventTriggerDelegate;
+    initParams.testEventTriggerDelegate = &sTestEventTriggerDelegate;
 
     chip::Server::GetInstance().Init(initParams);
 
diff --git a/examples/lighting-app/infineon/cyw30739/src/main.cpp b/examples/lighting-app/infineon/cyw30739/src/main.cpp
index 1473025..f851e2e 100644
--- a/examples/lighting-app/infineon/cyw30739/src/main.cpp
+++ b/examples/lighting-app/infineon/cyw30739/src/main.cpp
@@ -26,8 +26,9 @@
 #if CHIP_DEVICE_CONFIG_ENABLE_OTA_REQUESTOR
 #include <OTAConfig.h>
 #endif
+#include <app/TestEventTriggerDelegate.h>
 #include <app/clusters/identify-server/identify-server.h>
-#include <app/clusters/ota-requestor/OTATestEventTriggerDelegate.h>
+#include <app/clusters/ota-requestor/OTATestEventTriggerHandler.h>
 #include <app/server/OnboardingCodesUtil.h>
 #include <app/server/Server.h>
 #include <credentials/examples/DeviceAttestationCredsExample.h>
@@ -191,10 +192,13 @@
     // Print QR Code URL
     PrintOnboardingCodes(chip::RendezvousInformationFlag(chip::RendezvousInformationFlag::kBLE));
     /* Start CHIP datamodel server */
-    static chip::OTATestEventTriggerDelegate testEventTriggerDelegate{ chip::ByteSpan(sTestEventTriggerEnableKey) };
+    static chip::SimpleTestEventTriggerDelegate sTestEventTriggerDelegate{};
+    static chip::OTATestEventTriggerHandler sOtaTestEventTriggerHandler{};
+    VerifyOrDie(sTestEventTriggerDelegate.Init(chip::ByteSpan(sTestEventTriggerEnableKey)) == CHIP_NO_ERROR);
+    VerifyOrDie(sTestEventTriggerDelegate.AddHandler(&sOtaTestEventTriggerHandler) == CHIP_NO_ERROR);
     static chip::CommonCaseDeviceServerInitParams initParams;
     (void) initParams.InitializeStaticResourcesBeforeServerInit();
-    initParams.testEventTriggerDelegate = &testEventTriggerDelegate;
+    initParams.testEventTriggerDelegate = &sTestEventTriggerDelegate;
     gExampleDeviceInfoProvider.SetStorageDelegate(initParams.persistentStorageDelegate);
     chip::DeviceLayer::SetDeviceInfoProvider(&gExampleDeviceInfoProvider);
     chip::Inet::EndPointStateOpenThread::OpenThreadEndpointInitParam nativeParams;
diff --git a/examples/lighting-app/nrfconnect/main/AppTask.cpp b/examples/lighting-app/nrfconnect/main/AppTask.cpp
index 0363210..494095e 100644
--- a/examples/lighting-app/nrfconnect/main/AppTask.cpp
+++ b/examples/lighting-app/nrfconnect/main/AppTask.cpp
@@ -27,8 +27,9 @@
 #include <DeviceInfoProviderImpl.h>
 #include <app-common/zap-generated/attributes/Accessors.h>
 #include <app/DeferredAttributePersistenceProvider.h>
+#include <app/TestEventTriggerDelegate.h>
 #include <app/clusters/identify-server/identify-server.h>
-#include <app/clusters/ota-requestor/OTATestEventTriggerDelegate.h>
+#include <app/clusters/ota-requestor/OTATestEventTriggerHandler.h>
 #include <app/server/Dnssd.h>
 #include <app/server/OnboardingCodesUtil.h>
 #include <app/server/Server.h>
@@ -243,9 +244,12 @@
 #endif
 
     static CommonCaseDeviceServerInitParams initParams;
-    static OTATestEventTriggerDelegate testEventTriggerDelegate{ ByteSpan(sTestEventTriggerEnableKey) };
+    static SimpleTestEventTriggerDelegate sTestEventTriggerDelegate{};
+    static OTATestEventTriggerHandler sOtaTestEventTriggerHandler{};
+    VerifyOrDie(sTestEventTriggerDelegate.Init(ByteSpan(sTestEventTriggerEnableKey)) == CHIP_NO_ERROR);
+    VerifyOrDie(sTestEventTriggerDelegate.AddHandler(&sOtaTestEventTriggerHandler) == CHIP_NO_ERROR);
     (void) initParams.InitializeStaticResourcesBeforeServerInit();
-    initParams.testEventTriggerDelegate = &testEventTriggerDelegate;
+    initParams.testEventTriggerDelegate = &sTestEventTriggerDelegate;
     ReturnErrorOnFailure(chip::Server::GetInstance().Init(initParams));
     AppFabricTableDelegate::Init();
 
diff --git a/examples/lighting-app/nxp/k32w/k32w0/main/AppTask.cpp b/examples/lighting-app/nxp/k32w/k32w0/main/AppTask.cpp
index 557293f..b1fc51c 100644
--- a/examples/lighting-app/nxp/k32w/k32w0/main/AppTask.cpp
+++ b/examples/lighting-app/nxp/k32w/k32w0/main/AppTask.cpp
@@ -286,8 +286,8 @@
     chip::DeviceLayer::SetDeviceInfoProvider(&infoProvider);
 
     // Init ZCL Data Model and start server
-    static DefaultTestEventTriggerDelegate testEventTriggerDelegate{ ByteSpan(sTestEventTriggerEnableKey) };
-    initParams.testEventTriggerDelegate = &testEventTriggerDelegate;
+    static DefaultTestEventTriggerDelegate sTestEventTriggerDelegate{ ByteSpan(sTestEventTriggerEnableKey) };
+    initParams.testEventTriggerDelegate = &sTestEventTriggerDelegate;
     chip::Inet::EndPointStateOpenThread::OpenThreadEndpointInitParam nativeParams;
     nativeParams.lockCb                = LockOpenThreadTask;
     nativeParams.unlockCb              = UnlockOpenThreadTask;
diff --git a/examples/lighting-app/nxp/k32w/k32w1/main/AppTask.cpp b/examples/lighting-app/nxp/k32w/k32w1/main/AppTask.cpp
index 66eee72..7150003 100644
--- a/examples/lighting-app/nxp/k32w/k32w1/main/AppTask.cpp
+++ b/examples/lighting-app/nxp/k32w/k32w1/main/AppTask.cpp
@@ -214,8 +214,8 @@
 #endif
 
     // Init ZCL Data Model and start server
-    static DefaultTestEventTriggerDelegate testEventTriggerDelegate{ ByteSpan(sTestEventTriggerEnableKey) };
-    initParams.testEventTriggerDelegate = &testEventTriggerDelegate;
+    static DefaultTestEventTriggerDelegate sTestEventTriggerDelegate{ ByteSpan(sTestEventTriggerEnableKey) };
+    initParams.testEventTriggerDelegate = &sTestEventTriggerDelegate;
     chip::Inet::EndPointStateOpenThread::OpenThreadEndpointInitParam nativeParams;
     nativeParams.lockCb                = LockOpenThreadTask;
     nativeParams.unlockCb              = UnlockOpenThreadTask;
diff --git a/examples/lighting-app/qpg/BUILD.gn b/examples/lighting-app/qpg/BUILD.gn
index d8f8631..c835e0b 100644
--- a/examples/lighting-app/qpg/BUILD.gn
+++ b/examples/lighting-app/qpg/BUILD.gn
@@ -51,7 +51,7 @@
   output_name = "chip-${qpg_target_ic}-lighting-example.out"
 
   sources = [
-    "${chip_root}/src/app/clusters/general-diagnostics-server/GenericFaultTestEventTriggerDelegate.cpp",
+    "${chip_root}/src/app/clusters/general-diagnostics-server/GenericFaultTestEventTriggerHandler.cpp",
     "${examples_plat_dir}/app/main.cpp",
     "${examples_plat_dir}/ota/ota.cpp",
     "${examples_plat_dir}/powercycle_counting.c",
diff --git a/examples/lighting-app/qpg/src/AppTask.cpp b/examples/lighting-app/qpg/src/AppTask.cpp
index 1dd1aa8..4dafde6 100644
--- a/examples/lighting-app/qpg/src/AppTask.cpp
+++ b/examples/lighting-app/qpg/src/AppTask.cpp
@@ -33,7 +33,8 @@
 #include <app/server/OnboardingCodesUtil.h>
 
 #include <app-common/zap-generated/attributes/Accessors.h>
-#include <app/clusters/general-diagnostics-server/GenericFaultTestEventTriggerDelegate.h>
+#include <app/TestEventTriggerDelegate.h>
+#include <app/clusters/general-diagnostics-server/GenericFaultTestEventTriggerHandler.h>
 #include <app/clusters/general-diagnostics-server/general-diagnostics-server.h>
 #include <app/clusters/identify-server/identify-server.h>
 #include <app/clusters/on-off-server/on-off-server.h>
@@ -264,10 +265,13 @@
     nativeParams.openThreadInstancePtr = chip::DeviceLayer::ThreadStackMgrImpl().OTInstance();
     initParams.endpointNativeParams    = static_cast<void *>(&nativeParams);
 
-    // Use GenericFaultTestEventTriggerDelegate to inject faults
-    static GenericFaultTestEventTriggerDelegate testEventTriggerDelegate{ ByteSpan(sTestEventTriggerEnableKey) };
+    // Use GenericFaultTestEventTriggerHandler to inject faults
+    static SimpleTestEventTriggerDelegate sTestEventTriggerDelegate{};
+    static GenericFaultTestEventTriggerHandler sFaultTestEventTriggerHandler{};
+    VerifyOrDie(sTestEventTriggerDelegate.Init(ByteSpan(sTestEventTriggerEnableKey)) == CHIP_NO_ERROR);
+    VerifyOrDie(sTestEventTriggerDelegate.AddHandler(&sFaultTestEventTriggerHandler) == CHIP_NO_ERROR);
     (void) initParams.InitializeStaticResourcesBeforeServerInit();
-    initParams.testEventTriggerDelegate = &testEventTriggerDelegate;
+    initParams.testEventTriggerDelegate = &sTestEventTriggerDelegate;
 
     chip::Server::GetInstance().Init(initParams);
 
diff --git a/examples/lock-app/infineon/cyw30739/src/main.cpp b/examples/lock-app/infineon/cyw30739/src/main.cpp
index 76fa848..a0a9248 100644
--- a/examples/lock-app/infineon/cyw30739/src/main.cpp
+++ b/examples/lock-app/infineon/cyw30739/src/main.cpp
@@ -28,9 +28,10 @@
 #if CHIP_DEVICE_CONFIG_ENABLE_OTA_REQUESTOR
 #include <OTAConfig.h>
 #endif
+#include <app/TestEventTriggerDelegate.h>
 #include <app/clusters/door-lock-server/door-lock-server.h>
 #include <app/clusters/identify-server/identify-server.h>
-#include <app/clusters/ota-requestor/OTATestEventTriggerDelegate.h>
+#include <app/clusters/ota-requestor/OTATestEventTriggerHandler.h>
 #include <app/server/OnboardingCodesUtil.h>
 #include <app/server/Server.h>
 #include <credentials/examples/DeviceAttestationCredsExample.h>
@@ -191,10 +192,13 @@
     // Print QR Code URL
     PrintOnboardingCodes(chip::RendezvousInformationFlag(chip::RendezvousInformationFlag::kBLE));
     /* Start CHIP datamodel server */
-    static chip::OTATestEventTriggerDelegate testEventTriggerDelegate{ chip::ByteSpan(sTestEventTriggerEnableKey) };
+    static chip::SimpleTestEventTriggerDelegate sTestEventTriggerDelegate{};
+    static chip::OTATestEventTriggerHandler sOtaTestEventTriggerHandler{};
+    VerifyOrDie(sTestEventTriggerDelegate.Init(chip::ByteSpan(sTestEventTriggerEnableKey)) == CHIP_NO_ERROR);
+    VerifyOrDie(sTestEventTriggerDelegate.AddHandler(&sOtaTestEventTriggerHandler) == CHIP_NO_ERROR);
     static chip::CommonCaseDeviceServerInitParams initParams;
     (void) initParams.InitializeStaticResourcesBeforeServerInit();
-    initParams.testEventTriggerDelegate = &testEventTriggerDelegate;
+    initParams.testEventTriggerDelegate = &sTestEventTriggerDelegate;
     gExampleDeviceInfoProvider.SetStorageDelegate(initParams.persistentStorageDelegate);
     chip::DeviceLayer::SetDeviceInfoProvider(&gExampleDeviceInfoProvider);
     chip::Inet::EndPointStateOpenThread::OpenThreadEndpointInitParam nativeParams;
diff --git a/examples/lock-app/nrfconnect/main/AppTask.cpp b/examples/lock-app/nrfconnect/main/AppTask.cpp
index d64a495..07a96b6 100644
--- a/examples/lock-app/nrfconnect/main/AppTask.cpp
+++ b/examples/lock-app/nrfconnect/main/AppTask.cpp
@@ -25,9 +25,10 @@
 
 #include <DeviceInfoProviderImpl.h>
 #include <app-common/zap-generated/attributes/Accessors.h>
+#include <app/TestEventTriggerDelegate.h>
 #include <app/clusters/door-lock-server/door-lock-server.h>
 #include <app/clusters/identify-server/identify-server.h>
-#include <app/clusters/ota-requestor/OTATestEventTriggerDelegate.h>
+#include <app/clusters/ota-requestor/OTATestEventTriggerHandler.h>
 #include <app/server/OnboardingCodesUtil.h>
 #include <app/server/Server.h>
 #include <credentials/DeviceAttestationCredsProvider.h>
@@ -209,9 +210,12 @@
 #endif
 
     static CommonCaseDeviceServerInitParams initParams;
-    static OTATestEventTriggerDelegate testEventTriggerDelegate{ ByteSpan(sTestEventTriggerEnableKey) };
+    static SimpleTestEventTriggerDelegate sTestEventTriggerDelegate{};
+    static OTATestEventTriggerHandler sOtaTestEventTriggerHandler{};
+    VerifyOrDie(sTestEventTriggerDelegate.Init(ByteSpan(sTestEventTriggerEnableKey)) == CHIP_NO_ERROR);
+    VerifyOrDie(sTestEventTriggerDelegate.AddHandler(&sOtaTestEventTriggerHandler) == CHIP_NO_ERROR);
     (void) initParams.InitializeStaticResourcesBeforeServerInit();
-    initParams.testEventTriggerDelegate = &testEventTriggerDelegate;
+    initParams.testEventTriggerDelegate = &sTestEventTriggerDelegate;
     ReturnErrorOnFailure(chip::Server::GetInstance().Init(initParams));
     AppFabricTableDelegate::Init();
 
diff --git a/examples/lock-app/qpg/BUILD.gn b/examples/lock-app/qpg/BUILD.gn
index 2426fa7..3079487 100644
--- a/examples/lock-app/qpg/BUILD.gn
+++ b/examples/lock-app/qpg/BUILD.gn
@@ -51,7 +51,7 @@
   output_name = "chip-${qpg_target_ic}-lock-example.out"
 
   sources = [
-    "${chip_root}/src/app/clusters/general-diagnostics-server/GenericFaultTestEventTriggerDelegate.cpp",
+    "${chip_root}/src/app/clusters/general-diagnostics-server/GenericFaultTestEventTriggerHandler.cpp",
     "${examples_plat_dir}/app/main.cpp",
     "${examples_plat_dir}/ota/ota.cpp",
     "src/AppTask.cpp",
diff --git a/examples/lock-app/qpg/src/AppTask.cpp b/examples/lock-app/qpg/src/AppTask.cpp
index 8bbd6b7..54a4b2a 100644
--- a/examples/lock-app/qpg/src/AppTask.cpp
+++ b/examples/lock-app/qpg/src/AppTask.cpp
@@ -26,7 +26,8 @@
 #include <app/server/OnboardingCodesUtil.h>
 
 #include <app-common/zap-generated/attributes/Accessors.h>
-#include <app/clusters/general-diagnostics-server/GenericFaultTestEventTriggerDelegate.h>
+#include <app/TestEventTriggerDelegate.h>
+#include <app/clusters/general-diagnostics-server/GenericFaultTestEventTriggerHandler.h>
 #include <app/clusters/general-diagnostics-server/general-diagnostics-server.h>
 #include <app/clusters/identify-server/identify-server.h>
 #include <app/server/Dnssd.h>
@@ -189,10 +190,13 @@
     nativeParams.openThreadInstancePtr = chip::DeviceLayer::ThreadStackMgrImpl().OTInstance();
     initParams.endpointNativeParams    = static_cast<void *>(&nativeParams);
 
-    // Use GenericFaultTestEventTriggerDelegate to inject faults
-    static GenericFaultTestEventTriggerDelegate testEventTriggerDelegate{ ByteSpan(sTestEventTriggerEnableKey) };
+    // Use GenericFaultTestEventTriggerHandler to inject faults
+    static SimpleTestEventTriggerDelegate sTestEventTriggerDelegate{};
+    static GenericFaultTestEventTriggerHandler sFaultTestEventTriggerHandler{};
+    VerifyOrDie(sTestEventTriggerDelegate.Init(ByteSpan(sTestEventTriggerEnableKey)) == CHIP_NO_ERROR);
+    VerifyOrDie(sTestEventTriggerDelegate.AddHandler(&sFaultTestEventTriggerHandler) == CHIP_NO_ERROR);
     (void) initParams.InitializeStaticResourcesBeforeServerInit();
-    initParams.testEventTriggerDelegate = &testEventTriggerDelegate;
+    initParams.testEventTriggerDelegate = &sTestEventTriggerDelegate;
 
     chip::Server::GetInstance().Init(initParams);
 
diff --git a/examples/platform/ameba/test_event_trigger/AmebaTestEventTriggerDelegate.cpp b/examples/platform/ameba/test_event_trigger/AmebaTestEventTriggerDelegate.cpp
index 9cfddd6..8bbae5e 100644
--- a/examples/platform/ameba/test_event_trigger/AmebaTestEventTriggerDelegate.cpp
+++ b/examples/platform/ameba/test_event_trigger/AmebaTestEventTriggerDelegate.cpp
@@ -28,10 +28,4 @@
     return !mEnableKey.empty() && mEnableKey.data_equal(enableKey);
 }
 
-CHIP_ERROR AmebaTestEventTriggerDelegate::HandleEventTrigger(uint64_t eventTrigger)
-{
-    bool success = emberAfHandleEventTrigger(eventTrigger);
-    return success ? CHIP_NO_ERROR : CHIP_ERROR_INVALID_ARGUMENT;
-}
-
 } // namespace chip
diff --git a/examples/platform/ameba/test_event_trigger/AmebaTestEventTriggerDelegate.h b/examples/platform/ameba/test_event_trigger/AmebaTestEventTriggerDelegate.h
index d461194..9e77040 100644
--- a/examples/platform/ameba/test_event_trigger/AmebaTestEventTriggerDelegate.h
+++ b/examples/platform/ameba/test_event_trigger/AmebaTestEventTriggerDelegate.h
@@ -18,35 +18,12 @@
 
 #pragma once
 
-#include "SmokeCOAlarmManager.h"
+#include <stdint.h>
+
 #include <app/TestEventTriggerDelegate.h>
-
-namespace chip {
-
-class AmebaTestEventTriggerDelegate : public TestEventTriggerDelegate
-{
-public:
-    explicit AmebaTestEventTriggerDelegate(const ByteSpan & enableKey) : mEnableKey(enableKey) {}
-
-    /**
-     * @brief Checks to see if `enableKey` provided matches value chosen by the manufacturer.
-     * @param enableKey Buffer of the key to verify.
-     * @return True or False.
-     */
-    bool DoesEnableKeyMatch(const ByteSpan & enableKey) const override;
-
-    /**
-     * @brief User handler for handling the test event trigger based on `eventTrigger` provided.
-     * @param eventTrigger Event trigger to handle.
-     * @return CHIP_NO_ERROR on success or CHIP_ERROR_INVALID_ARGUMENT on failure.
-     */
-    CHIP_ERROR HandleEventTrigger(uint64_t eventTrigger) override;
-
-private:
-    ByteSpan mEnableKey;
-};
-
-} // namespace chip
+#include <lib/core/CHIPError.h>
+#include <lib/support/CodeUtils.h>
+#include <lib/support/Span.h>
 
 /**
  * @brief User handler for handling the test event trigger
@@ -55,7 +32,40 @@
  *
  * @param eventTrigger Event trigger to handle
  *
+ * @warning *** DO NOT USE FOR STANDARD CLUSTER EVENT TRIGGERS ***
+ *
+ * TODO(#31723): Rename `emberAfHandleEventTrigger` to `AmebaHandleGlobalTestEventTrigger`
+ *
  * @retval true on success
  * @retval false if error happened
  */
 bool emberAfHandleEventTrigger(uint64_t eventTrigger);
+
+namespace chip {
+
+class AmebaTestEventTriggerDelegate : public TestEventTriggerDelegate, TestEventTriggerHandler
+{
+public:
+    explicit AmebaTestEventTriggerDelegate(const ByteSpan & enableKey) : mEnableKey(enableKey)
+    {
+        VerifyOrDie(AddHandler(this) == CHIP_NO_ERROR);
+    }
+
+    /**
+     * @brief Checks to see if `enableKey` provided matches value chosen by the manufacturer.
+     * @param enableKey Buffer of the key to verify.
+     * @return True or False.
+     */
+    bool DoesEnableKeyMatch(const ByteSpan & enableKey) const override;
+
+    CHIP_ERROR HandleEventTrigger(uint64_t eventTrigger) override
+    {
+        // WARNING: LEGACY SUPPORT ONLY, DO NOT EXTEND FOR STANDARD CLUSTERS
+        return (emberAfHandleEventTrigger(eventTrigger)) ? CHIP_NO_ERROR : CHIP_ERROR_INVALID_ARGUMENT;
+    }
+
+private:
+    ByteSpan mEnableKey;
+};
+
+} // namespace chip
diff --git a/examples/platform/esp32/common/Esp32AppServer.cpp b/examples/platform/esp32/common/Esp32AppServer.cpp
index fee8788..b60685d 100644
--- a/examples/platform/esp32/common/Esp32AppServer.cpp
+++ b/examples/platform/esp32/common/Esp32AppServer.cpp
@@ -19,8 +19,9 @@
 #include "Esp32AppServer.h"
 #include "CHIPDeviceManager.h"
 #include <app/InteractionModelEngine.h>
+#include <app/TestEventTriggerDelegate.h>
 #include <app/clusters/network-commissioning/network-commissioning.h>
-#include <app/clusters/ota-requestor/OTATestEventTriggerDelegate.h>
+#include <app/clusters/ota-requestor/OTATestEventTriggerHandler.h>
 #include <app/server/Dnssd.h>
 #include <app/server/Server.h>
 #include <platform/ESP32/NetworkCommissioningDriver.h>
@@ -169,8 +170,11 @@
         ESP_LOGE(TAG, "Failed to convert the EnableKey string to octstr type value");
         memset(sTestEventTriggerEnableKey, 0, sizeof(sTestEventTriggerEnableKey));
     }
-    static OTATestEventTriggerDelegate testEventTriggerDelegate{ ByteSpan(sTestEventTriggerEnableKey) };
-    initParams.testEventTriggerDelegate = &testEventTriggerDelegate;
+    static SimpleTestEventTriggerDelegate sTestEventTriggerDelegate{};
+    static OTATestEventTriggerHandler sOtaTestEventTriggerHandler{};
+    VerifyOrDie(sTestEventTriggerDelegate.Init(ByteSpan(sTestEventTriggerEnableKey)) == CHIP_NO_ERROR);
+    VerifyOrDie(sTestEventTriggerDelegate.AddHandler(&sOtaTestEventTriggerHandler) == CHIP_NO_ERROR);
+    initParams.testEventTriggerDelegate = &sTestEventTriggerDelegate;
 #endif // CONFIG_TEST_EVENT_TRIGGER_ENABLED
     (void) initParams.InitializeStaticResourcesBeforeServerInit();
     if (sAppDelegate != nullptr)
diff --git a/examples/platform/linux/AppMain.cpp b/examples/platform/linux/AppMain.cpp
index 04274ab..061d7b6 100644
--- a/examples/platform/linux/AppMain.cpp
+++ b/examples/platform/linux/AppMain.cpp
@@ -75,19 +75,19 @@
 #endif
 
 #if CHIP_DEVICE_CONFIG_ENABLE_OTA_REQUESTOR
-#include <app/clusters/ota-requestor/OTATestEventTriggerDelegate.h>
+#include <app/clusters/ota-requestor/OTATestEventTriggerHandler.h>
 #endif
 #if CHIP_DEVICE_CONFIG_ENABLE_SMOKE_CO_TRIGGER
-#include <app/clusters/smoke-co-alarm-server/SmokeCOTestEventTriggerDelegate.h>
+#include <app/clusters/smoke-co-alarm-server/SmokeCOTestEventTriggerHandler.h>
 #endif
 #if CHIP_DEVICE_CONFIG_ENABLE_BOOLEAN_STATE_CONFIGURATION_TRIGGER
-#include <app/clusters/boolean-state-configuration-server/BooleanStateConfigurationTestEventTriggerDelegate.h>
+#include <app/clusters/boolean-state-configuration-server/BooleanStateConfigurationTestEventTriggerHandler.h>
 #endif
 #if CHIP_DEVICE_CONFIG_ENABLE_ENERGY_EVSE_TRIGGER
-#include <app/clusters/energy-evse-server/EnergyEvseTestEventTriggerDelegate.h>
+#include <app/clusters/energy-evse-server/EnergyEvseTestEventTriggerHandler.h>
 #endif
 #if CHIP_DEVICE_CONFIG_ENABLE_ENERGY_REPORTING_TRIGGER
-#include <app/clusters/electrical-energy-measurement-server/EnergyReportingTestEventTriggerDelegate.h>
+#include <app/clusters/electrical-energy-measurement-server/EnergyReportingTestEventTriggerHandler.h>
 #endif
 #include <app/TestEventTriggerDelegate.h>
 
@@ -331,34 +331,13 @@
 }
 #endif
 
-class SampleTestEventTriggerDelegate : public TestEventTriggerDelegate
+class SampleTestEventTriggerHandler : public TestEventTriggerHandler
 {
-public:
-    /// NOTE: If you copy this, please use the reserved range FFFF_FFFF_<VID_HEX>_xxxx for your trigger codes.
+    /// NOTE: If you copy this for NON-STANDARD CLUSTERS OR USAGES, please use the reserved range FFFF_FFFF_<VID_HEX>_xxxx for your
+    /// trigger codes. NOTE: Standard codes are <CLUSTER_ID_HEX>_xxxx_xxxx_xxxx.
     static constexpr uint64_t kSampleTestEventTriggerAlwaysSuccess = static_cast<uint64_t>(0xFFFF'FFFF'FFF1'0000ull);
 
-    SampleTestEventTriggerDelegate() { memset(&mEnableKey[0], 0, sizeof(mEnableKey)); }
-
-    /**
-     * @brief Initialize the delegate with a key and an optional other handler
-     *
-     * The `otherDelegate` will be called if there is no match of the eventTrigger
-     * when HandleEventTrigger is called, if it is non-null.
-     *
-     * @param enableKey - EnableKey to use for this instance.
-     * @param otherDelegate - Other delegate (e.g. OTA delegate) where defer trigger. Can be nullptr
-     * @return CHIP_NO_ERROR on success, CHIP_ERROR_INVALID_ARGUMENT if enableKey is wrong size.
-     */
-    CHIP_ERROR Init(ByteSpan enableKey, TestEventTriggerDelegate * otherDelegate)
-    {
-        VerifyOrReturnError(enableKey.size() == sizeof(mEnableKey), CHIP_ERROR_INVALID_ARGUMENT);
-        mOtherDelegate = otherDelegate;
-        MutableByteSpan ourEnableKeySpan(mEnableKey);
-        return CopySpanToMutableSpan(enableKey, ourEnableKeySpan);
-    }
-
-    bool DoesEnableKeyMatch(const ByteSpan & enableKey) const override { return enableKey.data_equal(ByteSpan(mEnableKey)); }
-
+public:
     CHIP_ERROR HandleEventTrigger(uint64_t eventTrigger) override
     {
         ChipLogProgress(Support, "Saw TestEventTrigger: " ChipLogFormatX64, ChipLogValueX64(eventTrigger));
@@ -370,12 +349,8 @@
             return CHIP_NO_ERROR;
         }
 
-        return (mOtherDelegate != nullptr) ? mOtherDelegate->HandleEventTrigger(eventTrigger) : CHIP_ERROR_INVALID_ARGUMENT;
+        return CHIP_ERROR_INVALID_ARGUMENT;
     }
-
-private:
-    uint8_t mEnableKey[TestEventTriggerDelegate::kEnableKeyLength];
-    TestEventTriggerDelegate * mOtherDelegate = nullptr;
 };
 
 int ChipLinuxAppInit(int argc, char * const argv[], OptionSet * customOptions,
@@ -549,44 +524,36 @@
         initParams.operationalKeystore = &LinuxDeviceOptions::GetInstance().mCSRResponseOptions.badCsrOperationalKeyStoreForTest;
     }
 
-    TestEventTriggerDelegate * otherDelegate = nullptr;
+    // For general testing of TestEventTrigger, we have a common "core" event trigger delegate.
+    static SimpleTestEventTriggerDelegate sTestEventTriggerDelegate;
+    static SampleTestEventTriggerHandler sTestEventTriggerHandler;
+    VerifyOrDie(sTestEventTriggerDelegate.Init(ByteSpan(LinuxDeviceOptions::GetInstance().testEventTriggerEnableKey)) ==
+                CHIP_NO_ERROR);
+    VerifyOrDie(sTestEventTriggerDelegate.AddHandler(&sTestEventTriggerHandler) == CHIP_NO_ERROR);
+
 #if CHIP_DEVICE_CONFIG_ENABLE_OTA_REQUESTOR
     // We want to allow triggering OTA queries if OTA requestor is enabled
-    static OTATestEventTriggerDelegate otaTestEventTriggerDelegate{ ByteSpan(
-        LinuxDeviceOptions::GetInstance().testEventTriggerEnableKey) };
-    otherDelegate = &otaTestEventTriggerDelegate;
+    static OTATestEventTriggerHandler sOtaTestEventTriggerHandler;
+    sTestEventTriggerDelegate.AddHandler(&sOtaTestEventTriggerHandler);
 #endif
 #if CHIP_DEVICE_CONFIG_ENABLE_SMOKE_CO_TRIGGER
-    static SmokeCOTestEventTriggerDelegate smokeCOTestEventTriggerDelegate{
-        ByteSpan(LinuxDeviceOptions::GetInstance().testEventTriggerEnableKey), otherDelegate
-    };
-    otherDelegate = &smokeCOTestEventTriggerDelegate;
+    static SmokeCOTestEventTriggerHandler sSmokeCOTestEventTriggerHandler;
+    sTestEventTriggerDelegate.AddHandler(&sSmokeCOTestEventTriggerHandler);
 #endif
 #if CHIP_DEVICE_CONFIG_ENABLE_BOOLEAN_STATE_CONFIGURATION_TRIGGER
-    static BooleanStateConfigurationTestEventTriggerDelegate booleanStateConfigurationTestEventTriggerDelegate{
-        ByteSpan(LinuxDeviceOptions::GetInstance().testEventTriggerEnableKey), otherDelegate
-    };
-    otherDelegate = &booleanStateConfigurationTestEventTriggerDelegate;
+    static BooleanStateConfigurationTestEventTriggerHandler sBooleanStateConfigurationTestEventTriggerHandler;
+    sTestEventTriggerDelegate.AddHandler(&sBooleanStateConfigurationTestEventTriggerHandler);
 #endif
 #if CHIP_DEVICE_CONFIG_ENABLE_ENERGY_EVSE_TRIGGER
-    static EnergyEvseTestEventTriggerDelegate energyEvseTestEventTriggerDelegate{
-        ByteSpan(LinuxDeviceOptions::GetInstance().testEventTriggerEnableKey), otherDelegate
-    };
-    otherDelegate = &energyEvseTestEventTriggerDelegate;
+    static EnergyEvseTestEventTriggerHandler sEnergyEvseTestEventTriggerHandler;
+    sTestEventTriggerDelegate.AddHandler(&sEnergyEvseTestEventTriggerHandler);
 #endif
 #if CHIP_DEVICE_CONFIG_ENABLE_ENERGY_REPORTING_TRIGGER
-    static EnergyReportingTestEventTriggerDelegate energyReportingTestEventTriggerDelegate{
-        ByteSpan(LinuxDeviceOptions::GetInstance().testEventTriggerEnableKey), otherDelegate
-    };
-    otherDelegate = &energyReportingTestEventTriggerDelegate;
+    static EnergyReportingTestEventTriggerHandler sEnergyReportingTestEventTriggerHandler;
+    sTestEventTriggerDelegate.AddHandler(&sEnergyReportingTestEventTriggerHandler);
 #endif
 
-    // For general testing of TestEventTrigger, we have a common "core" event trigger delegate.
-    static SampleTestEventTriggerDelegate testEventTriggerDelegate;
-    VerifyOrDie(testEventTriggerDelegate.Init(ByteSpan(LinuxDeviceOptions::GetInstance().testEventTriggerEnableKey),
-                                              otherDelegate) == CHIP_NO_ERROR);
-
-    initParams.testEventTriggerDelegate = &testEventTriggerDelegate;
+    initParams.testEventTriggerDelegate = &sTestEventTriggerDelegate;
 
     // We need to set DeviceInfoProvider before Server::Init to setup the storage of DeviceInfoProvider properly.
     DeviceLayer::SetDeviceInfoProvider(&gExampleDeviceInfoProvider);
diff --git a/examples/platform/linux/BUILD.gn b/examples/platform/linux/BUILD.gn
index f82702b..8cf00c5 100644
--- a/examples/platform/linux/BUILD.gn
+++ b/examples/platform/linux/BUILD.gn
@@ -32,24 +32,24 @@
 
 source_set("ota-test-event-trigger") {
   sources = [
-    "${chip_root}/src/app/clusters/ota-requestor/OTATestEventTriggerDelegate.h",
+    "${chip_root}/src/app/clusters/ota-requestor/OTATestEventTriggerHandler.h",
   ]
 }
 
 source_set("smco-test-event-trigger") {
-  sources = [ "${chip_root}/src/app/clusters/smoke-co-alarm-server/SmokeCOTestEventTriggerDelegate.h" ]
+  sources = [ "${chip_root}/src/app/clusters/smoke-co-alarm-server/SmokeCOTestEventTriggerHandler.h" ]
 }
 
 source_set("boolean-state-configuration-test-event-trigger") {
-  sources = [ "${chip_root}/src/app/clusters/boolean-state-configuration-server/BooleanStateConfigurationTestEventTriggerDelegate.h" ]
+  sources = [ "${chip_root}/src/app/clusters/boolean-state-configuration-server/BooleanStateConfigurationTestEventTriggerHandler.h" ]
 }
 
 source_set("energy-evse-test-event-trigger") {
-  sources = [ "${chip_root}/src/app/clusters/energy-evse-server/EnergyEvseTestEventTriggerDelegate.h" ]
+  sources = [ "${chip_root}/src/app/clusters/energy-evse-server/EnergyEvseTestEventTriggerHandler.h" ]
 }
 
 source_set("energy-reporting-test-event-trigger") {
-  sources = [ "${chip_root}/src/app/clusters/electrical-energy-measurement-server/EnergyReportingTestEventTriggerDelegate.h" ]
+  sources = [ "${chip_root}/src/app/clusters/electrical-energy-measurement-server/EnergyReportingTestEventTriggerHandler.h" ]
 }
 
 source_set("app-main") {
diff --git a/examples/platform/nxp/se05x/linux/AppMain.cpp b/examples/platform/nxp/se05x/linux/AppMain.cpp
index 2c04b81..bd13e24 100644
--- a/examples/platform/nxp/se05x/linux/AppMain.cpp
+++ b/examples/platform/nxp/se05x/linux/AppMain.cpp
@@ -69,7 +69,8 @@
 #endif // CHIP_CONFIG_TRANSPORT_TRACE_ENABLED
 
 #if CHIP_DEVICE_CONFIG_ENABLE_OTA_REQUESTOR
-#include <app/clusters/ota-requestor/OTATestEventTriggerDelegate.h>
+#include <app/TestEventTriggerDelegate.h>
+#include <app/clusters/ota-requestor/OTATestEventTriggerHandler.h>
 #endif
 
 #include <signal.h>
@@ -315,9 +316,12 @@
     }
 
 #if CHIP_DEVICE_CONFIG_ENABLE_OTA_REQUESTOR
-    static OTATestEventTriggerDelegate testEventTriggerDelegate{ ByteSpan(
-        LinuxDeviceOptions::GetInstance().testEventTriggerEnableKey) };
-    initParams.testEventTriggerDelegate = &testEventTriggerDelegate;
+    static SimpleTestEventTriggerDelegate sTestEventTriggerDelegate{};
+    static OTATestEventTriggerHandler sOtaTestEventTriggerHandler{};
+    VerifyOrDie(sTestEventTriggerDelegate.Init(ByteSpan(LinuxDeviceOptions::GetInstance().testEventTriggerEnableKey)) ==
+                CHIP_NO_ERROR);
+    VerifyOrDie(sTestEventTriggerDelegate.AddHandler(&sOtaTestEventTriggerHandler) == CHIP_NO_ERROR);
+    initParams.testEventTriggerDelegate = &sTestEventTriggerDelegate;
 #endif
 
     // We need to set DeviceInfoProvider before Server::Init to setup the storage of DeviceInfoProvider properly.
diff --git a/examples/platform/nxp/se05x/linux/BUILD.gn b/examples/platform/nxp/se05x/linux/BUILD.gn
index 2a93a4b..a5efe46 100644
--- a/examples/platform/nxp/se05x/linux/BUILD.gn
+++ b/examples/platform/nxp/se05x/linux/BUILD.gn
@@ -25,7 +25,7 @@
 
 source_set("ota-test-event-trigger") {
   sources = [
-    "${chip_root}/src/app/clusters/ota-requestor/OTATestEventTriggerDelegate.h",
+    "${chip_root}/src/app/clusters/ota-requestor/OTATestEventTriggerHandler.h",
   ]
 }
 
diff --git a/examples/platform/silabs/MatterConfig.cpp b/examples/platform/silabs/MatterConfig.cpp
index 1197e4d..3a78cf7 100644
--- a/examples/platform/silabs/MatterConfig.cpp
+++ b/examples/platform/silabs/MatterConfig.cpp
@@ -219,8 +219,9 @@
         SILABS_LOG("Failed to convert the EnableKey string to octstr type value");
         memset(sTestEventTriggerEnableKey, 0, sizeof(sTestEventTriggerEnableKey));
     }
-    static SilabsTestEventTriggerDelegate testEventTriggerDelegate{ ByteSpan(sTestEventTriggerEnableKey) };
-    initParams.testEventTriggerDelegate = &testEventTriggerDelegate;
+    // TODO(#31723): Show to customers that they can do `Server::GetInstance().GetTestEventTriggerDelegate().AddHandler()`
+    static SilabsTestEventTriggerDelegate sTestEventTriggerDelegate{ ByteSpan(sTestEventTriggerEnableKey) };
+    initParams.testEventTriggerDelegate = &sTestEventTriggerDelegate;
 #endif // SILABS_TEST_EVENT_TRIGGER_ENABLED
 
 #if CHIP_CRYPTO_PLATFORM && !(defined(SIWX_917))
@@ -232,8 +233,9 @@
 
 #ifdef PERFORMANCE_TEST_ENABLED
     // Set up Test Event Trigger command of the General Diagnostics cluster. Used only in performance testing
-    static SilabsTestEventTriggerDelegate testEventTriggerDelegate{ ByteSpan(kTestEventTriggerEnableKey) };
-    initParams.testEventTriggerDelegate = &testEventTriggerDelegate;
+    // TODO(#31723): Show to customers that they can do `Server::GetInstance().GetTestEventTriggerDelegate().AddHandler()`
+    static SilabsTestEventTriggerDelegate sTestEventTriggerDelegate{ ByteSpan(kTestEventTriggerEnableKey) };
+    initParams.testEventTriggerDelegate = &sTestEventTriggerDelegate;
 #endif
 
     // Initialize the remaining (not overridden) providers to the SDK example defaults
diff --git a/examples/platform/silabs/SilabsTestEventTriggerDelegate.cpp b/examples/platform/silabs/SilabsTestEventTriggerDelegate.cpp
index f231067..f9a11df 100644
--- a/examples/platform/silabs/SilabsTestEventTriggerDelegate.cpp
+++ b/examples/platform/silabs/SilabsTestEventTriggerDelegate.cpp
@@ -27,10 +27,4 @@
     return !mEnableKey.empty() && mEnableKey.data_equal(enableKey);
 }
 
-CHIP_ERROR SilabsTestEventTriggerDelegate::HandleEventTrigger(uint64_t eventTrigger)
-{
-    bool success = emberAfHandleEventTrigger(eventTrigger);
-    return success ? CHIP_NO_ERROR : CHIP_ERROR_INVALID_ARGUMENT;
-}
-
 } // namespace chip
diff --git a/examples/platform/silabs/SilabsTestEventTriggerDelegate.h b/examples/platform/silabs/SilabsTestEventTriggerDelegate.h
index e9cd62f..e08e972 100644
--- a/examples/platform/silabs/SilabsTestEventTriggerDelegate.h
+++ b/examples/platform/silabs/SilabsTestEventTriggerDelegate.h
@@ -18,14 +18,38 @@
 
 #pragma once
 
+#include <stdint.h>
+
 #include <app/TestEventTriggerDelegate.h>
+#include <lib/core/CHIPError.h>
+#include <lib/support/CodeUtils.h>
+#include <lib/support/Span.h>
+
+/**
+ * @brief User handler for handling the test event trigger
+ *
+ * @note If TestEventTrigger is enabled, it needs to be implemented in the app
+ *
+ * @param eventTrigger Event trigger to handle
+ *
+ * @warning *** DO NOT USE FOR STANDARD CLUSTER EVENT TRIGGERS ***
+ *
+ * TODO(#31723): Rename `emberAfHandleEventTrigger` to `AmebaHandleGlobalTestEventTrigger`
+ *
+ * @retval true on success
+ * @retval false if error happened
+ */
+bool emberAfHandleEventTrigger(uint64_t eventTrigger);
 
 namespace chip {
 
-class SilabsTestEventTriggerDelegate : public TestEventTriggerDelegate
+class SilabsTestEventTriggerDelegate : public TestEventTriggerDelegate, TestEventTriggerHandler
 {
 public:
-    explicit SilabsTestEventTriggerDelegate(const ByteSpan & enableKey) : mEnableKey(enableKey) {}
+    explicit SilabsTestEventTriggerDelegate(const ByteSpan & enableKey) : mEnableKey(enableKey)
+    {
+        VerifyOrDie(AddHandler(this) == CHIP_NO_ERROR);
+    }
 
     /**
      * @brief Checks to see if `enableKey` provided matches value chosen by the manufacturer.
@@ -35,26 +59,19 @@
     bool DoesEnableKeyMatch(const ByteSpan & enableKey) const override;
 
     /**
-     * @brief User handler for handling the test event trigger based on `eventTrigger` provided.
-     * @param eventTrigger Event trigger to handle.
-     * @return CHIP_NO_ERROR on success or CHIP_ERROR_INVALID_ARGUMENT on failure.
+     * @brief Delegates handling to global `emberAfHandleEventTrigger` function. DO NOT EXTEND.
+     *
+     * @param eventTrigger - trigger to process.
+     * @return CHIP_NO_ERROR if properly handled, else another CHIP_ERROR.
      */
-    CHIP_ERROR HandleEventTrigger(uint64_t eventTrigger) override;
+    CHIP_ERROR HandleEventTrigger(uint64_t eventTrigger) override
+    {
+        // WARNING: LEGACY SUPPORT ONLY, DO NOT EXTEND FOR STANDARD CLUSTERS
+        return (emberAfHandleEventTrigger(eventTrigger)) ? CHIP_NO_ERROR : CHIP_ERROR_INVALID_ARGUMENT;
+    }
 
 private:
     ByteSpan mEnableKey;
 };
 
 } // namespace chip
-
-/**
- * @brief User handler for handling the test event trigger
- *
- * @note If TestEventTrigger is enabled, it needs to be implemented in the app
- *
- * @param eventTrigger Event trigger to handle
- *
- * @retval true on success
- * @retval false if error happened
- */
-bool emberAfHandleEventTrigger(uint64_t eventTrigger);
diff --git a/examples/providers/DeviceInfoProviderImpl.cpp b/examples/providers/DeviceInfoProviderImpl.cpp
index 5524b77..7b07561 100644
--- a/examples/providers/DeviceInfoProviderImpl.cpp
+++ b/examples/providers/DeviceInfoProviderImpl.cpp
@@ -100,8 +100,8 @@
         VerifyOrReturnError(std::strlen(labelPtr) <= kMaxLabelNameLength, false);
         VerifyOrReturnError(std::strlen(valuePtr) <= kMaxLabelValueLength, false);
 
-        Platform::CopyString(mFixedLabelNameBuf, kMaxLabelNameLength + 1, labelPtr);
-        Platform::CopyString(mFixedLabelValueBuf, kMaxLabelValueLength + 1, valuePtr);
+        Platform::CopyString(mFixedLabelNameBuf, labelPtr);
+        Platform::CopyString(mFixedLabelValueBuf, valuePtr);
 
         output.label = CharSpan::fromCharString(mFixedLabelNameBuf);
         output.value = CharSpan::fromCharString(mFixedLabelValueBuf);
diff --git a/examples/pump-app/nrfconnect/main/AppTask.cpp b/examples/pump-app/nrfconnect/main/AppTask.cpp
index fa38eba..329c8d9 100644
--- a/examples/pump-app/nrfconnect/main/AppTask.cpp
+++ b/examples/pump-app/nrfconnect/main/AppTask.cpp
@@ -25,7 +25,8 @@
 
 #include <DeviceInfoProviderImpl.h>
 #include <app-common/zap-generated/attributes/Accessors.h>
-#include <app/clusters/ota-requestor/OTATestEventTriggerDelegate.h>
+#include <app/TestEventTriggerDelegate.h>
+#include <app/clusters/ota-requestor/OTATestEventTriggerHandler.h>
 #include <app/server/OnboardingCodesUtil.h>
 #include <app/server/Server.h>
 #include <app/util/attribute-storage.h>
@@ -186,9 +187,12 @@
 #endif
 
     static CommonCaseDeviceServerInitParams initParams;
-    static OTATestEventTriggerDelegate testEventTriggerDelegate{ ByteSpan(sTestEventTriggerEnableKey) };
+    static SimpleTestEventTriggerDelegate sTestEventTriggerDelegate{};
+    static OTATestEventTriggerHandler sOtaTestEventTriggerHandler{};
+    VerifyOrDie(sTestEventTriggerDelegate.Init(ByteSpan(sTestEventTriggerEnableKey)) == CHIP_NO_ERROR);
+    VerifyOrDie(sTestEventTriggerDelegate.AddHandler(&sOtaTestEventTriggerHandler) == CHIP_NO_ERROR);
     (void) initParams.InitializeStaticResourcesBeforeServerInit();
-    initParams.testEventTriggerDelegate = &testEventTriggerDelegate;
+    initParams.testEventTriggerDelegate = &sTestEventTriggerDelegate;
     ReturnErrorOnFailure(chip::Server::GetInstance().Init(initParams));
     AppFabricTableDelegate::Init();
 
diff --git a/examples/pump-controller-app/nrfconnect/main/AppTask.cpp b/examples/pump-controller-app/nrfconnect/main/AppTask.cpp
index db96480..ca79a41 100644
--- a/examples/pump-controller-app/nrfconnect/main/AppTask.cpp
+++ b/examples/pump-controller-app/nrfconnect/main/AppTask.cpp
@@ -25,7 +25,8 @@
 
 #include <DeviceInfoProviderImpl.h>
 #include <app-common/zap-generated/attributes/Accessors.h>
-#include <app/clusters/ota-requestor/OTATestEventTriggerDelegate.h>
+#include <app/TestEventTriggerDelegate.h>
+#include <app/clusters/ota-requestor/OTATestEventTriggerHandler.h>
 #include <app/server/OnboardingCodesUtil.h>
 #include <app/server/Server.h>
 #include <app/util/attribute-storage.h>
@@ -184,9 +185,12 @@
 #endif
 
     static CommonCaseDeviceServerInitParams initParams;
-    static OTATestEventTriggerDelegate testEventTriggerDelegate{ ByteSpan(sTestEventTriggerEnableKey) };
+    static SimpleTestEventTriggerDelegate sTestEventTriggerDelegate{};
+    static OTATestEventTriggerHandler sOtaTestEventTriggerHandler{};
+    VerifyOrDie(sTestEventTriggerDelegate.Init(ByteSpan(sTestEventTriggerEnableKey)) == CHIP_NO_ERROR);
+    VerifyOrDie(sTestEventTriggerDelegate.AddHandler(&sOtaTestEventTriggerHandler) == CHIP_NO_ERROR);
     (void) initParams.InitializeStaticResourcesBeforeServerInit();
-    initParams.testEventTriggerDelegate = &testEventTriggerDelegate;
+    initParams.testEventTriggerDelegate = &sTestEventTriggerDelegate;
     ReturnErrorOnFailure(chip::Server::GetInstance().Init(initParams));
     AppFabricTableDelegate::Init();
 
diff --git a/examples/smoke-co-alarm-app/silabs/src/SmokeCoAlarmManager.cpp b/examples/smoke-co-alarm-app/silabs/src/SmokeCoAlarmManager.cpp
index 85c8bca..7d64a03 100644
--- a/examples/smoke-co-alarm-app/silabs/src/SmokeCoAlarmManager.cpp
+++ b/examples/smoke-co-alarm-app/silabs/src/SmokeCoAlarmManager.cpp
@@ -21,7 +21,7 @@
 #include "AppTask.h"
 #include <FreeRTOS.h>
 
-#include <app/clusters/smoke-co-alarm-server/SmokeCOTestEventTriggerDelegate.h>
+#include <app/clusters/smoke-co-alarm-server/SmokeCOTestEventTriggerHandler.h>
 #include <lib/support/TypeTraits.h>
 
 using namespace chip;
diff --git a/examples/thermostat/qpg/BUILD.gn b/examples/thermostat/qpg/BUILD.gn
index d428557..9989e34 100644
--- a/examples/thermostat/qpg/BUILD.gn
+++ b/examples/thermostat/qpg/BUILD.gn
@@ -51,7 +51,7 @@
   output_name = "chip-${qpg_target_ic}-thermostat-example.out"
 
   sources = [
-    "${chip_root}/src/app/clusters/general-diagnostics-server/GenericFaultTestEventTriggerDelegate.cpp",
+    "${chip_root}/src/app/clusters/general-diagnostics-server/GenericFaultTestEventTriggerHandler.cpp",
     "${examples_plat_dir}/app/main.cpp",
     "${examples_plat_dir}/ota/ota.cpp",
     "src/AppTask.cpp",
diff --git a/examples/window-app/nrfconnect/main/AppTask.cpp b/examples/window-app/nrfconnect/main/AppTask.cpp
index f607114..7c50aed 100644
--- a/examples/window-app/nrfconnect/main/AppTask.cpp
+++ b/examples/window-app/nrfconnect/main/AppTask.cpp
@@ -24,8 +24,9 @@
 
 #include <DeviceInfoProviderImpl.h>
 
+#include <app/TestEventTriggerDelegate.h>
 #include <app/clusters/identify-server/identify-server.h>
-#include <app/clusters/ota-requestor/OTATestEventTriggerDelegate.h>
+#include <app/clusters/ota-requestor/OTATestEventTriggerHandler.h>
 #include <app/server/OnboardingCodesUtil.h>
 #include <app/server/Server.h>
 #include <app/util/attribute-storage.h>
@@ -188,9 +189,12 @@
 #endif
 
     static CommonCaseDeviceServerInitParams initParams;
-    static OTATestEventTriggerDelegate testEventTriggerDelegate{ ByteSpan(sTestEventTriggerEnableKey) };
+    static SimpleTestEventTriggerDelegate sTestEventTriggerDelegate{};
+    static OTATestEventTriggerHandler sOtaTestEventTriggerHandler{};
+    VerifyOrDie(sTestEventTriggerDelegate.Init(ByteSpan(sTestEventTriggerEnableKey)) == CHIP_NO_ERROR);
+    VerifyOrDie(sTestEventTriggerDelegate.AddHandler(&sOtaTestEventTriggerHandler) == CHIP_NO_ERROR);
     (void) initParams.InitializeStaticResourcesBeforeServerInit();
-    initParams.testEventTriggerDelegate = &testEventTriggerDelegate;
+    initParams.testEventTriggerDelegate = &sTestEventTriggerDelegate;
     ReturnErrorOnFailure(chip::Server::GetInstance().Init(initParams));
     AppFabricTableDelegate::Init();
 
diff --git a/src/app/TestEventTriggerDelegate.h b/src/app/TestEventTriggerDelegate.h
index 5f72415..33869d8 100644
--- a/src/app/TestEventTriggerDelegate.h
+++ b/src/app/TestEventTriggerDelegate.h
@@ -18,12 +18,27 @@
 #pragma once
 
 #include <lib/core/CHIPError.h>
+#include <lib/support/IntrusiveList.h>
 #include <lib/support/Span.h>
 #include <stddef.h>
 #include <stdint.h>
 
 namespace chip {
 
+class TestEventTriggerHandler : public IntrusiveListNodeBase<IntrusiveMode::AutoUnlink>
+{
+public:
+    virtual ~TestEventTriggerHandler() = default;
+    /**
+     * Handles the test event trigger based on `eventTrigger` provided.
+     *
+     * @param[in] eventTrigger Event trigger to handle.
+     *
+     * @return CHIP_NO_ERROR on success or another CHIP_ERROR on failure
+     */
+    virtual CHIP_ERROR HandleEventTrigger(uint64_t eventTrigger) = 0;
+};
+
 class TestEventTriggerDelegate
 {
 public:
@@ -39,14 +54,76 @@
     virtual bool DoesEnableKeyMatch(const ByteSpan & enableKey) const = 0;
 
     /**
-     * Expectation is that the caller has already validated the enable key before calling this.
      * Handles the test event trigger based on `eventTrigger` provided.
      *
+     * By default, this iterates over handlers added via `AddEventTriggerHandler`.
+     *
+     * If more specific behavior is desired, the method can be completely overridden.
+     *
      * @param[in] eventTrigger Event trigger to handle.
      *
      * @return CHIP_NO_ERROR on success or another CHIP_ERROR on failure
      */
-    virtual CHIP_ERROR HandleEventTrigger(uint64_t eventTrigger) = 0;
+    virtual CHIP_ERROR HandleEventTriggers(uint64_t eventTrigger)
+    {
+        CHIP_ERROR last_error = CHIP_ERROR_INVALID_ARGUMENT;
+        for (TestEventTriggerHandler & handler : mHandlerList)
+        {
+            last_error = handler.HandleEventTrigger(eventTrigger);
+            if (last_error == CHIP_NO_ERROR)
+            {
+                break;
+            }
+        }
+
+        return last_error;
+    }
+
+    CHIP_ERROR AddHandler(TestEventTriggerHandler * handler)
+    {
+        VerifyOrReturnError(!mHandlerList.Contains(handler), CHIP_ERROR_INVALID_ARGUMENT);
+        mHandlerList.PushBack(handler);
+        return CHIP_NO_ERROR;
+    }
+
+    void RemoveHandler(TestEventTriggerHandler * handler)
+    {
+        VerifyOrReturn(mHandlerList.Contains(handler));
+        mHandlerList.Remove(handler);
+    }
+
+    void ClearAllHandlers() { mHandlerList.Clear(); }
+
+protected:
+    IntrusiveList<TestEventTriggerHandler, IntrusiveMode::AutoUnlink> mHandlerList;
+};
+
+/**
+ * @brief TestEventTriggerDelegate that owns its enable key in RAM.
+ *
+ */
+class SimpleTestEventTriggerDelegate : public TestEventTriggerDelegate
+{
+public:
+    SimpleTestEventTriggerDelegate() { memset(&mEnableKey[0], 0, sizeof(mEnableKey)); }
+
+    /**
+     * @brief Initialize the delegate with a key
+     *
+     * @param enableKey - EnableKey to use for this instance.
+     * @return CHIP_NO_ERROR on success, CHIP_ERROR_INVALID_ARGUMENT if enableKey is wrong size.
+     */
+    CHIP_ERROR Init(ByteSpan enableKey)
+    {
+        VerifyOrReturnError(enableKey.size() == sizeof(mEnableKey), CHIP_ERROR_INVALID_ARGUMENT);
+        MutableByteSpan ourEnableKeySpan(mEnableKey);
+        return CopySpanToMutableSpan(enableKey, ourEnableKeySpan);
+    }
+
+    bool DoesEnableKeyMatch(const ByteSpan & enableKey) const override { return enableKey.data_equal(ByteSpan(mEnableKey)); }
+
+private:
+    uint8_t mEnableKey[TestEventTriggerDelegate::kEnableKeyLength];
 };
 
 } // namespace chip
diff --git a/src/app/chip_data_model.gni b/src/app/chip_data_model.gni
index 6404eb3..09d1186 100644
--- a/src/app/chip_data_model.gni
+++ b/src/app/chip_data_model.gni
@@ -255,8 +255,8 @@
           "${_app_root}/clusters/${cluster}/DefaultOTARequestorUserConsent.h",
           "${_app_root}/clusters/${cluster}/ExtendedOTARequestorDriver.cpp",
           "${_app_root}/clusters/${cluster}/OTARequestorStorage.h",
-          "${_app_root}/clusters/${cluster}/OTATestEventTriggerDelegate.cpp",
-          "${_app_root}/clusters/${cluster}/OTATestEventTriggerDelegate.h",
+          "${_app_root}/clusters/${cluster}/OTATestEventTriggerHandler.cpp",
+          "${_app_root}/clusters/${cluster}/OTATestEventTriggerHandler.h",
         ]
       } else if (cluster == "bindings") {
         sources += [
@@ -322,15 +322,14 @@
         sources += [
           "${_app_root}/clusters/${cluster}/${cluster}.cpp",
           "${_app_root}/clusters/${cluster}/${cluster}.h",
-          "${_app_root}/clusters/${cluster}/SmokeCOTestEventTriggerDelegate.cpp",
-          "${_app_root}/clusters/${cluster}/SmokeCOTestEventTriggerDelegate.h",
+          "${_app_root}/clusters/${cluster}/SmokeCOTestEventTriggerHandler.h",
         ]
       } else if (cluster == "boolean-state-configuration-server") {
         sources += [
           "${_app_root}/clusters/${cluster}/${cluster}.cpp",
           "${_app_root}/clusters/${cluster}/${cluster}.h",
-          "${_app_root}/clusters/${cluster}/BooleanStateConfigurationTestEventTriggerDelegate.cpp",
-          "${_app_root}/clusters/${cluster}/BooleanStateConfigurationTestEventTriggerDelegate.h",
+          "${_app_root}/clusters/${cluster}/BooleanStateConfigurationTestEventTriggerHandler.cpp",
+          "${_app_root}/clusters/${cluster}/BooleanStateConfigurationTestEventTriggerHandler.h",
         ]
       } else if (cluster == "air-quality-server") {
         sources += [
@@ -341,8 +340,7 @@
         sources += [
           "${_app_root}/clusters/${cluster}/${cluster}.cpp",
           "${_app_root}/clusters/${cluster}/${cluster}.h",
-          "${_app_root}/clusters/${cluster}/EnergyEvseTestEventTriggerDelegate.cpp",
-          "${_app_root}/clusters/${cluster}/EnergyEvseTestEventTriggerDelegate.h",
+          "${_app_root}/clusters/${cluster}/EnergyEvseTestEventTriggerHandler.h",
         ]
       } else if (cluster == "diagnostic-logs-server") {
         sources += [
@@ -356,8 +354,7 @@
         sources += [
           "${_app_root}/clusters/${cluster}/${cluster}.cpp",
           "${_app_root}/clusters/${cluster}/${cluster}.h",
-          "${_app_root}/clusters/${cluster}/EnergyReportingTestEventTriggerDelegate.cpp",
-          "${_app_root}/clusters/${cluster}/EnergyReportingTestEventTriggerDelegate.h",
+          "${_app_root}/clusters/${cluster}/EnergyReportingTestEventTriggerHandler.h",
         ]
       } else {
         sources += [ "${_app_root}/clusters/${cluster}/${cluster}.cpp" ]
diff --git a/src/app/clusters/boolean-state-configuration-server/BooleanStateConfigurationTestEventTriggerDelegate.cpp b/src/app/clusters/boolean-state-configuration-server/BooleanStateConfigurationTestEventTriggerHandler.cpp
similarity index 66%
rename from src/app/clusters/boolean-state-configuration-server/BooleanStateConfigurationTestEventTriggerDelegate.cpp
rename to src/app/clusters/boolean-state-configuration-server/BooleanStateConfigurationTestEventTriggerHandler.cpp
index 00a4259..b2ffe7a 100644
--- a/src/app/clusters/boolean-state-configuration-server/BooleanStateConfigurationTestEventTriggerDelegate.cpp
+++ b/src/app/clusters/boolean-state-configuration-server/BooleanStateConfigurationTestEventTriggerHandler.cpp
@@ -15,27 +15,18 @@
  *    limitations under the License.
  */
 
-#include "BooleanStateConfigurationTestEventTriggerDelegate.h"
+#include "BooleanStateConfigurationTestEventTriggerHandler.h"
 
 using namespace chip::app::Clusters::BooleanStateConfiguration;
 
 namespace chip {
 
-bool BooleanStateConfigurationTestEventTriggerDelegate::DoesEnableKeyMatch(const ByteSpan & enableKey) const
-{
-    return !mEnableKey.empty() && mEnableKey.data_equal(enableKey);
-}
-
-CHIP_ERROR BooleanStateConfigurationTestEventTriggerDelegate::HandleEventTrigger(uint64_t eventTrigger)
+CHIP_ERROR BooleanStateConfigurationTestEventTriggerHandler::HandleEventTrigger(uint64_t eventTrigger)
 {
     if (HandleBooleanStateConfigurationTestEventTrigger(eventTrigger))
     {
         return CHIP_NO_ERROR;
     }
-    if (mOtherDelegate != nullptr)
-    {
-        return mOtherDelegate->HandleEventTrigger(eventTrigger);
-    }
     return CHIP_ERROR_INVALID_ARGUMENT;
 }
 
diff --git a/src/app/clusters/boolean-state-configuration-server/BooleanStateConfigurationTestEventTriggerDelegate.h b/src/app/clusters/boolean-state-configuration-server/BooleanStateConfigurationTestEventTriggerHandler.h
similarity index 72%
rename from src/app/clusters/boolean-state-configuration-server/BooleanStateConfigurationTestEventTriggerDelegate.h
rename to src/app/clusters/boolean-state-configuration-server/BooleanStateConfigurationTestEventTriggerHandler.h
index 43b68e2..92aa2e8 100644
--- a/src/app/clusters/boolean-state-configuration-server/BooleanStateConfigurationTestEventTriggerDelegate.h
+++ b/src/app/clusters/boolean-state-configuration-server/BooleanStateConfigurationTestEventTriggerHandler.h
@@ -28,21 +28,10 @@
     kSensorUntrigger = 0x0080000000000001,
 };
 
-class BooleanStateConfigurationTestEventTriggerDelegate : public TestEventTriggerDelegate
+class BooleanStateConfigurationTestEventTriggerHandler : public TestEventTriggerHandler
 {
 public:
-    explicit BooleanStateConfigurationTestEventTriggerDelegate(const ByteSpan & enableKey,
-                                                               TestEventTriggerDelegate * otherDelegate) :
-        mEnableKey(enableKey),
-        mOtherDelegate(otherDelegate)
-    {}
-
-    bool DoesEnableKeyMatch(const ByteSpan & enableKey) const override;
     CHIP_ERROR HandleEventTrigger(uint64_t eventTrigger) override;
-
-private:
-    ByteSpan mEnableKey;
-    TestEventTriggerDelegate * mOtherDelegate;
 };
 
 } // namespace chip
diff --git a/src/app/clusters/electrical-energy-measurement-server/EnergyReportingTestEventTriggerDelegate.cpp b/src/app/clusters/electrical-energy-measurement-server/EnergyReportingTestEventTriggerDelegate.cpp
deleted file mode 100644
index 210ab40..0000000
--- a/src/app/clusters/electrical-energy-measurement-server/EnergyReportingTestEventTriggerDelegate.cpp
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- *
- *    Copyright (c) 2024 Project CHIP Authors
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
- */
-
-#include "EnergyReportingTestEventTriggerDelegate.h"
-
-namespace chip {
-
-bool EnergyReportingTestEventTriggerDelegate::DoesEnableKeyMatch(const ByteSpan & enableKey) const
-{
-    return !mEnableKey.empty() && mEnableKey.data_equal(enableKey);
-}
-
-CHIP_ERROR EnergyReportingTestEventTriggerDelegate::HandleEventTrigger(uint64_t eventTrigger)
-{
-    if (HandleEnergyReportingTestEventTrigger(eventTrigger))
-    {
-        return CHIP_NO_ERROR;
-    }
-    if (mOtherDelegate != nullptr)
-    {
-        return mOtherDelegate->HandleEventTrigger(eventTrigger);
-    }
-    return CHIP_ERROR_INVALID_ARGUMENT;
-}
-
-} // namespace chip
diff --git a/src/app/clusters/electrical-energy-measurement-server/EnergyReportingTestEventTriggerDelegate.h b/src/app/clusters/electrical-energy-measurement-server/EnergyReportingTestEventTriggerHandler.h
similarity index 64%
rename from src/app/clusters/electrical-energy-measurement-server/EnergyReportingTestEventTriggerDelegate.h
rename to src/app/clusters/electrical-energy-measurement-server/EnergyReportingTestEventTriggerHandler.h
index a7beef6..d254d7a 100644
--- a/src/app/clusters/electrical-energy-measurement-server/EnergyReportingTestEventTriggerDelegate.h
+++ b/src/app/clusters/electrical-energy-measurement-server/EnergyReportingTestEventTriggerHandler.h
@@ -20,6 +20,18 @@
 #include <app-common/zap-generated/cluster-objects.h>
 #include <app/TestEventTriggerDelegate.h>
 
+/**
+ * @brief User handler for handling the test event trigger
+ *
+ * @note If TestEventTrigger is enabled, it needs to be implemented in the app
+ *
+ * @param eventTrigger Event trigger to handle
+ *
+ * @retval true on success
+ * @retval false if error happened
+ */
+bool HandleEnergyReportingTestEventTrigger(uint64_t eventTrigger);
+
 namespace chip {
 
 /*
@@ -40,44 +52,19 @@
 
 };
 
-class EnergyReportingTestEventTriggerDelegate : public TestEventTriggerDelegate
+class EnergyReportingTestEventTriggerHandler : public TestEventTriggerHandler
 {
 public:
-    /**
-     * This class expects the enableKey ByteSpan to be valid forever.
-     * Typically this feature is only enabled in certification testing
-     * and uses a static secret key in the device for testing (e.g. in factory data)
-     */
-    explicit EnergyReportingTestEventTriggerDelegate(const ByteSpan & enableKey, TestEventTriggerDelegate * otherDelegate) :
-        mEnableKey(enableKey), mOtherDelegate(otherDelegate)
-    {}
+    EnergyReportingTestEventTriggerHandler() {}
 
-    /* This function returns True if the enableKey received in the TestEventTrigger command
-     * matches the value passed into the constructor.
-     */
-    bool DoesEnableKeyMatch(const ByteSpan & enableKey) const override;
-
-    /** This function must return True if the eventTrigger is recognised and handled
-     *  It must return False to allow a higher level TestEvent handler to check other
-     *  clusters that may handle it.
-     */
-    CHIP_ERROR HandleEventTrigger(uint64_t eventTrigger) override;
-
-private:
-    ByteSpan mEnableKey;
-    TestEventTriggerDelegate * mOtherDelegate;
+    CHIP_ERROR HandleEventTrigger(uint64_t eventTrigger) override
+    {
+        if (HandleEnergyReportingTestEventTrigger(eventTrigger))
+        {
+            return CHIP_NO_ERROR;
+        }
+        return CHIP_ERROR_INVALID_ARGUMENT;
+    }
 };
 
 } // namespace chip
-
-/**
- * @brief User handler for handling the test event trigger
- *
- * @note If TestEventTrigger is enabled, it needs to be implemented in the app
- *
- * @param eventTrigger Event trigger to handle
- *
- * @retval true on success
- * @retval false if error happened
- */
-bool HandleEnergyReportingTestEventTrigger(uint64_t eventTrigger);
diff --git a/src/app/clusters/energy-evse-server/EnergyEvseTestEventTriggerDelegate.cpp b/src/app/clusters/energy-evse-server/EnergyEvseTestEventTriggerDelegate.cpp
deleted file mode 100644
index 78fb870..0000000
--- a/src/app/clusters/energy-evse-server/EnergyEvseTestEventTriggerDelegate.cpp
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- *
- *    Copyright (c) 2023 Project CHIP Authors
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
- */
-
-#include "EnergyEvseTestEventTriggerDelegate.h"
-
-using namespace chip::app::Clusters::EnergyEvse;
-
-namespace chip {
-
-bool EnergyEvseTestEventTriggerDelegate::DoesEnableKeyMatch(const ByteSpan & enableKey) const
-{
-    return !mEnableKey.empty() && mEnableKey.data_equal(enableKey);
-}
-
-CHIP_ERROR EnergyEvseTestEventTriggerDelegate::HandleEventTrigger(uint64_t eventTrigger)
-{
-    if (HandleEnergyEvseTestEventTrigger(eventTrigger))
-    {
-        return CHIP_NO_ERROR;
-    }
-    if (mOtherDelegate != nullptr)
-    {
-        return mOtherDelegate->HandleEventTrigger(eventTrigger);
-    }
-    return CHIP_ERROR_INVALID_ARGUMENT;
-}
-
-} // namespace chip
diff --git a/src/app/clusters/energy-evse-server/EnergyEvseTestEventTriggerDelegate.h b/src/app/clusters/energy-evse-server/EnergyEvseTestEventTriggerHandler.h
similarity index 78%
rename from src/app/clusters/energy-evse-server/EnergyEvseTestEventTriggerDelegate.h
rename to src/app/clusters/energy-evse-server/EnergyEvseTestEventTriggerHandler.h
index 3c1dff4..307156e 100644
--- a/src/app/clusters/energy-evse-server/EnergyEvseTestEventTriggerDelegate.h
+++ b/src/app/clusters/energy-evse-server/EnergyEvseTestEventTriggerHandler.h
@@ -20,6 +20,18 @@
 #include <app-common/zap-generated/cluster-objects.h>
 #include <app/TestEventTriggerDelegate.h>
 
+/**
+ * @brief User handler for handling the test event trigger
+ *
+ * @note If TestEventTrigger is enabled, it needs to be implemented in the app
+ *
+ * @param eventTrigger Event trigger to handle
+ *
+ * @retval true on success
+ * @retval false if error happened
+ */
+bool HandleEnergyEvseTestEventTrigger(uint64_t eventTrigger);
+
 namespace chip {
 
 /*
@@ -55,44 +67,23 @@
     kEVSEDiagnosticsComplete = 0x0099000000000020,
 };
 
-class EnergyEvseTestEventTriggerDelegate : public TestEventTriggerDelegate
+class EnergyEvseTestEventTriggerHandler : public TestEventTriggerHandler
 {
 public:
-    /**
-     * This class expects the enableKey ByteSpan to be valid forever.
-     * Typically this feature is only enabled in certification testing
-     * and uses a static secret key in the device for testing (e.g. in factory data)
-     */
-    explicit EnergyEvseTestEventTriggerDelegate(const ByteSpan & enableKey, TestEventTriggerDelegate * otherDelegate) :
-        mEnableKey(enableKey), mOtherDelegate(otherDelegate)
-    {}
-
-    /* This function returns True if the enableKey received in the TestEventTrigger command
-     * matches the value passed into the constructor.
-     */
-    bool DoesEnableKeyMatch(const ByteSpan & enableKey) const override;
+    explicit EnergyEvseTestEventTriggerHandler() {}
 
     /** This function must return True if the eventTrigger is recognised and handled
      *  It must return False to allow a higher level TestEvent handler to check other
      *  clusters that may handle it.
      */
-    CHIP_ERROR HandleEventTrigger(uint64_t eventTrigger) override;
-
-private:
-    ByteSpan mEnableKey;
-    TestEventTriggerDelegate * mOtherDelegate;
+    CHIP_ERROR HandleEventTrigger(uint64_t eventTrigger) override
+    {
+        if (HandleEnergyEvseTestEventTrigger(eventTrigger))
+        {
+            return CHIP_NO_ERROR;
+        }
+        return CHIP_ERROR_INVALID_ARGUMENT;
+    }
 };
 
 } // namespace chip
-
-/**
- * @brief User handler for handling the test event trigger
- *
- * @note If TestEventTrigger is enabled, it needs to be implemented in the app
- *
- * @param eventTrigger Event trigger to handle
- *
- * @retval true on success
- * @retval false if error happened
- */
-bool HandleEnergyEvseTestEventTrigger(uint64_t eventTrigger);
diff --git a/src/app/clusters/general-diagnostics-server/GenericFaultTestEventTriggerDelegate.h b/src/app/clusters/general-diagnostics-server/GenericFaultTestEventTriggerDelegate.h
deleted file mode 100644
index f304518..0000000
--- a/src/app/clusters/general-diagnostics-server/GenericFaultTestEventTriggerDelegate.h
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- *
- *    Copyright (c) 2022 Project CHIP Authors
- *    All rights reserved.
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
- */
-
-#pragma once
-
-#include <app/TestEventTriggerDelegate.h>
-
-namespace chip {
-
-class GenericFaultTestEventTriggerDelegate : public TestEventTriggerDelegate
-{
-public:
-    static constexpr uint64_t kGenericFaultQueryTrigger         = 0xFFFF'FFFF'10D0'0001;
-    static constexpr uint64_t kGenericFaultQueryFabricIndexMask = 0xff;
-
-    explicit GenericFaultTestEventTriggerDelegate(const ByteSpan & enableKey) : mEnableKey(enableKey) {}
-
-    bool DoesEnableKeyMatch(const ByteSpan & enableKey) const override;
-    CHIP_ERROR HandleEventTrigger(uint64_t eventTrigger) override;
-
-private:
-    ByteSpan mEnableKey;
-};
-
-} // namespace chip
diff --git a/src/app/clusters/general-diagnostics-server/GenericFaultTestEventTriggerDelegate.cpp b/src/app/clusters/general-diagnostics-server/GenericFaultTestEventTriggerHandler.cpp
similarity index 89%
rename from src/app/clusters/general-diagnostics-server/GenericFaultTestEventTriggerDelegate.cpp
rename to src/app/clusters/general-diagnostics-server/GenericFaultTestEventTriggerHandler.cpp
index 6c50b58..b733524 100644
--- a/src/app/clusters/general-diagnostics-server/GenericFaultTestEventTriggerDelegate.cpp
+++ b/src/app/clusters/general-diagnostics-server/GenericFaultTestEventTriggerHandler.cpp
@@ -16,7 +16,7 @@
  *    limitations under the License.
  */
 
-#include "GenericFaultTestEventTriggerDelegate.h"
+#include "GenericFaultTestEventTriggerHandler.h"
 
 #include <app/clusters/general-diagnostics-server/general-diagnostics-server.h>
 #include <lib/support/CodeUtils.h>
@@ -25,15 +25,10 @@
 
 namespace chip {
 
-bool GenericFaultTestEventTriggerDelegate::DoesEnableKeyMatch(const ByteSpan & enableKey) const
-{
-    return !mEnableKey.empty() && mEnableKey.data_equal(enableKey);
-}
-
-CHIP_ERROR GenericFaultTestEventTriggerDelegate::HandleEventTrigger(uint64_t eventTrigger)
+CHIP_ERROR GenericFaultTestEventTriggerHandler::HandleEventTrigger(uint64_t eventTrigger)
 {
 
-    if ((eventTrigger & ~kGenericFaultQueryFabricIndexMask) == kGenericFaultQueryTrigger)
+    if (eventTrigger == kGenericFaultQueryTrigger)
     {
         // Fault injection
         GeneralFaults<kMaxHardwareFaults> hwFaultsPrevious;
diff --git a/src/app/clusters/ota-requestor/OTATestEventTriggerDelegate.h b/src/app/clusters/general-diagnostics-server/GenericFaultTestEventTriggerHandler.h
similarity index 66%
copy from src/app/clusters/ota-requestor/OTATestEventTriggerDelegate.h
copy to src/app/clusters/general-diagnostics-server/GenericFaultTestEventTriggerHandler.h
index 6c78a16..4dea743 100644
--- a/src/app/clusters/ota-requestor/OTATestEventTriggerDelegate.h
+++ b/src/app/clusters/general-diagnostics-server/GenericFaultTestEventTriggerHandler.h
@@ -22,19 +22,12 @@
 
 namespace chip {
 
-class OTATestEventTriggerDelegate : public TestEventTriggerDelegate
+class GenericFaultTestEventTriggerHandler : public TestEventTriggerHandler
 {
 public:
-    static constexpr uint64_t kOtaQueryTrigger         = 0x0100'0000'0000'0100;
-    static constexpr uint64_t kOtaQueryFabricIndexMask = 0xff;
+    static constexpr uint64_t kGenericFaultQueryTrigger = 0x3333'FFFF'10D0'0001;
 
-    explicit OTATestEventTriggerDelegate(const ByteSpan & enableKey) : mEnableKey(enableKey) {}
-
-    bool DoesEnableKeyMatch(const ByteSpan & enableKey) const override;
     CHIP_ERROR HandleEventTrigger(uint64_t eventTrigger) override;
-
-private:
-    ByteSpan mEnableKey;
 };
 
 } // namespace chip
diff --git a/src/app/clusters/general-diagnostics-server/general-diagnostics-server.cpp b/src/app/clusters/general-diagnostics-server/general-diagnostics-server.cpp
index c0130e9..c392c96 100644
--- a/src/app/clusters/general-diagnostics-server/general-diagnostics-server.cpp
+++ b/src/app/clusters/general-diagnostics-server/general-diagnostics-server.cpp
@@ -380,7 +380,7 @@
         return true;
     }
 
-    CHIP_ERROR handleEventTriggerResult = triggerDelegate->HandleEventTrigger(commandData.eventTrigger);
+    CHIP_ERROR handleEventTriggerResult = triggerDelegate->HandleEventTriggers(commandData.eventTrigger);
 
     // When HandleEventTrigger fails, we simply convert any error to INVALID_COMMAND
     commandObj->AddStatus(commandPath, (handleEventTriggerResult != CHIP_NO_ERROR) ? Status::InvalidCommand : Status::Success);
diff --git a/src/app/clusters/ota-requestor/OTATestEventTriggerDelegate.cpp b/src/app/clusters/ota-requestor/OTATestEventTriggerHandler.cpp
similarity index 80%
rename from src/app/clusters/ota-requestor/OTATestEventTriggerDelegate.cpp
rename to src/app/clusters/ota-requestor/OTATestEventTriggerHandler.cpp
index a879f81..885aced 100644
--- a/src/app/clusters/ota-requestor/OTATestEventTriggerDelegate.cpp
+++ b/src/app/clusters/ota-requestor/OTATestEventTriggerHandler.cpp
@@ -16,7 +16,7 @@
  *    limitations under the License.
  */
 
-#include "OTATestEventTriggerDelegate.h"
+#include "OTATestEventTriggerHandler.h"
 
 #include "OTARequestorInterface.h"
 
@@ -24,12 +24,7 @@
 
 namespace chip {
 
-bool OTATestEventTriggerDelegate::DoesEnableKeyMatch(const ByteSpan & enableKey) const
-{
-    return !mEnableKey.empty() && mEnableKey.data_equal(enableKey);
-}
-
-CHIP_ERROR OTATestEventTriggerDelegate::HandleEventTrigger(uint64_t eventTrigger)
+CHIP_ERROR OTATestEventTriggerHandler::HandleEventTrigger(uint64_t eventTrigger)
 {
     if ((eventTrigger & ~kOtaQueryFabricIndexMask) == kOtaQueryTrigger)
     {
diff --git a/src/app/clusters/ota-requestor/OTATestEventTriggerDelegate.h b/src/app/clusters/ota-requestor/OTATestEventTriggerHandler.h
similarity index 73%
rename from src/app/clusters/ota-requestor/OTATestEventTriggerDelegate.h
rename to src/app/clusters/ota-requestor/OTATestEventTriggerHandler.h
index 6c78a16..bb49a3d 100644
--- a/src/app/clusters/ota-requestor/OTATestEventTriggerDelegate.h
+++ b/src/app/clusters/ota-requestor/OTATestEventTriggerHandler.h
@@ -22,19 +22,15 @@
 
 namespace chip {
 
-class OTATestEventTriggerDelegate : public TestEventTriggerDelegate
+class OTATestEventTriggerHandler : public TestEventTriggerHandler
 {
 public:
-    static constexpr uint64_t kOtaQueryTrigger         = 0x0100'0000'0000'0100;
+    static constexpr uint64_t kOtaQueryTrigger         = 0x002a'0000'0000'0100;
     static constexpr uint64_t kOtaQueryFabricIndexMask = 0xff;
 
-    explicit OTATestEventTriggerDelegate(const ByteSpan & enableKey) : mEnableKey(enableKey) {}
+    OTATestEventTriggerHandler() {}
 
-    bool DoesEnableKeyMatch(const ByteSpan & enableKey) const override;
     CHIP_ERROR HandleEventTrigger(uint64_t eventTrigger) override;
-
-private:
-    ByteSpan mEnableKey;
 };
 
 } // namespace chip
diff --git a/src/app/clusters/smoke-co-alarm-server/SmokeCOTestEventTriggerDelegate.cpp b/src/app/clusters/smoke-co-alarm-server/SmokeCOTestEventTriggerDelegate.cpp
deleted file mode 100644
index 597737b..0000000
--- a/src/app/clusters/smoke-co-alarm-server/SmokeCOTestEventTriggerDelegate.cpp
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- *
- *    Copyright (c) 2023 Project CHIP Authors
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
- */
-
-#include "SmokeCOTestEventTriggerDelegate.h"
-
-using namespace chip::app::Clusters::SmokeCoAlarm;
-
-namespace chip {
-
-bool SmokeCOTestEventTriggerDelegate::DoesEnableKeyMatch(const ByteSpan & enableKey) const
-{
-    return !mEnableKey.empty() && mEnableKey.data_equal(enableKey);
-}
-
-CHIP_ERROR SmokeCOTestEventTriggerDelegate::HandleEventTrigger(uint64_t eventTrigger)
-{
-    if (HandleSmokeCOTestEventTrigger(eventTrigger))
-    {
-        return CHIP_NO_ERROR;
-    }
-    if (mOtherDelegate != nullptr)
-    {
-        return mOtherDelegate->HandleEventTrigger(eventTrigger);
-    }
-    return CHIP_ERROR_INVALID_ARGUMENT;
-}
-
-} // namespace chip
diff --git a/src/app/clusters/smoke-co-alarm-server/SmokeCOTestEventTriggerDelegate.h b/src/app/clusters/smoke-co-alarm-server/SmokeCOTestEventTriggerDelegate.h
deleted file mode 100644
index 599eb6a..0000000
--- a/src/app/clusters/smoke-co-alarm-server/SmokeCOTestEventTriggerDelegate.h
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- *
- *    Copyright (c) 2023 Project CHIP Authors
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
- */
-
-#pragma once
-
-#include <app-common/zap-generated/cluster-objects.h>
-#include <app/TestEventTriggerDelegate.h>
-
-namespace chip {
-
-enum class SmokeCOTrigger : uint64_t
-{
-    // Force alarm commands
-    kForceSmokeWarning           = 0xffffffff00000090,
-    kForceCOWarning              = 0xffffffff00000091,
-    kForceSmokeInterconnect      = 0xffffffff00000092,
-    kForceMalfunction            = 0xffffffff00000093,
-    kForceCOInterconnect         = 0xffffffff00000094,
-    kForceLowBatteryWarning      = 0xffffffff00000095,
-    kForceSmokeContaminationHigh = 0xffffffff00000096,
-    kForceSmokeContaminationLow  = 0xffffffff00000097,
-    kForceSmokeSensitivityHigh   = 0xffffffff00000098,
-    kForceSmokeSensitivityLow    = 0xffffffff00000099,
-    kForceEndOfLife              = 0xffffffff0000009a,
-    kForceSilence                = 0xffffffff0000009b,
-    kForceSmokeCritical          = 0xffffffff0000009c,
-    kForceCOCritical             = 0xffffffff0000009d,
-    kForceLowBatteryCritical     = 0xffffffff0000009e,
-    // Clear alarm commands
-    kClearSmoke             = 0xffffffff000000a0,
-    kClearCO                = 0xffffffff000000a1,
-    kClearSmokeInterconnect = 0xffffffff000000a2,
-    kClearMalfunction       = 0xffffffff000000a3,
-    kClearCOInterconnect    = 0xffffffff000000a4,
-    kClearBatteryLevelLow   = 0xffffffff000000a5,
-    kClearContamination     = 0xffffffff000000a6,
-    kClearSensitivity       = 0xffffffff000000a8,
-    kClearEndOfLife         = 0xffffffff000000aa,
-    kClearSilence           = 0xffffffff000000ab
-};
-
-class SmokeCOTestEventTriggerDelegate : public TestEventTriggerDelegate
-{
-public:
-    explicit SmokeCOTestEventTriggerDelegate(const ByteSpan & enableKey, TestEventTriggerDelegate * otherDelegate) :
-        mEnableKey(enableKey), mOtherDelegate(otherDelegate)
-    {}
-
-    bool DoesEnableKeyMatch(const ByteSpan & enableKey) const override;
-    CHIP_ERROR HandleEventTrigger(uint64_t eventTrigger) override;
-
-private:
-    ByteSpan mEnableKey;
-    TestEventTriggerDelegate * mOtherDelegate;
-};
-
-} // namespace chip
-
-/**
- * @brief User handler for handling the test event trigger
- *
- * @note If TestEventTrigger is enabled, it needs to be implemented in the app
- *
- * @param eventTrigger Event trigger to handle
- *
- * @retval true on success
- * @retval false if error happened
- */
-bool HandleSmokeCOTestEventTrigger(uint64_t eventTrigger);
diff --git a/src/app/clusters/smoke-co-alarm-server/SmokeCOTestEventTriggerHandler.h b/src/app/clusters/smoke-co-alarm-server/SmokeCOTestEventTriggerHandler.h
new file mode 100644
index 0000000..a64ab5f
--- /dev/null
+++ b/src/app/clusters/smoke-co-alarm-server/SmokeCOTestEventTriggerHandler.h
@@ -0,0 +1,78 @@
+/*
+ *
+ *    Copyright (c) 2023 Project CHIP Authors
+ *
+ *    Licensed under the Apache License, Version 2.0 (the "License");
+ *    you may not use this file except in compliance with the License.
+ *    You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing, software
+ *    distributed under the License is distributed on an "AS IS" BASIS,
+ *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *    See the License for the specific language governing permissions and
+ *    limitations under the License.
+ */
+
+#pragma once
+
+#include <app-common/zap-generated/cluster-objects.h>
+#include <app/TestEventTriggerDelegate.h>
+
+/**
+ * @brief User handler for handling the test event trigger
+ *
+ * @note If TestEventTrigger is enabled, it needs to be implemented in the app
+ *
+ * @param eventTrigger Event trigger to handle
+ *
+ * @retval true on success
+ * @retval false if error happened
+ */
+bool HandleSmokeCOTestEventTrigger(uint64_t eventTrigger);
+
+namespace chip {
+
+enum class SmokeCOTrigger : uint64_t
+{
+    // Force alarm commands
+    kForceSmokeWarning           = 0x005c'0000'00000090,
+    kForceCOWarning              = 0x005c'0000'00000091,
+    kForceSmokeInterconnect      = 0x005c'0000'00000092,
+    kForceMalfunction            = 0x005c'0000'00000093,
+    kForceCOInterconnect         = 0x005c'0000'00000094,
+    kForceLowBatteryWarning      = 0x005c'0000'00000095,
+    kForceSmokeContaminationHigh = 0x005c'0000'00000096,
+    kForceSmokeContaminationLow  = 0x005c'0000'00000097,
+    kForceSmokeSensitivityHigh   = 0x005c'0000'00000098,
+    kForceSmokeSensitivityLow    = 0x005c'0000'00000099,
+    kForceEndOfLife              = 0x005c'0000'0000009a,
+    kForceSilence                = 0x005c'0000'0000009b,
+    kForceSmokeCritical          = 0x005c'0000'0000009c,
+    kForceCOCritical             = 0x005c'0000'0000009d,
+    kForceLowBatteryCritical     = 0x005c'0000'0000009e,
+    // Clear alarm commands
+    kClearSmoke             = 0x005c'0000'000000a0,
+    kClearCO                = 0x005c'0000'000000a1,
+    kClearSmokeInterconnect = 0x005c'0000'000000a2,
+    kClearMalfunction       = 0x005c'0000'000000a3,
+    kClearCOInterconnect    = 0x005c'0000'000000a4,
+    kClearBatteryLevelLow   = 0x005c'0000'000000a5,
+    kClearContamination     = 0x005c'0000'000000a6,
+    kClearSensitivity       = 0x005c'0000'000000a8,
+    kClearEndOfLife         = 0x005c'0000'000000aa,
+    kClearSilence           = 0x005c'0000'000000ab
+};
+
+class SmokeCOTestEventTriggerHandler : public TestEventTriggerHandler
+{
+public:
+    SmokeCOTestEventTriggerHandler() = default;
+    CHIP_ERROR HandleEventTrigger(uint64_t eventTrigger) override
+    {
+        return HandleSmokeCOTestEventTrigger(eventTrigger) ? CHIP_NO_ERROR : CHIP_ERROR_INVALID_ARGUMENT;
+    }
+};
+
+} // namespace chip
diff --git a/src/app/tests/BUILD.gn b/src/app/tests/BUILD.gn
index d0f9a73..9a21f1f 100644
--- a/src/app/tests/BUILD.gn
+++ b/src/app/tests/BUILD.gn
@@ -153,6 +153,7 @@
     "TestReportingEngine.cpp",
     "TestStatusIB.cpp",
     "TestStatusResponseMessage.cpp",
+    "TestTestEventTriggerDelegate.cpp",
     "TestTimeSyncDataProvider.cpp",
     "TestTimedHandler.cpp",
     "TestWriteInteraction.cpp",
diff --git a/src/app/tests/TestTestEventTriggerDelegate.cpp b/src/app/tests/TestTestEventTriggerDelegate.cpp
new file mode 100644
index 0000000..cd7f3ae
--- /dev/null
+++ b/src/app/tests/TestTestEventTriggerDelegate.cpp
@@ -0,0 +1,192 @@
+/*
+ *
+ *    Copyright (c) 2024 Project CHIP Authors
+ *    All rights reserved.
+ *
+ *    Licensed under the Apache License, Version 2.0 (the "License");
+ *    you may not use this file except in compliance with the License.
+ *    You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing, software
+ *    distributed under the License is distributed on an "AS IS" BASIS,
+ *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *    See the License for the specific language governing permissions and
+ *    limitations under the License.
+ */
+
+#include <stdint.h>
+
+#include <app/TestEventTriggerDelegate.h>
+#include <lib/support/Span.h>
+#include <lib/support/UnitTestRegistration.h>
+#include <nlunit-test.h>
+
+using namespace chip;
+
+namespace {
+
+class TestEventHandler : public TestEventTriggerHandler
+{
+public:
+    TestEventHandler() = delete;
+
+    explicit TestEventHandler(uint64_t supportedEventTriggerValue) : mSupportedEventTriggerValue(supportedEventTriggerValue) {}
+
+    CHIP_ERROR HandleEventTrigger(uint64_t eventTrigger) override
+    {
+        if (eventTrigger == mSupportedEventTriggerValue)
+        {
+            ++mCount;
+            return CHIP_NO_ERROR;
+        }
+        return CHIP_ERROR_INVALID_ARGUMENT;
+    }
+
+    int GetCount() const { return mCount; }
+    void ClearCount() { mCount = 0; }
+
+private:
+    uint64_t mSupportedEventTriggerValue;
+    int mCount = 0;
+};
+
+class TestEventDelegate : public TestEventTriggerDelegate
+{
+public:
+    explicit TestEventDelegate(const ByteSpan & enableKey) : mEnableKey(enableKey) {}
+
+    bool DoesEnableKeyMatch(const ByteSpan & enableKey) const override
+    {
+        return !mEnableKey.empty() && mEnableKey.data_equal(enableKey);
+    }
+
+private:
+    ByteSpan mEnableKey;
+};
+
+void TestKeyChecking(nlTestSuite * aSuite, void * aContext)
+{
+    const uint8_t kTestKey[16]       = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 };
+    const uint8_t kBadKey[16]        = { 255, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 };
+    const uint8_t kDiffLenBadKey[17] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 };
+    TestEventDelegate delegate{ ByteSpan{ kTestKey } };
+
+    NL_TEST_ASSERT(aSuite, delegate.DoesEnableKeyMatch(ByteSpan{ kTestKey }) == true);
+    NL_TEST_ASSERT(aSuite, delegate.DoesEnableKeyMatch(ByteSpan{ kBadKey }) == false);
+    NL_TEST_ASSERT(aSuite, delegate.DoesEnableKeyMatch(ByteSpan{ kDiffLenBadKey }) == false);
+    NL_TEST_ASSERT(aSuite, delegate.DoesEnableKeyMatch(ByteSpan{}) == false);
+}
+
+void TestHandlerManagement(nlTestSuite * aSuite, void * aContext)
+{
+    const uint8_t kTestKey[16] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 };
+
+    TestEventDelegate delegate{ ByteSpan{ kTestKey } };
+
+    TestEventHandler event1Handler{ 1 };
+    TestEventHandler event2Handler{ 2 };
+
+    // Add 2, check 2 works 1 doesn't.
+    NL_TEST_ASSERT(aSuite, delegate.HandleEventTriggers(1) != CHIP_NO_ERROR);
+
+    NL_TEST_ASSERT(aSuite, delegate.AddHandler(&event2Handler) == CHIP_NO_ERROR);
+    NL_TEST_ASSERT(aSuite, delegate.AddHandler(&event2Handler) != CHIP_NO_ERROR);
+
+    NL_TEST_ASSERT(aSuite, delegate.HandleEventTriggers(2) == CHIP_NO_ERROR);
+    NL_TEST_ASSERT(aSuite, delegate.HandleEventTriggers(1) != CHIP_NO_ERROR);
+    NL_TEST_ASSERT(aSuite, delegate.HandleEventTriggers(2) == CHIP_NO_ERROR);
+
+    NL_TEST_ASSERT(aSuite, event1Handler.GetCount() == 0);
+    NL_TEST_ASSERT(aSuite, event2Handler.GetCount() == 2);
+
+    event1Handler.ClearCount();
+    event2Handler.ClearCount();
+
+    // Add 1, check 1 and 2 work.
+    NL_TEST_ASSERT(aSuite, delegate.AddHandler(&event1Handler) == CHIP_NO_ERROR);
+    NL_TEST_ASSERT(aSuite, delegate.AddHandler(&event1Handler) != CHIP_NO_ERROR);
+
+    NL_TEST_ASSERT(aSuite, delegate.HandleEventTriggers(1) == CHIP_NO_ERROR);
+    NL_TEST_ASSERT(aSuite, delegate.HandleEventTriggers(2) == CHIP_NO_ERROR);
+    NL_TEST_ASSERT(aSuite, delegate.HandleEventTriggers(1) == CHIP_NO_ERROR);
+
+    NL_TEST_ASSERT(aSuite, event1Handler.GetCount() == 2);
+    NL_TEST_ASSERT(aSuite, event2Handler.GetCount() == 1);
+
+    event1Handler.ClearCount();
+    event2Handler.ClearCount();
+
+    // Remove 2, check 1 works.
+    delegate.RemoveHandler(&event2Handler);
+
+    NL_TEST_ASSERT(aSuite, delegate.HandleEventTriggers(1) == CHIP_NO_ERROR);
+    NL_TEST_ASSERT(aSuite, delegate.HandleEventTriggers(2) != CHIP_NO_ERROR);
+
+    NL_TEST_ASSERT(aSuite, event1Handler.GetCount() == 1);
+    NL_TEST_ASSERT(aSuite, event2Handler.GetCount() == 0);
+
+    // Remove again, should be NO-OP.
+    delegate.RemoveHandler(&event2Handler);
+    NL_TEST_ASSERT(aSuite, delegate.HandleEventTriggers(2) != CHIP_NO_ERROR);
+    NL_TEST_ASSERT(aSuite, event2Handler.GetCount() == 0);
+
+    event1Handler.ClearCount();
+    event2Handler.ClearCount();
+
+    // Add 2 again, check 1 and 2 work.
+    NL_TEST_ASSERT(aSuite, delegate.AddHandler(&event2Handler) == CHIP_NO_ERROR);
+    NL_TEST_ASSERT(aSuite, delegate.AddHandler(&event2Handler) != CHIP_NO_ERROR);
+
+    NL_TEST_ASSERT(aSuite, delegate.HandleEventTriggers(1) == CHIP_NO_ERROR);
+    NL_TEST_ASSERT(aSuite, delegate.HandleEventTriggers(2) == CHIP_NO_ERROR);
+
+    NL_TEST_ASSERT(aSuite, event1Handler.GetCount() == 1);
+    NL_TEST_ASSERT(aSuite, event2Handler.GetCount() == 1);
+
+    event1Handler.ClearCount();
+    event2Handler.ClearCount();
+
+    // Remove all handlers, check neither works.
+    delegate.ClearAllHandlers();
+
+    NL_TEST_ASSERT(aSuite, delegate.HandleEventTriggers(1) != CHIP_NO_ERROR);
+    NL_TEST_ASSERT(aSuite, delegate.HandleEventTriggers(2) != CHIP_NO_ERROR);
+
+    NL_TEST_ASSERT(aSuite, event1Handler.GetCount() == 0);
+    NL_TEST_ASSERT(aSuite, event2Handler.GetCount() == 0);
+
+    // Add a handler at the end: having it remaining should not cause crashes/leaks.
+    NL_TEST_ASSERT(aSuite, delegate.AddHandler(&event2Handler) == CHIP_NO_ERROR);
+}
+
+int TestSetup(void * inContext)
+{
+    return SUCCESS;
+}
+
+int TestTeardown(void * inContext)
+{
+    return SUCCESS;
+}
+
+} // namespace
+
+int TestTestEventTriggerDelegate()
+{
+    static nlTest sTests[] = { NL_TEST_DEF("TestKeyChecking", TestKeyChecking),
+                               NL_TEST_DEF("TestHandlerManagement", TestHandlerManagement), NL_TEST_SENTINEL() };
+
+    nlTestSuite theSuite = {
+        "TestTestEventTriggerDelegate",
+        &sTests[0],
+        TestSetup,
+        TestTeardown,
+    };
+
+    nlTestRunner(&theSuite, nullptr);
+    return (nlTestRunnerStats(&theSuite));
+}
+
+CHIP_REGISTER_TEST_SUITE(TestTestEventTriggerDelegate)
diff --git a/src/app/tests/suites/certification/Test_TC_SMOKECO_2_2.yaml b/src/app/tests/suites/certification/Test_TC_SMOKECO_2_2.yaml
index 37b3eb0..4d26172 100644
--- a/src/app/tests/suites/certification/Test_TC_SMOKECO_2_2.yaml
+++ b/src/app/tests/suites/certification/Test_TC_SMOKECO_2_2.yaml
@@ -29,13 +29,13 @@
         defaultValue: "hex:00112233445566778899aabbccddeeff"
     TEST_EVENT_TRIGGER_WARNING_SMOKE_ALARM:
         type: int64u
-        defaultValue: "0xffffffff00000090"
+        defaultValue: "0x005c000000000090"
     TEST_EVENT_TRIGGER_CRITICAL_SMOKE_ALARM:
         type: int64u
-        defaultValue: "0xffffffff0000009c"
+        defaultValue: "0x005c00000000009c"
     TEST_EVENT_TRIGGER_SMOKE_ALARM_CLEAR:
         type: int64u
-        defaultValue: "0xffffffff000000a0"
+        defaultValue: "0x005c0000000000a0"
 
 tests:
     - label: "Step 1: Commission DUT to TH"
diff --git a/src/app/tests/suites/certification/Test_TC_SMOKECO_2_5.yaml b/src/app/tests/suites/certification/Test_TC_SMOKECO_2_5.yaml
index c9de09f..21aa0d7 100644
--- a/src/app/tests/suites/certification/Test_TC_SMOKECO_2_5.yaml
+++ b/src/app/tests/suites/certification/Test_TC_SMOKECO_2_5.yaml
@@ -29,58 +29,58 @@
         defaultValue: "hex:00112233445566778899aabbccddeeff"
     TEST_EVENT_TRIGGER_WARNING_SMOKE_ALARM:
         type: int64u
-        defaultValue: "0xffffffff00000090"
+        defaultValue: "0x005c000000000090"
     TEST_EVENT_TRIGGER_CRITICAL_SMOKE_ALARM:
         type: int64u
-        defaultValue: "0xffffffff0000009c"
+        defaultValue: "0x005c00000000009c"
     TEST_EVENT_TRIGGER_SMOKE_ALARM_CLEAR:
         type: int64u
-        defaultValue: "0xffffffff000000a0"
+        defaultValue: "0x005c0000000000a0"
     TEST_EVENT_TRIGGER_WARNING_CO_ALARM:
         type: int64u
-        defaultValue: "0xffffffff00000091"
+        defaultValue: "0x005c000000000091"
     TEST_EVENT_TRIGGER_CRITICAL_CO_ALARM:
         type: int64u
-        defaultValue: "0xffffffff0000009d"
+        defaultValue: "0x005c00000000009d"
     TEST_EVENT_TRIGGER_CO_ALARM_CLEAR:
         type: int64u
-        defaultValue: "0xffffffff000000a1"
+        defaultValue: "0x005c0000000000a1"
     TEST_EVENT_TRIGGER_DEVICE_MUTED:
         type: int64u
-        defaultValue: "0xffffffff0000009b"
+        defaultValue: "0x005c00000000009b"
     TEST_EVENT_TRIGGER_DEVICE_MUTED_CLEAR:
         type: int64u
-        defaultValue: "0xffffffff000000ab"
+        defaultValue: "0x005c0000000000ab"
     TEST_EVENT_TRIGGER_INTERCONNECT_SMOKE_ALARM:
         type: int64u
-        defaultValue: "0xffffffff00000092"
+        defaultValue: "0x005c000000000092"
     TEST_EVENT_TRIGGER_INTERCONNECT_SMOKE_ALARM_CLEAR:
         type: int64u
-        defaultValue: "0xffffffff000000a2"
+        defaultValue: "0x005c0000000000a2"
     TEST_EVENT_TRIGGER_INTERCONNECT_CO_ALARM:
         type: int64u
-        defaultValue: "0xffffffff00000094"
+        defaultValue: "0x005c000000000094"
     TEST_EVENT_TRIGGER_INTERCONNECT_CO_ALARM_CLEAR:
         type: int64u
-        defaultValue: "0xffffffff000000a4"
+        defaultValue: "0x005c0000000000a4"
     TEST_EVENT_TRIGGER_CONTAMINATION_STATE_HIGH:
         type: int64u
-        defaultValue: "0xffffffff00000096"
+        defaultValue: "0x005c000000000096"
     TEST_EVENT_TRIGGER_CONTAMINATION_STATE_LOW:
         type: int64u
-        defaultValue: "0xffffffff00000097"
+        defaultValue: "0x005c000000000097"
     TTEST_EVENT_TRIGGER_CONTAMINATION_STATE_CLEAR:
         type: int64u
-        defaultValue: "0xffffffff000000a6"
+        defaultValue: "0x005c0000000000a6"
     TEST_EVENT_TRIGGER_SENSITIVITY_LEVEL_HIGH:
         type: int64u
-        defaultValue: "0xffffffff00000098"
+        defaultValue: "0x005c000000000098"
     TEST_EVENT_TRIGGER_SENSITIVITY_LEVEL_LOW:
         type: int64u
-        defaultValue: "0xffffffff00000099"
+        defaultValue: "0x005c000000000099"
     TTEST_EVENT_TRIGGER_SENSITIVITY_LEVEL_CLEAR:
         type: int64u
-        defaultValue: "0xffffffff000000a8"
+        defaultValue: "0x005c0000000000a8"
 
 tests:
     - label: "Step 1: Commission DUT to TH"
diff --git a/src/app/tests/suites/certification/Test_TC_SMOKECO_2_6.yaml b/src/app/tests/suites/certification/Test_TC_SMOKECO_2_6.yaml
index 00ecd8b..2889336 100644
--- a/src/app/tests/suites/certification/Test_TC_SMOKECO_2_6.yaml
+++ b/src/app/tests/suites/certification/Test_TC_SMOKECO_2_6.yaml
@@ -29,34 +29,34 @@
         defaultValue: "hex:00112233445566778899aabbccddeeff"
     TEST_EVENT_TRIGGER_WARNING_SMOKE_ALARM:
         type: int64u
-        defaultValue: "0xffffffff00000090"
+        defaultValue: "0x005c000000000090"
     TEST_EVENT_TRIGGER_SMOKE_ALARM_CLEAR:
         type: int64u
-        defaultValue: "0xffffffff000000a0"
+        defaultValue: "0x005c0000000000a0"
     TEST_EVENT_TRIGGER_WARNING_CO_ALARM:
         type: int64u
-        defaultValue: "0xffffffff00000091"
+        defaultValue: "0x005c000000000091"
     TEST_EVENT_TRIGGER_CO_ALARM_CLEAR:
         type: int64u
-        defaultValue: "0xffffffff000000a1"
+        defaultValue: "0x005c0000000000a1"
     TEST_EVENT_TRIGGER_WARNING_BATTERY_ALERT:
         type: int64u
-        defaultValue: "0xffffffff00000095"
+        defaultValue: "0x005c000000000095"
     TEST_EVENT_TRIGGER_BATTERY_ALERT_CLEAR:
         type: int64u
-        defaultValue: "0xffffffff000000a5"
+        defaultValue: "0x005c0000000000a5"
     TEST_EVENT_TRIGGER_INTERCONNECT_SMOKE_ALARM:
         type: int64u
-        defaultValue: "0xffffffff00000092"
+        defaultValue: "0x005c000000000092"
     TEST_EVENT_TRIGGER_INTERCONNECT_SMOKE_ALARM_CLEAR:
         type: int64u
-        defaultValue: "0xffffffff000000a2"
+        defaultValue: "0x005c0000000000a2"
     TEST_EVENT_TRIGGER_INTERCONNECT_CO_ALARM:
         type: int64u
-        defaultValue: "0xffffffff00000094"
+        defaultValue: "0x005c000000000094"
     TEST_EVENT_TRIGGER_INTERCONNECT_CO_ALARM_CLEAR:
         type: int64u
-        defaultValue: "0xffffffff000000a4"
+        defaultValue: "0x005c0000000000a4"
     HIEST_PRI_ALARM:
         type: int8u
         defaultValue: 1
diff --git a/src/lib/support/IntrusiveList.h b/src/lib/support/IntrusiveList.h
index 8bd0afb..961113e 100644
--- a/src/lib/support/IntrusiveList.h
+++ b/src/lib/support/IntrusiveList.h
@@ -439,6 +439,14 @@
     void Remove(T * value) { IntrusiveListBase::Remove(Hook::ToNode(value)); }
     void Replace(T * original, T * replacement) { IntrusiveListBase::Replace(Hook::ToNode(original), Hook::ToNode(replacement)); }
     bool Contains(const T * value) const { return IntrusiveListBase::Contains(Hook::ToNode(value)); }
+
+    void Clear()
+    {
+        while (begin() != end())
+        {
+            Remove(&(*begin()));
+        }
+    }
 };
 
 } // namespace chip
diff --git a/src/lib/support/tests/TestIntrusiveList.cpp b/src/lib/support/tests/TestIntrusiveList.cpp
index afe7a1c..0d1779b 100644
--- a/src/lib/support/tests/TestIntrusiveList.cpp
+++ b/src/lib/support/tests/TestIntrusiveList.cpp
@@ -131,6 +131,35 @@
     list.Remove(&b);
 }
 
+void TestClear(nlTestSuite * inSuite, void * inContext)
+{
+    ListNode a, b, c;
+    IntrusiveList<ListNode> list;
+
+    NL_TEST_ASSERT(inSuite, !list.Contains(&a));
+    NL_TEST_ASSERT(inSuite, !list.Contains(&b));
+    NL_TEST_ASSERT(inSuite, !list.Contains(&c));
+
+    list.PushBack(&a);
+    list.PushFront(&c);
+
+    NL_TEST_ASSERT(inSuite, list.Contains(&a));
+    NL_TEST_ASSERT(inSuite, !list.Contains(&b));
+    NL_TEST_ASSERT(inSuite, list.Contains(&c));
+
+    list.PushBack(&b);
+
+    NL_TEST_ASSERT(inSuite, list.Contains(&a));
+    NL_TEST_ASSERT(inSuite, list.Contains(&b));
+    NL_TEST_ASSERT(inSuite, list.Contains(&c));
+
+    list.Clear();
+
+    NL_TEST_ASSERT(inSuite, !list.Contains(&a));
+    NL_TEST_ASSERT(inSuite, !list.Contains(&b));
+    NL_TEST_ASSERT(inSuite, !list.Contains(&c));
+}
+
 void TestReplaceNode(nlTestSuite * inSuite, void * inContext)
 {
     ListNode a, b;
@@ -242,6 +271,7 @@
     NL_TEST_DEF_FN(TestReplaceNode),         //
     NL_TEST_DEF_FN(TestMoveList),            //
     NL_TEST_DEF_FN(TestAutoUnlink),          //
+    NL_TEST_DEF_FN(TestClear),               //
     NL_TEST_SENTINEL(),                      //
 };
 
diff --git a/src/platform/nxp/k32w/k32w0/DefaultTestEventTriggerDelegate.cpp b/src/platform/nxp/k32w/k32w0/DefaultTestEventTriggerDelegate.cpp
index 1a01acf..69935bb 100644
--- a/src/platform/nxp/k32w/k32w0/DefaultTestEventTriggerDelegate.cpp
+++ b/src/platform/nxp/k32w/k32w0/DefaultTestEventTriggerDelegate.cpp
@@ -28,15 +28,4 @@
     return !mEnableKey.empty() && mEnableKey.data_equal(enableKey);
 }
 
-CHIP_ERROR DefaultTestEventTriggerDelegate::HandleEventTrigger(uint64_t eventTrigger)
-{
-    if (eventTrigger == kQueryTrigger)
-    {
-        ChipLogProgress(DeviceLayer, "DefaultTestEventTriggerDelegate: event triggered");
-        return CHIP_NO_ERROR;
-    }
-
-    return CHIP_ERROR_INVALID_ARGUMENT;
-}
-
 } // namespace chip
diff --git a/src/platform/nxp/k32w/k32w0/DefaultTestEventTriggerDelegate.h b/src/platform/nxp/k32w/k32w0/DefaultTestEventTriggerDelegate.h
index cf71fb3..0bfd4c5 100644
--- a/src/platform/nxp/k32w/k32w0/DefaultTestEventTriggerDelegate.h
+++ b/src/platform/nxp/k32w/k32w0/DefaultTestEventTriggerDelegate.h
@@ -25,12 +25,9 @@
 class DefaultTestEventTriggerDelegate : public TestEventTriggerDelegate
 {
 public:
-    static constexpr uint64_t kQueryTrigger = 1234;
-
     explicit DefaultTestEventTriggerDelegate(const ByteSpan & enableKey) : mEnableKey(enableKey) {}
 
     bool DoesEnableKeyMatch(const ByteSpan & enableKey) const override;
-    CHIP_ERROR HandleEventTrigger(uint64_t eventTrigger) override;
 
 private:
     ByteSpan mEnableKey;
diff --git a/src/platform/nxp/k32w/k32w1/DefaultTestEventTriggerDelegate.cpp b/src/platform/nxp/k32w/k32w1/DefaultTestEventTriggerDelegate.cpp
index 1a01acf..69935bb 100644
--- a/src/platform/nxp/k32w/k32w1/DefaultTestEventTriggerDelegate.cpp
+++ b/src/platform/nxp/k32w/k32w1/DefaultTestEventTriggerDelegate.cpp
@@ -28,15 +28,4 @@
     return !mEnableKey.empty() && mEnableKey.data_equal(enableKey);
 }
 
-CHIP_ERROR DefaultTestEventTriggerDelegate::HandleEventTrigger(uint64_t eventTrigger)
-{
-    if (eventTrigger == kQueryTrigger)
-    {
-        ChipLogProgress(DeviceLayer, "DefaultTestEventTriggerDelegate: event triggered");
-        return CHIP_NO_ERROR;
-    }
-
-    return CHIP_ERROR_INVALID_ARGUMENT;
-}
-
 } // namespace chip
diff --git a/src/platform/nxp/k32w/k32w1/DefaultTestEventTriggerDelegate.h b/src/platform/nxp/k32w/k32w1/DefaultTestEventTriggerDelegate.h
index cf71fb3..0bfd4c5 100644
--- a/src/platform/nxp/k32w/k32w1/DefaultTestEventTriggerDelegate.h
+++ b/src/platform/nxp/k32w/k32w1/DefaultTestEventTriggerDelegate.h
@@ -25,12 +25,9 @@
 class DefaultTestEventTriggerDelegate : public TestEventTriggerDelegate
 {
 public:
-    static constexpr uint64_t kQueryTrigger = 1234;
-
     explicit DefaultTestEventTriggerDelegate(const ByteSpan & enableKey) : mEnableKey(enableKey) {}
 
     bool DoesEnableKeyMatch(const ByteSpan & enableKey) const override;
-    CHIP_ERROR HandleEventTrigger(uint64_t eventTrigger) override;
 
 private:
     ByteSpan mEnableKey;
diff --git a/src/python_testing/TC_BOOLCFG_4_2.py b/src/python_testing/TC_BOOLCFG_4_2.py
index 06f5eca..c0a74a9 100644
--- a/src/python_testing/TC_BOOLCFG_4_2.py
+++ b/src/python_testing/TC_BOOLCFG_4_2.py
@@ -65,10 +65,11 @@
 
         asserts.assert_true('PIXIT.BOOLCFG.TEST_EVENT_TRIGGER_KEY' in self.matter_test_config.global_test_params,
                             "PIXIT.BOOLCFG.TEST_EVENT_TRIGGER_KEY must be included on the command line in "
-                            "the --int-arg flag as PIXIT.BOOLCFG.TEST_EVENT_TRIGGER_KEY:<key>")
+                            "the --hex-arg flag as PIXIT.BOOLCFG.TEST_EVENT_TRIGGER_KEY:<key>, "
+                            "e.g. --hex-arg PIXIT.BOOLCFG.TEST_EVENT_TRIGGER_KEY:000102030405060708090a0b0c0d0e0f")
 
         endpoint = self.user_params.get("endpoint", 1)
-        enableKey = self.matter_test_config.global_test_params['PIXIT.BOOLCFG.TEST_EVENT_TRIGGER_KEY'].to_bytes(16, byteorder='big')
+        enableKey = self.matter_test_config.global_test_params['PIXIT.BOOLCFG.TEST_EVENT_TRIGGER_KEY']
 
         self.step(1)
         attributes = Clusters.BooleanStateConfiguration.Attributes
diff --git a/src/python_testing/TC_BOOLCFG_4_3.py b/src/python_testing/TC_BOOLCFG_4_3.py
index 40a44a0..90106ef 100644
--- a/src/python_testing/TC_BOOLCFG_4_3.py
+++ b/src/python_testing/TC_BOOLCFG_4_3.py
@@ -77,10 +77,11 @@
 
         asserts.assert_true('PIXIT.BOOLCFG.TEST_EVENT_TRIGGER_KEY' in self.matter_test_config.global_test_params,
                             "PIXIT.BOOLCFG.TEST_EVENT_TRIGGER_KEY must be included on the command line in "
-                            "the --int-arg flag as PIXIT.BOOLCFG.TEST_EVENT_TRIGGER_KEY:<key>")
+                            "the --hex-arg flag as PIXIT.BOOLCFG.TEST_EVENT_TRIGGER_KEY:<key>, "
+                            "e.g. --hex-arg PIXIT.BOOLCFG.TEST_EVENT_TRIGGER_KEY:000102030405060708090a0b0c0d0e0f")
 
         endpoint = self.user_params.get("endpoint", 1)
-        enableKey = self.matter_test_config.global_test_params['PIXIT.BOOLCFG.TEST_EVENT_TRIGGER_KEY'].to_bytes(16, byteorder='big')
+        enableKey = self.matter_test_config.global_test_params['PIXIT.BOOLCFG.TEST_EVENT_TRIGGER_KEY']
 
         self.step(1)
         attributes = Clusters.BooleanStateConfiguration.Attributes
diff --git a/src/python_testing/TC_BOOLCFG_4_4.py b/src/python_testing/TC_BOOLCFG_4_4.py
index 12c350b..b60ef12 100644
--- a/src/python_testing/TC_BOOLCFG_4_4.py
+++ b/src/python_testing/TC_BOOLCFG_4_4.py
@@ -69,10 +69,11 @@
 
         asserts.assert_true('PIXIT.BOOLCFG.TEST_EVENT_TRIGGER_KEY' in self.matter_test_config.global_test_params,
                             "PIXIT.BOOLCFG.TEST_EVENT_TRIGGER_KEY must be included on the command line in "
-                            "the --int-arg flag as PIXIT.BOOLCFG.TEST_EVENT_TRIGGER_KEY:<key>")
+                            "the --hex-arg flag as PIXIT.BOOLCFG.TEST_EVENT_TRIGGER_KEY:<key>, "
+                            "e.g. --hex-arg PIXIT.BOOLCFG.TEST_EVENT_TRIGGER_KEY:000102030405060708090a0b0c0d0e0f")
 
         endpoint = self.user_params.get("endpoint", 1)
-        enableKey = self.matter_test_config.global_test_params['PIXIT.BOOLCFG.TEST_EVENT_TRIGGER_KEY'].to_bytes(16, byteorder='big')
+        enableKey = self.matter_test_config.global_test_params['PIXIT.BOOLCFG.TEST_EVENT_TRIGGER_KEY']
 
         self.step(1)
         attributes = Clusters.BooleanStateConfiguration.Attributes
diff --git a/src/python_testing/TC_BOOLCFG_5_1.py b/src/python_testing/TC_BOOLCFG_5_1.py
index 3d3d1b6..90868fd 100644
--- a/src/python_testing/TC_BOOLCFG_5_1.py
+++ b/src/python_testing/TC_BOOLCFG_5_1.py
@@ -64,10 +64,11 @@
 
         asserts.assert_true('PIXIT.BOOLCFG.TEST_EVENT_TRIGGER_KEY' in self.matter_test_config.global_test_params,
                             "PIXIT.BOOLCFG.TEST_EVENT_TRIGGER_KEY must be included on the command line in "
-                            "the --int-arg flag as PIXIT.BOOLCFG.TEST_EVENT_TRIGGER_KEY:<key>")
+                            "the --hex-arg flag as PIXIT.BOOLCFG.TEST_EVENT_TRIGGER_KEY:<key>, "
+                            "e.g. --hex-arg PIXIT.BOOLCFG.TEST_EVENT_TRIGGER_KEY:000102030405060708090a0b0c0d0e0f")
 
         endpoint = self.user_params.get("endpoint", 1)
-        enableKey = self.matter_test_config.global_test_params['PIXIT.BOOLCFG.TEST_EVENT_TRIGGER_KEY'].to_bytes(16, byteorder='big')
+        enableKey = self.matter_test_config.global_test_params['PIXIT.BOOLCFG.TEST_EVENT_TRIGGER_KEY']
 
         self.step(1)
         attributes = Clusters.BooleanStateConfiguration.Attributes
diff --git a/src/python_testing/TC_BOOLCFG_5_2.py b/src/python_testing/TC_BOOLCFG_5_2.py
index 65dd00f..6e26576 100644
--- a/src/python_testing/TC_BOOLCFG_5_2.py
+++ b/src/python_testing/TC_BOOLCFG_5_2.py
@@ -63,10 +63,11 @@
 
         asserts.assert_true('PIXIT.BOOLCFG.TEST_EVENT_TRIGGER_KEY' in self.matter_test_config.global_test_params,
                             "PIXIT.BOOLCFG.TEST_EVENT_TRIGGER_KEY must be included on the command line in "
-                            "the --int-arg flag as PIXIT.BOOLCFG.TEST_EVENT_TRIGGER_KEY:<key>")
+                            "the --hex-arg flag as PIXIT.BOOLCFG.TEST_EVENT_TRIGGER_KEY:<key>, "
+                            "e.g. --hex-arg PIXIT.BOOLCFG.TEST_EVENT_TRIGGER_KEY:000102030405060708090a0b0c0d0e0f")
 
         endpoint = self.user_params.get("endpoint", 1)
-        enableKey = self.matter_test_config.global_test_params['PIXIT.BOOLCFG.TEST_EVENT_TRIGGER_KEY'].to_bytes(16, byteorder='big')
+        enableKey = self.matter_test_config.global_test_params['PIXIT.BOOLCFG.TEST_EVENT_TRIGGER_KEY']
 
         self.step(1)
         attributes = Clusters.BooleanStateConfiguration.Attributes
