diff --git a/embassy/demos/common/server.rs b/embassy/demos/common/server.rs
index b1f561b31aa36ea4cb5afa28b0dd729ad1bdd853..c5912b140b3d5b3967cccd8cd31c701913d9a532 100644
--- a/embassy/demos/common/server.rs
+++ b/embassy/demos/common/server.rs
@@ -185,7 +185,8 @@ pub trait Shell : Default {
 /// asynchronously to a channel.
 #[derive(Default)]
 pub struct BufOutput {
-    s: heapless::String<1024>,
+    /// Sufficient to hold output produced from a single keystroke input. Further output will be discarded
+    s: heapless::String<300>,
 }
 
 impl BufOutput {
@@ -205,12 +206,20 @@ impl BufOutput {
 
 impl core::fmt::Write for BufOutput {
     fn write_str(&mut self, s: &str) -> Result<(), core::fmt::Error> {
-        for c in s.chars() {
-            if c == '\n' {
-                self.s.push('\r').map_err(|_| core::fmt::Error)?;
+        let mut inner = || {
+            for c in s.chars() {
+                if c == '\n' {
+                    self.s.push('\r').map_err(|_| core::fmt::Error)?;
+                }
+                self.s.push(c).map_err(|_| core::fmt::Error)?;
             }
-            self.s.push(c).map_err(|_| core::fmt::Error)?;
+            Ok::<_, core::fmt::Error>(())
+        };
+
+        if inner().is_err() {
+            trace!("Buffer full in BufOutput");
         }
+
         Ok(())
     }
 }
diff --git a/embassy/demos/picow/src/main.rs b/embassy/demos/picow/src/main.rs
index 7fb1bd3b63faf90a66c40907a40a854813decf8c..39eb0e24a4c998a700be893d1bff662718598c78 100644
--- a/embassy/demos/picow/src/main.rs
+++ b/embassy/demos/picow/src/main.rs
@@ -109,8 +109,8 @@ impl Shell for DemoShell {
                 let b = &mut b[..lr];
                 for c in b.iter() {
                     menu.input_byte(*c);
+                    menu.context.flush(&mut stdio).await?;
                 }
-                menu.context.flush(&mut stdio).await?;
             }
             Ok(())
         };
diff --git a/embassy/src/server.rs b/embassy/src/server.rs
index 2bdc685ffea1778a99d503f94f8d85843596f5f7..7954c5d7e76d6e1fb7f5dd3421438601d6273f10 100644
--- a/embassy/src/server.rs
+++ b/embassy/src/server.rs
@@ -3,7 +3,7 @@ use embassy_sync::blocking_mutex::raw::RawMutex;
 use embedded_io::asynch;
 
 use sunset::*;
-use sunset::behaviour::{UnusedCli, UnusedServ};
+use sunset::behaviour::UnusedCli;
 
 use crate::*;
 use embassy_sunset::EmbassySunset;
diff --git a/src/conn.rs b/src/conn.rs
index e42c82fd77df41d98f12b41a9ed158815e3918d1..d203ed49c75a54e5ce40c66f96686485bf04c0ca 100644
--- a/src/conn.rs
+++ b/src/conn.rs
@@ -39,6 +39,8 @@ pub(crate) struct Conn<C: CliBehaviour, S: ServBehaviour> {
     parse_ctx: ParseContext,
 
     /// Remote version string. Kept for later kexinit rekeying
+    // TODO: could save space by hashing it into a KexHash and storing that instead.
+    // 256 bytes -> 112 bytes
     pub(crate) remote_version: ident::RemoteVersion,
 
     pub(crate) channels: Channels<C, S>,
diff --git a/src/namelist.rs b/src/namelist.rs
index 78b9a4011afc6d0274b479f0916c6231e84e3815..f871fac8053eec7e86149965ca30fd9e8a48b9bc 100644
--- a/src/namelist.rs
+++ b/src/namelist.rs
@@ -18,7 +18,10 @@ use heapless::Vec;
 // - key types
 // - signature types
 // - auth types
-pub const MAX_LOCAL_NAMES: usize = 5;
+/// Max count of LocalNames entries
+///
+/// Current max is for kex, [curve25519, curve25519@libssh, ext-info, kexguess2]
+pub const MAX_LOCAL_NAMES: usize = 4;
 static EMPTY_LOCALNAMES: LocalNames = LocalNames::new();
 
 /// A comma separated string, can be decoded or encoded.