diff --git a/embassy/demos/common/src/menu.rs b/embassy/demos/common/src/menu.rs
index 31322fe7138953b5eefffb1b2188294eaad14343..633f41180cfc764755807676649fc0f8d892fca5 100644
--- a/embassy/demos/common/src/menu.rs
+++ b/embassy/demos/common/src/menu.rs
@@ -403,6 +403,9 @@ where
                         }
                     }
                 } else if cmd == "exit" && self.depth != 0 {
+                    if let Some(cb_fn) = self.menus[self.depth].unwrap().exit {
+                        cb_fn(&mut self.context);
+                    }
                     self.menus[self.depth] = None;
                     self.depth -= 1;
                 } else {
@@ -423,6 +426,9 @@ where
                                 ItemType::Menu(m) => {
                                     self.depth += 1;
                                     self.menus[self.depth] = Some(m);
+                                    if let Some(cb_fn) = m.entry {
+                                        cb_fn(&mut self.context);
+                                    }
                                 }
                                 ItemType::_Dummy => {
                                     unreachable!();