diff --git a/embassy/demos/common/Cargo.toml b/embassy/demos/common/Cargo.toml
index f17b586497dd9147ed502ead537b8ce7bd24e4d6..15e3728d407679f52ab77a203dbf579b4271bd8b 100644
--- a/embassy/demos/common/Cargo.toml
+++ b/embassy/demos/common/Cargo.toml
@@ -18,7 +18,8 @@ embassy-net-driver = { version = "0.1.0" }
 embassy-futures = { version = "0.1.0" }
 
 heapless = "0.7.15"
-menu = "0.3"
+# using local fork
+# menu = "0.3"
 embedded-io = { version = "0.4", features = ["async"] }
 
 defmt = { version = "0.3", optional = true }
diff --git a/embassy/demos/common/src/demo_menu.rs b/embassy/demos/common/src/demo_menu.rs
index 81c69c59cce7e346cf45f2fd94f34ddc2d958353..bde29d54419ff85e7c4238f6a2e124078c2c0578 100644
--- a/embassy/demos/common/src/demo_menu.rs
+++ b/embassy/demos/common/src/demo_menu.rs
@@ -1,4 +1,4 @@
-use menu::*;
+use crate::menu::{self, *};
 pub use crate::server::BufOutput;
 use core::fmt::Write;
 
@@ -93,31 +93,31 @@ fn select_foo<'a>(_menu: &Menu<BufOutput>, item: &Item<BufOutput>, args: &[&str]
     writeln!(
         context,
         "a = {:?}",
-        ::menu::argument_finder(item, args, "a")
+        menu::argument_finder(item, args, "a")
     )
     .unwrap();
     writeln!(
         context,
         "b = {:?}",
-        ::menu::argument_finder(item, args, "b")
+        menu::argument_finder(item, args, "b")
     )
     .unwrap();
     writeln!(
         context,
         "verbose = {:?}",
-        ::menu::argument_finder(item, args, "verbose")
+        menu::argument_finder(item, args, "verbose")
     )
     .unwrap();
     writeln!(
         context,
         "level = {:?}",
-        ::menu::argument_finder(item, args, "level")
+        menu::argument_finder(item, args, "level")
     )
     .unwrap();
     writeln!(
         context,
         "no_such_arg = {:?}",
-        ::menu::argument_finder(item, args, "no_such_arg")
+        menu::argument_finder(item, args, "no_such_arg")
     )
     .unwrap();
 }
diff --git a/embassy/demos/common/src/lib.rs b/embassy/demos/common/src/lib.rs
index d30e7b1ab4767a60da057ef7712a7f03f20d91c3..426fd9608ebb944173e84884425643fb63a9f00f 100644
--- a/embassy/demos/common/src/lib.rs
+++ b/embassy/demos/common/src/lib.rs
@@ -7,6 +7,7 @@
 mod config;
 mod server;
 
+pub mod menu;
 pub mod demo_menu;
 
 pub use server::{Shell, listener};
