diff --git a/src/ui/panes.rs b/src/ui/panes.rs
index 8750e9a453e223349edf428252912a9fe63ba7e2..b41623dfc02039396356af778ccaa4fa261227df 100644
--- a/src/ui/panes.rs
+++ b/src/ui/panes.rs
@@ -1,5 +1,6 @@
 mod default;
 mod messages_viewer;
+mod pid;
 mod pid_drawing_tool;
 pub mod plot;
 
@@ -88,7 +89,12 @@ pub enum PaneKind {
 
     #[strum(message = "Plot 2D")]
     Plot2D(plot::Plot2DPane),
-    PidDrawingTool(pid_drawing_tool::PidPane),
+
+    #[strum(message = "PID Old")]
+    PidOld(pid_drawing_tool::PidPane),
+
+    #[strum(message = "PID New")]
+    Pid(pid::Pid),
 }
 
 impl Default for PaneKind {
diff --git a/src/ui/panes/default.rs b/src/ui/panes/default.rs
index 1271daade20d5b9b2ab83379517aeea135e487e0..c3f7979e5ec83ea72df13087940f2fec997af02b 100644
--- a/src/ui/panes/default.rs
+++ b/src/ui/panes/default.rs
@@ -1,5 +1,4 @@
 use super::PaneBehavior;
-use super::{pid_drawing_tool::PidPane, plot::Plot2DPane, Pane, PaneBehavior, PaneKind};
 use serde::{Deserialize, Serialize};
 use tracing::debug;
 
@@ -40,11 +39,6 @@ impl PaneBehavior for DefaultPane {
                 if ui.button("Widget Gallery").clicked() {
                     response.set_action(PaneAction::ReplaceThroughGallery(Some(tile_id)));
                 }
-                if ui.button("Pid Drawing Tool").clicked() {
-                    response.set_action(PaneAction::Replace(Pane::boxed(
-                        PaneKind::PidDrawingTool(PidPane::default()),
-                    )));
-                }
             })
             .response
         });
diff --git a/src/ui/panes/pid_drawing_tool.rs b/src/ui/panes/pid_drawing_tool.rs
index b7b5bbaada800354191af830d4917a2ecc78f0ca..0b68be7608c1178dec86908d3a729a420c7870c9 100644
--- a/src/ui/panes/pid_drawing_tool.rs
+++ b/src/ui/panes/pid_drawing_tool.rs
@@ -6,6 +6,7 @@ mod symbols;
 use connections::Connection;
 use core::f32;
 use egui::{Color32, Context, CursorIcon, PointerButton, Response, Sense, Theme, Ui};
+use egui_tiles::TileId;
 use elements::Element;
 use glam::Vec2;
 use grid::GridInfo;
@@ -54,7 +55,7 @@ impl PartialEq for PidPane {
 }
 
 impl PaneBehavior for PidPane {
-    fn ui(&mut self, ui: &mut egui::Ui) -> PaneResponse {
+    fn ui(&mut self, ui: &mut egui::Ui, _: TileId) -> PaneResponse {
         let theme = PidPane::find_theme(ui.ctx());
 
         if self.center_content && !self.editable {
diff --git a/src/ui/panes/pid_drawing_tool/symbols.rs b/src/ui/panes/pid_drawing_tool/symbols.rs
index 1245043d5c62f000ad683d0c76c6ed1cce1d4759..d4b92f3ed0f2f811c2b7f6d6b31cf2f1d6d32454 100644
--- a/src/ui/panes/pid_drawing_tool/symbols.rs
+++ b/src/ui/panes/pid_drawing_tool/symbols.rs
@@ -6,6 +6,8 @@ use motor_valve::MotorValve;
 use serde::{Deserialize, Serialize};
 use strum_macros::{Display, EnumIter};
 
+use crate::mavlink::ViewId;
+
 #[derive(Clone, Serialize, Deserialize, PartialEq, EnumIter, Display, Debug)]
 pub enum Symbol {
     Arrow,
@@ -172,7 +174,7 @@ struct MavlinkValue {
     field: String,
 
     #[serde(skip)]
-    view_id: egui::Id,
+    view_id: ViewId,
 }
 
 #[derive(Deserialize)]
@@ -186,7 +188,7 @@ impl From<SerialMavlinkValue> for MavlinkValue {
         Self {
             msg_id: value.msg_id,
             field: value.field,
-            view_id: egui::Id::new(""),
+            view_id: ViewId::new(),
         }
     }
 }
diff --git a/src/ui/panes/pid_drawing_tool/symbols/motor_valve.rs b/src/ui/panes/pid_drawing_tool/symbols/motor_valve.rs
index af4f38f55f56eef934762ba41ab9218be32d8111..3fd42c80f15021c2216c01ed733b2d8004d2b4e5 100644
--- a/src/ui/panes/pid_drawing_tool/symbols/motor_valve.rs
+++ b/src/ui/panes/pid_drawing_tool/symbols/motor_valve.rs
@@ -1,4 +1,4 @@
-use crate::mavlink::{extract_from_message, MavlinkResult, MessageView, TimedMessage};
+use crate::mavlink::{extract_from_message, MavlinkResult, MessageView, TimedMessage, ViewId};
 
 use super::MavlinkValue;
 
@@ -19,7 +19,7 @@ impl Default for MotorValve {
             source: MavlinkValue {
                 msg_id: orion::GSE_TM_DATA::ID,
                 field: "n2o_filling_valve_state".to_string(),
-                view_id: egui::Id::new(""),
+                view_id: ViewId::new(),
             },
             last_value: None,
         }
@@ -27,8 +27,8 @@ impl Default for MotorValve {
 }
 
 impl MessageView for MotorValve {
-    fn widget_id(&self) -> &egui::Id {
-        &self.source.view_id
+    fn view_id(&self) -> ViewId {
+        self.source.view_id
     }
 
     fn id_of_interest(&self) -> u32 {