diff --git a/crates/ui-egui/src/edit_window.rs b/crates/ui-egui/src/edit_window.rs
--- a/crates/ui-egui/src/edit_window.rs
+++ b/crates/ui-egui/src/edit_window.rs
@@ -4,7 +4,7 @@ use crate::dialogs::Dialog;
 use crate::spot::Spot;
 use crate::theme::{Tokens, bold, clip_colors, regular, rgb};
 use crate::widgets::{groove, level_pos, meter_pos, raised_key, shade};
-use crate::{Gesture, SoundApp, toolbar};
+use crate::{Gesture, MainWindow, SoundApp, toolbar};
 use egui::{Align2, Color32, CornerRadius, Pos2, Rect, Sense, Shape, Stroke, StrokeKind, Ui, pos2, vec2};
 use serde_json::json;
 use soundcraft_engine::edit as ops;
@@ -154,12 +154,16 @@ fn universe(app: &mut SoundApp, ui: &mut Ui) {
     }
 }
 
-fn dock_tabs(app: &mut SoundApp, ui: &mut Ui) {
+pub(crate) fn dock_tabs(app: &mut SoundApp, ui: &mut Ui) {
     let t = Tokens::current();
     let r = ui.max_rect();
     let mut x = r.min.x + 10.0;
+    let edit_on = app.ui.mix_separate || app.ui.window == MainWindow::Edit;
+    let mix_on = !app.ui.mix_separate && app.ui.window == MainWindow::Mix;
     for (label, on, id) in [
+        ("EDIT", edit_on, "window.edit"),
         ("MIDI EDITOR", app.ui.show_midi_editor, "window.midi_editor"),
+        ("MIXER", mix_on, "window.mix"),
         ("MEMORY LOCATIONS", app.ui.show_memory_locations, "window.memory_locations"),
         ("UNDO HISTORY", app.ui.show_undo_history, "window.undo_history"),
     ] {
@@ -176,7 +180,7 @@ fn dock_tabs(app: &mut SoundApp, ui: &mut Ui) {
     }
 }
 
-fn status_bar(app: &mut SoundApp, ui: &mut Ui) {
+pub(crate) fn status_bar(app: &mut SoundApp, ui: &mut Ui) {
     let t = Tokens::current();
     let r = ui.max_rect();
     let s = app.engine.session();
diff --git a/crates/ui-egui/src/mix_window.rs b/crates/ui-egui/src/mix_window.rs
--- a/crates/ui-egui/src/mix_window.rs
+++ b/crates/ui-egui/src/mix_window.rs
@@ -16,6 +16,16 @@ pub fn strip_width(narrow: bool) -> f32 {
 }
 
 pub fn show(app: &mut SoundApp, ui: &mut Ui) {
+    // The same status line and switch bar as the Edit window, so the bar does not move when the
+    // page changes. Distinct panel ids keep the separate Mix viewport independent.
+    egui::Panel::bottom("edit_status_mix")
+        .exact_size(22.0)
+        .frame(egui::Frame::NONE.fill(Tokens::current().toolbar_bg))
+        .show(ui, |ui| crate::edit_window::status_bar(app, ui));
+    egui::Panel::bottom("lower_dock_tabs_mix")
+        .exact_size(22.0)
+        .frame(egui::Frame::NONE.fill(Tokens::current().panel_bg2))
+        .show(ui, |ui| crate::edit_window::dock_tabs(app, ui));
     crate::docking::show(app, ui, crate::MainWindow::Mix);
 }
 
diff --git a/crates/ui-egui/tests/it/track_name_menu.rs b/crates/ui-egui/tests/it/track_name_menu.rs
--- a/crates/ui-egui/tests/it/track_name_menu.rs
+++ b/crates/ui-egui/tests/it/track_name_menu.rs
@@ -35,6 +35,7 @@ fn right_click_on_a_track_name_opens_the_track_menu() {
     h.run_steps(4);
     assert!(h.query_by_label("Make Inactive").is_none());
     let strip = h.get_by_label("Record enable").rect();
-    right_click(&mut h, pos2(strip.center().x, 900.0 - 17.0));
+    // The Mix page carries the status line and the Edit/MIXER bar (22 px each) under the strips.
+    right_click(&mut h, pos2(strip.center().x, 900.0 - 2.0 * 22.0 - 17.0));
     assert!(h.query_by_label("Make Inactive").is_some(), "the Mix strip's name plate");
 }