diff --git a/embassy/demos/common/src/menu.rs b/embassy/demos/common/src/menu.rs
index 4720d003334e53e43ee4fdc101e5cd6a2fb3f023..f4b85c0b21bbaa23e3c55b0e7448c0971b1c4cd7 100644
--- a/embassy/demos/common/src/menu.rs
+++ b/embassy/demos/common/src/menu.rs
@@ -287,14 +287,6 @@ where
             return;
         }
         let outcome = if input == 0x0D {
-            #[cfg(not(feature = "echo"))]
-            {
-                // Echo the command
-                write!(self.context, "\r").unwrap();
-                if let Ok(s) = core::str::from_utf8(&self.buffer[0..self.used]) {
-                    write!(self.context, "{}", s).unwrap();
-                }
-            }
             // Handle the command
             self.process_command();
             Outcome::CommandProcessed
@@ -309,7 +301,7 @@ where
             self.buffer[self.used] = input;
             self.used += 1;
 
-            #[cfg(feature = "echo")]
+            // #[cfg(feature = "echo")]
             {
                 // We have to do this song and dance because `self.prompt()` needs
                 // a mutable reference to self, and we can't have that while
diff --git a/embassy/demos/picow/Cargo.lock b/embassy/demos/picow/Cargo.lock
index ada84716bc5f943de4d951b0f4e189406fd8f187..5c3578e71c80470c26acd29a006f3f73fa2cec9a 100644
--- a/embassy/demos/picow/Cargo.lock
+++ b/embassy/demos/picow/Cargo.lock
@@ -1160,12 +1160,6 @@ version = "2.5.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d"
 
-[[package]]
-name = "menu"
-version = "0.3.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b03d7f798bfe97329ad6df937951142eec93886b37d87010502dd25e8cc75fd5"
-
 [[package]]
 name = "nb"
 version = "0.1.3"
@@ -1750,7 +1744,7 @@ dependencies = [
  "embassy-sync 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "embedded-io 0.4.0",
  "heapless",
- "menu",
+ "log",
  "sunset",
  "sunset-embassy",
  "sunset-sshwire-derive",
@@ -1782,7 +1776,7 @@ dependencies = [
  "embedded-io 0.4.0",
  "getrandom",
  "heapless",
- "menu",
+ "log",
  "panic-probe",
  "pin-utils",
  "rand",
diff --git a/embassy/demos/picow/Cargo.toml b/embassy/demos/picow/Cargo.toml
index 5fbdf85036d81a80c11011103a61710fe20308bd..f70f973928608b08ca70620bca2085b10dde5537 100644
--- a/embassy/demos/picow/Cargo.toml
+++ b/embassy/demos/picow/Cargo.toml
@@ -45,7 +45,8 @@ heapless = "0.7.15"
 getrandom = { version = "0.2", default-features = false, features = ["custom"]}
 pin-utils = "0.1"
 
-menu = "0.3"
+# using local fork
+# menu = "0.3"
 
 caprand = { git = "https://github.com/mkj/caprand" }
 
diff --git a/embassy/demos/picow/src/main.rs b/embassy/demos/picow/src/main.rs
index 1997203d694a6b6c17e6a03e8047a150dcfd336d..fb4b19f79e9cb1949a817ea1855be11388943fdb 100644
--- a/embassy/demos/picow/src/main.rs
+++ b/embassy/demos/picow/src/main.rs
@@ -27,7 +27,7 @@ use heapless::{String, Vec};
 
 use static_cell::StaticCell;
 
-use menu::Runner as MenuRunner;
+use demo_common::menu::Runner as MenuRunner;
 use embedded_io::asynch::Read;
 use embassy_sync::signal::Signal;
 use embassy_sync::blocking_mutex::raw::NoopRawMutex;
diff --git a/embassy/demos/std/Cargo.lock b/embassy/demos/std/Cargo.lock
index c1f95de5196b9cf38d6d60a7380aeafb03b3ced3..22fe1b21c3c880c9b19ba88065292f8c685cc667 100644
--- a/embassy/demos/std/Cargo.lock
+++ b/embassy/demos/std/Cargo.lock
@@ -730,12 +730,6 @@ version = "2.5.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d"
 
-[[package]]
-name = "menu"
-version = "0.3.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b03d7f798bfe97329ad6df937951142eec93886b37d87010502dd25e8cc75fd5"
-
 [[package]]
 name = "nb"
 version = "0.1.3"
@@ -1063,7 +1057,6 @@ dependencies = [
  "embedded-io",
  "heapless",
  "log",
- "menu",
  "sunset",
  "sunset-embassy",
  "sunset-sshwire-derive",
@@ -1087,7 +1080,6 @@ dependencies = [
  "heapless",
  "libc",
  "log",
- "menu",
  "rand",
  "sha2",
  "static_cell",
diff --git a/embassy/demos/std/Cargo.toml b/embassy/demos/std/Cargo.toml
index 9a51c31b804bc5bc7f032667650cca0d23def9a8..266bcf90b6b3b376f3cd108a303ce9fe936094ab 100644
--- a/embassy/demos/std/Cargo.toml
+++ b/embassy/demos/std/Cargo.toml
@@ -27,7 +27,8 @@ heapless = "0.7.15"
 libc = "0.2.101"
 async-io = "1.6.0"
 
-menu = "0.3"
+# using local fork
+# menu = "0.3"
 
 sunset-embassy = { path = "../../" }
 sunset = { path = "../../.." }
diff --git a/embassy/demos/std/src/main.rs b/embassy/demos/std/src/main.rs
index 4cd28b45d30f4153a650e5701fa841e2cc5a0ad4..3f0e2c64728127201d862ba9440f60234d1df2ef 100644
--- a/embassy/demos/std/src/main.rs
+++ b/embassy/demos/std/src/main.rs
@@ -14,7 +14,7 @@ use static_cell::StaticCell;
 use rand::rngs::OsRng;
 use rand::RngCore;
 
-use menu::Runner as MenuRunner;
+use demo_common::menu::Runner as MenuRunner;
 use embedded_io::asynch::Read;
 use embassy_sync::signal::Signal;
 use embassy_sync::blocking_mutex::raw::NoopRawMutex;