diff --git a/src/Client/ZB.MOM.WW.OtOpcUa.Client.UI/Views/ShelveAlarmWindow.axaml b/src/Client/ZB.MOM.WW.OtOpcUa.Client.UI/Views/ShelveAlarmWindow.axaml
new file mode 100644
index 00000000..2b0a5b03
--- /dev/null
+++ b/src/Client/ZB.MOM.WW.OtOpcUa.Client.UI/Views/ShelveAlarmWindow.axaml
@@ -0,0 +1,34 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ OneShot
+ Timed
+ Unshelve
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/Client/ZB.MOM.WW.OtOpcUa.Client.UI/Views/ShelveAlarmWindow.axaml.cs b/src/Client/ZB.MOM.WW.OtOpcUa.Client.UI/Views/ShelveAlarmWindow.axaml.cs
new file mode 100644
index 00000000..07d98f08
--- /dev/null
+++ b/src/Client/ZB.MOM.WW.OtOpcUa.Client.UI/Views/ShelveAlarmWindow.axaml.cs
@@ -0,0 +1,84 @@
+using Avalonia.Controls;
+using Avalonia.Interactivity;
+using Avalonia.Media;
+using ZB.MOM.WW.OtOpcUa.Client.Shared.Models;
+using ZB.MOM.WW.OtOpcUa.Client.UI.ViewModels;
+
+namespace ZB.MOM.WW.OtOpcUa.Client.UI.Views;
+
+public partial class ShelveAlarmWindow : Window
+{
+ private readonly AlarmsViewModel _alarmsVm;
+ private readonly AlarmEventViewModel _alarm;
+
+ /// Designer ctor.
+ public ShelveAlarmWindow()
+ {
+ InitializeComponent();
+ _alarmsVm = null!;
+ _alarm = null!;
+ }
+
+ /// Creates the shelve dialog for an alarm.
+ public ShelveAlarmWindow(AlarmsViewModel alarmsVm, AlarmEventViewModel alarm)
+ {
+ InitializeComponent();
+ _alarmsVm = alarmsVm;
+ _alarm = alarm;
+
+ var sourceText = this.FindControl("SourceText");
+ if (sourceText != null) sourceText.Text = alarm.SourceName;
+
+ var conditionText = this.FindControl("ConditionText");
+ if (conditionText != null) conditionText.Text = $"{alarm.ConditionName} (Severity: {alarm.Severity})";
+
+ var kindCombo = this.FindControl("KindCombo");
+ if (kindCombo != null) kindCombo.SelectionChanged += OnKindChanged;
+
+ var shelveButton = this.FindControl