diff --git a/src/ui/panes/pid_drawing_tool.rs b/src/ui/panes/pid_drawing_tool.rs
index 712cfa56a7eaffb514d58c05858c8e7173538e2a..26150f121684eb4f29a41ecc2d5a33d9b9f5ab71 100644
--- a/src/ui/panes/pid_drawing_tool.rs
+++ b/src/ui/panes/pid_drawing_tool.rs
@@ -1,8 +1,9 @@
 mod pid_elements;
 
-use egui::{epaint::PathStroke, Color32, PointerButton, Pos2, Sense, Stroke, Theme};
+use egui::{epaint::PathStroke, Color32, PointerButton, Pos2, Sense, Theme, Vec2};
 use pid_elements::{PidElement, PidSymbol};
 use serde::{Deserialize, Serialize};
+use std::f32::consts::PI;
 use strum::IntoEnumIterator;
 
 use crate::ui::composable_view::PaneResponse;
@@ -84,7 +85,9 @@ impl PaneBehavior for PidPane {
                 ),
             );
 
-            egui::Image::new(element.get_image(theme)).paint_at(ui, image_rect);
+            egui::Image::new(element.get_image(theme))
+                .rotate(element.rotation, Vec2::new(0.5, 0.5))
+                .paint_at(ui, image_rect);
         }
 
         let (_, response) = ui.allocate_at_least(window_rect.size(), Sense::click_and_drag());
@@ -108,6 +111,27 @@ impl PaneBehavior for PidPane {
                         .position(|element| element.contains(self.context_menu_pos));
                     ui.close_menu();
                 }
+
+                if ui.button("Rotate 90° ⟲").clicked() {
+                    if let Some(elem) = self
+                        .elements
+                        .iter_mut()
+                        .find(|element| element.contains(self.context_menu_pos))
+                    {
+                        elem.rotation += PI / 2.0;
+                    }
+                    ui.close_menu();
+                }
+                if ui.button("Rotate 90° ⟳").clicked() {
+                    if let Some(elem) = self
+                        .elements
+                        .iter_mut()
+                        .find(|element| element.contains(self.context_menu_pos))
+                    {
+                        elem.rotation -= PI / 2.0;
+                    }
+                    ui.close_menu();
+                }
             }
 
             ui.menu_button("Symbols", |ui| {
@@ -117,6 +141,7 @@ impl PaneBehavior for PidPane {
                             pos: self.context_menu_pos,
                             size: 10,
                             symbol,
+                            rotation: 0.0,
                         });
                         ui.close_menu();
                     }
diff --git a/src/ui/panes/pid_drawing_tool/pid_elements.rs b/src/ui/panes/pid_drawing_tool/pid_elements.rs
index 7c1296192fa0b62302f88c5a956d0ea458f53805..fd571ae7f6f0481a2cc0fd663e99a0d42a9369d0 100644
--- a/src/ui/panes/pid_drawing_tool/pid_elements.rs
+++ b/src/ui/panes/pid_drawing_tool/pid_elements.rs
@@ -7,6 +7,7 @@ pub struct PidElement {
     pub pos: (i32, i32),
     pub size: i32,
     pub symbol: PidSymbol,
+    pub rotation: f32,
 }
 
 #[derive(Debug, Clone, Serialize, Deserialize, PartialEq, EnumIter, Display)]