diff --git a/src/ui/panes.rs b/src/ui/panes.rs
index 33f01ce633a5eef5f33389411968234a0dc97330..9b27514344054069934b1ff81472c9e7052b5cf6 100644
--- a/src/ui/panes.rs
+++ b/src/ui/panes.rs
@@ -1,7 +1,8 @@
 mod default;
 mod messages_viewer;
 mod pid_drawing_tool;
-pub mod plot;
+mod plot;
+mod valve_control;
 
 use egui_tiles::TileId;
 use enum_dispatch::enum_dispatch;
@@ -91,6 +92,9 @@ pub enum PaneKind {
 
     #[strum(message = "Pid")]
     Pid(pid_drawing_tool::PidPane),
+
+    #[strum(message = "Valve Control")]
+    ValveControl(valve_control::ValveControlPane),
 }
 
 impl Default for PaneKind {
diff --git a/src/ui/panes/plot.rs b/src/ui/panes/plot.rs
index 4a98372c1fd099015a2774a335a285fef93b3e2b..684f2211ad620a4edc404c170e05ee2916ef75ab 100644
--- a/src/ui/panes/plot.rs
+++ b/src/ui/panes/plot.rs
@@ -33,7 +33,7 @@ pub struct Plot2DPane {
     #[serde(skip)]
     settings_visible: bool,
     #[serde(skip)]
-    pub contains_pointer: bool,
+    contains_pointer: bool,
 }
 
 impl PartialEq for Plot2DPane {
diff --git a/src/ui/panes/valve_control.rs b/src/ui/panes/valve_control.rs
new file mode 100644
index 0000000000000000000000000000000000000000..a46ff41cd1dbc3a276ff8b2fd44bf12c34749564
--- /dev/null
+++ b/src/ui/panes/valve_control.rs
@@ -0,0 +1,25 @@
+use egui_tiles::TileId;
+use serde::{Deserialize, Serialize};
+
+use crate::ui::app::PaneResponse;
+
+use super::PaneBehavior;
+
+mod enums;
+
+#[derive(Clone, PartialEq, Default, Serialize, Deserialize, Debug)]
+pub struct ValveControlPane {
+    // Temporary Internal state
+    #[serde(skip)]
+    contains_pointer: bool,
+}
+
+impl PaneBehavior for ValveControlPane {
+    fn ui(&mut self, ui: &mut egui::Ui, tile_id: TileId) -> PaneResponse {
+        todo!()
+    }
+
+    fn contains_pointer(&self) -> bool {
+        self.contains_pointer
+    }
+}
diff --git a/src/ui/panes/valve_control/enums.rs b/src/ui/panes/valve_control/enums.rs
new file mode 100644
index 0000000000000000000000000000000000000000..a1bf8fcdd341d13f6c306c69de358c3d5912122f
--- /dev/null
+++ b/src/ui/panes/valve_control/enums.rs
@@ -0,0 +1,68 @@
+use std::fmt::Display;
+
+use strum_macros::EnumIter;
+
+use crate::mavlink::{
+    MessageData, SET_ATOMIC_VALVE_TIMING_TC_DATA, SET_VALVE_MAXIMUM_APERTURE_TC_DATA, Servoslist,
+};
+
+#[allow(non_camel_case_types)]
+#[derive(Clone, Copy, Debug, PartialEq, Eq, EnumIter)]
+pub enum Valve {
+    OxFilling,
+    OxRelease,
+    OxVenting,
+    N2Filling,
+    N2Release,
+    N2Quenching,
+    N23Way,
+    Main,
+    Nitrogen,
+}
+
+impl From<Valve> for Servoslist {
+    fn from(valve: Valve) -> Servoslist {
+        match valve {
+            Valve::OxFilling => Servoslist::OX_FILLING_VALVE,
+            Valve::OxRelease => Servoslist::OX_RELEASE_VALVE,
+            Valve::OxVenting => Servoslist::OX_VENTING_VALVE,
+            Valve::N2Filling => Servoslist::N2_FILLING_VALVE,
+            Valve::N2Release => Servoslist::N2_RELEASE_VALVE,
+            Valve::N2Quenching => Servoslist::N2_QUENCHING_VALVE,
+            Valve::N23Way => Servoslist::N2_3WAY_VALVE,
+            Valve::Main => Servoslist::MAIN_VALVE,
+            Valve::Nitrogen => Servoslist::NITROGEN_VALVE,
+        }
+    }
+}
+
+impl Display for Valve {
+    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
+        match self {
+            Valve::OxFilling => write!(f, "Oxidizer Filling"),
+            Valve::OxRelease => write!(f, "Oxidizer Release"),
+            Valve::OxVenting => write!(f, "Oxidizer Venting"),
+            Valve::N2Filling => write!(f, "Nitrogen Filling"),
+            Valve::N2Release => write!(f, "Nitrogen Release"),
+            Valve::N2Quenching => write!(f, "Nitrogen Quenching"),
+            Valve::N23Way => write!(f, "Nitrogen 3-Way"),
+            Valve::Main => write!(f, "Main"),
+            Valve::Nitrogen => write!(f, "Nitrogen"),
+        }
+    }
+}
+
+#[derive(Clone, Copy, Debug, PartialEq, Eq, EnumIter)]
+pub enum ValveCommands {
+    AtomicValveTiming,
+    ValveMaximumAperture,
+}
+
+impl From<ValveCommands> for u32 {
+    fn from(command: ValveCommands) -> u32 {
+        match command {
+            ValveCommands::AtomicValveTiming => SET_ATOMIC_VALVE_TIMING_TC_DATA::ID,
+            ValveCommands::ValveMaximumAperture => SET_VALVE_MAXIMUM_APERTURE_TC_DATA::ID,
+        }
+    }
+}