diff --git a/src/input.rs b/src/input.rs
index 3e1b84ebf95d310d32fa158b3401d89edb4c6a8d..77347db1e49639a62a5580d0610828edf72bfbca 100644
--- a/src/input.rs
+++ b/src/input.rs
@@ -22,8 +22,8 @@ use wasm_bindgen_futures::JsFuture;
 use crate::{
     get_node_cursor_pos, get_timestamp, get_x_offset_center, get_y_offset_center,
     save_edit_history, CosmicAttrs, CosmicEditHistory, CosmicEditor, CosmicFontSystem,
-    CosmicMaxChars, CosmicMaxLines, CosmicTextChanged, CosmicTextPosition, Focus, ReadOnly,
-    XOffset,
+    CosmicMaxChars, CosmicMaxLines, CosmicTextChanged, CosmicTextPosition, Focus, PasswordInput,
+    ReadOnly, XOffset,
 };
 
 #[derive(Resource)]
@@ -227,6 +227,7 @@ pub(crate) fn input_kb(
         &CosmicMaxChars,
         Entity,
         Option<&ReadOnly>,
+        Option<&PasswordInput>,
     )>,
     mut evw_changed: EventWriter<CosmicTextChanged>,
     mut font_system: ResMut<CosmicFontSystem>,
@@ -234,8 +235,16 @@ pub(crate) fn input_kb(
     mut edits_duration: Local<Option<Duration>>,
     _channel: Option<Res<WasmPasteAsyncChannel>>,
 ) {
-    for (mut editor, mut edit_history, attrs, max_lines, max_chars, entity, readonly_opt) in
-        &mut cosmic_edit_query.iter_mut()
+    for (
+        mut editor,
+        mut edit_history,
+        attrs,
+        max_lines,
+        max_chars,
+        entity,
+        readonly_opt,
+        password_opt,
+    ) in &mut cosmic_edit_query.iter_mut()
     {
         if active_editor.0 != Some(entity) {
             continue;
@@ -425,6 +434,10 @@ pub(crate) fn input_kb(
                                         editor.0.action(&mut font_system.0, Action::Insert(c));
                                     }
                                 } else {
+                                    if password_opt.is_some() && c.len_utf8() > 1 {
+                                        println!("Cannot input multi-byte char '{}' to password field! See https://github.com/StaffEngineer/bevy_cosmic_edit/pull/99#issuecomment-1782607486",c);
+                                        continue;
+                                    }
                                     editor.0.action(&mut font_system.0, Action::Insert(c));
                                 }
                             }
@@ -496,6 +509,10 @@ pub(crate) fn input_kb(
                     }
                     editor.0.action(&mut font_system.0, Action::Backspace);
                 } else if !command && (max_chars.0 == 0 || editor.get_text().len() < max_chars.0) {
+                    if password_opt.is_some() && char_ev.char.len_utf8() > 1 {
+                        println!("Cannot input multi-byte char '{}' to password field! See https://github.com/StaffEngineer/bevy_cosmic_edit/pull/99#issuecomment-1782607486",char_ev.char);
+                        continue;
+                    }
                     editor
                         .0
                         .action(&mut font_system.0, Action::Insert(char_ev.char));
@@ -695,6 +712,10 @@ pub fn poll_wasm_paste(
                                 editor.0.action(&mut font_system.0, Action::Insert(c));
                             }
                         } else {
+                            if password_opt.is_some() && char_ev.char.len_utf8() > 1 {
+                                println!("Cannot input multi-byte char '{}' to password field! See https://github.com/StaffEngineer/bevy_cosmic_edit/pull/99#issuecomment-1782607486",char_ev.char);
+                                continue;
+                            }
                             editor.0.action(&mut font_system.0, Action::Insert(c));
                         }
                     }
diff --git a/src/render.rs b/src/render.rs
index ab125c93c2589ce443e58b7d3d8992a836c9a886..4589d32efb5e0edfb7b9aea2e94dff41e9edbee7 100644
--- a/src/render.rs
+++ b/src/render.rs
@@ -506,6 +506,7 @@ pub(crate) fn hide_password_text(
     mut editor_q: Query<(Entity, &mut CosmicEditor, &CosmicAttrs, &PasswordInput)>,
     mut font_system: ResMut<CosmicFontSystem>,
     mut password_input_states: ResMut<PasswordStates>,
+    active_editor: Res<Focus>,
 ) {
     for (entity, mut cosmic_editor, attrs, password) in editor_q.iter_mut() {
         let text = cosmic_editor.get_text();
@@ -537,13 +538,15 @@ pub(crate) fn hide_password_text(
 
             cursor.index *= char_len;
 
-            if cosmic_editor.0.buffer().lines[0].layout_opt().is_some() {
-                let lc = cosmic_editor.0.buffer().layout_cursor(&cursor);
+            cosmic_editor.0.set_select_opt(select_opt);
 
-                println!("{:?}", lc.glyph);
+            // Fixes stuck cursor on password inputs
+            if let Some(active) = active_editor.0 {
+                if entity != active {
+                    cursor.color = Some(cosmic_text::Color::rgba(0, 0, 0, 0));
+                }
             }
 
-            cosmic_editor.0.set_select_opt(select_opt);
             cosmic_editor.0.set_cursor(cursor);
         }