diff --git a/Content.Shared/Trigger/Components/Effects/RemoveStatusEffectOnTriggerComponent.cs b/Content.Shared/Trigger/Components/Effects/RemoveStatusEffectOnTriggerComponent.cs
new file mode 100644
index 0000000000..7ea9f9a059
--- /dev/null
+++ b/Content.Shared/Trigger/Components/Effects/RemoveStatusEffectOnTriggerComponent.cs
@@ -0,0 +1,19 @@
+using Content.Shared.StatusEffectNew.Components;
+using Robust.Shared.GameStates;
+using Robust.Shared.Prototypes;
+
+namespace Content.Shared.Trigger.Components.Effects;
+
+///
+/// Removes a status effect when triggered.
+/// If TargetUser is true the user loses the status.
+///
+[RegisterComponent, NetworkedComponent, AutoGenerateComponentState]
+public sealed partial class RemoveStatusEffectOnTriggerComponent : BaseXOnTriggerComponent
+{
+ ///
+ /// Status effect to be removed.
+ ///
+ [DataField, AutoNetworkedField]
+ public EntProtoId Status;
+}
diff --git a/Content.Shared/Trigger/Components/Effects/SetStatusEffectOnTriggerComponent.cs b/Content.Shared/Trigger/Components/Effects/SetStatusEffectOnTriggerComponent.cs
new file mode 100644
index 0000000000..7e7fbda021
--- /dev/null
+++ b/Content.Shared/Trigger/Components/Effects/SetStatusEffectOnTriggerComponent.cs
@@ -0,0 +1,25 @@
+using Content.Shared.StatusEffectNew.Components;
+using Robust.Shared.GameStates;
+using Robust.Shared.Prototypes;
+
+namespace Content.Shared.Trigger.Components.Effects;
+
+///
+/// Adds a status effect when triggered.
+/// If TargetUser is true the user will gain the effect.
+///
+[RegisterComponent, NetworkedComponent, AutoGenerateComponentState]
+public sealed partial class SetStatusEffectOnTriggerComponent : BaseXOnTriggerComponent
+{
+ ///
+ /// Status effect to be added.
+ ///
+ [DataField, AutoNetworkedField]
+ public EntProtoId Status;
+
+ ///
+ /// How long the status lasts. Permanent until removed if null.
+ ///
+ [DataField, AutoNetworkedField]
+ public TimeSpan? Duration;
+}
diff --git a/Content.Shared/Trigger/Systems/StatusEffectOnTriggerSystem.cs b/Content.Shared/Trigger/Systems/StatusEffectOnTriggerSystem.cs
new file mode 100644
index 0000000000..c766d7b467
--- /dev/null
+++ b/Content.Shared/Trigger/Systems/StatusEffectOnTriggerSystem.cs
@@ -0,0 +1,24 @@
+using Content.Shared.StatusEffectNew;
+using Content.Shared.Trigger.Components.Effects;
+
+namespace Content.Shared.Trigger.Systems;
+
+public sealed class SetStatusEffectOnTriggerSystem : XOnTriggerSystem
+{
+ [Dependency] private readonly StatusEffectsSystem _status = default!;
+
+ protected override void OnTrigger(Entity ent, EntityUid target, ref TriggerEvent args)
+ {
+ args.Handled |= _status.TrySetStatusEffectDuration(target, ent.Comp.Status, ent.Comp.Duration);
+ }
+}
+
+public sealed class RemoveStatusEffectOnTriggerSystem : XOnTriggerSystem
+{
+ [Dependency] private readonly StatusEffectsSystem _status = default!;
+
+ protected override void OnTrigger(Entity ent, EntityUid target, ref TriggerEvent args)
+ {
+ args.Handled |= _status.TryRemoveStatusEffect(target, ent.Comp.Status);
+ }
+}