diff --git a/src/Artemis.UI.Shared/Controls/Pagination/Pagination.cs b/src/Artemis.UI.Shared/Controls/Pagination/Pagination.cs
new file mode 100644
index 000000000..26352ee17
--- /dev/null
+++ b/src/Artemis.UI.Shared/Controls/Pagination/Pagination.cs
@@ -0,0 +1,172 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using Avalonia;
+using Avalonia.Controls;
+using Avalonia.Controls.Metadata;
+using Avalonia.Controls.Primitives;
+using Avalonia.Input;
+using Avalonia.Interactivity;
+using ReactiveUI;
+
+namespace Artemis.UI.Shared.Pagination;
+
+///
+/// Represents a pagination control that can be used to switch between pages.
+///
+[TemplatePart("PART_PreviousButton", typeof(Button))]
+[TemplatePart("PART_NextButton", typeof(Button))]
+[TemplatePart("PART_PagesView", typeof(StackPanel))]
+public partial class Pagination : TemplatedControl
+{
+ ///
+ public Pagination()
+ {
+ PropertyChanged += OnPropertyChanged;
+ }
+
+ public Button? PreviousButton { get; set; }
+ public Button? NextButton { get; set; }
+ public StackPanel? PagesView { get; set; }
+
+ ///
+ protected override void OnApplyTemplate(TemplateAppliedEventArgs e)
+ {
+ if (PreviousButton != null)
+ PreviousButton.Click -= PreviousButtonOnClick;
+ if (NextButton != null)
+ NextButton.Click -= NextButtonOnClick;
+
+ PreviousButton = e.NameScope.Find