Index: gtk2_ardour/mixer_ui.cc
===================================================================
--- gtk2_ardour/mixer_ui.cc	(revision 11488)
+++ gtk2_ardour/mixer_ui.cc	(working copy)
@@ -1636,7 +1636,22 @@
 	}
 	
 	KeyboardKey k (ev->state, ev->keyval);
+
+	GtkAccelKey key;
 	
+	// handle toggle-mixer-on-top here, so it can do a different thing if the
+	// mixer is already on top and received this key press
+	if (gtk_accel_map_lookup_entry("<Actions>/Common/toggle-mixer-on-top", &key)) {
+		if (k.state() == key.accel_mods && k.key() == key.accel_key) {
+
+			ARDOUR_UI::instance()->goto_editor_window();
+			return true;
+		}
+	} 
+
+
+
+	
 	if (bindings.activate (k, Bindings::Press)) {
 		return true;
 	}
Index: gtk2_ardour/ardour_ui_dependents.cc
===================================================================
--- gtk2_ardour/ardour_ui_dependents.cc	(revision 11488)
+++ gtk2_ardour/ardour_ui_dependents.cc	(working copy)
@@ -133,29 +133,24 @@
 void
 ARDOUR_UI::toggle_mixer_on_top ()
 {
-	Glib::RefPtr<Action> act = ActionManager::get_action (X_("Common"), X_("toggle-mixer-on-top"));
-	if (!act) {
-		return;
-	}
 
-	Glib::RefPtr<ToggleAction> tact = Glib::RefPtr<ToggleAction>::cast_dynamic (act);
+	// only called if the editor window received the shortcut key or selected
+	// from the editor window menu, so the mixer is definitely not on top, and
+	// we can unconditionally make it so here.
+	// XXX this might not work so well where there is a global menu bar, e.g.
+	// on OS X.
 
-	if (tact->get_active()) {
+	/* Toggle the mixer to `visible' if required */
+	Glib::RefPtr<Action> act = ActionManager::get_action (X_("Common"), X_("toggle-mixer"));
+	if (act) {
+		Glib::RefPtr<ToggleAction> tact = Glib::RefPtr<ToggleAction>::cast_dynamic (act);
 
-		/* Toggle the mixer to `visible' if required */
-		act = ActionManager::get_action (X_("Common"), X_("toggle-mixer"));
-		if (act) {
-			tact = Glib::RefPtr<ToggleAction>::cast_dynamic (act);
-
-			if (!tact->get_active()) {
-				tact->set_active ();
-			}
+		if (!tact->get_active()) {
+			tact->set_active (true);
 		}
-
-		goto_mixer_window ();
-	} else {
-		goto_editor_window ();
 	}
+	goto_mixer_window ();
+	
 }
 
 /** The main editor window has been closed */
Index: gtk2_ardour/ardour_ui_ed.cc
===================================================================
--- gtk2_ardour/ardour_ui_ed.cc	(revision 11488)
+++ gtk2_ardour/ardour_ui_ed.cc	(working copy)
@@ -228,7 +228,7 @@
 	ActionManager::session_sensitive_actions.push_back (act);
 
 	ActionManager::register_toggle_action (common_actions, X_("toggle-mixer"), S_("Window|Mixer"),  sigc::mem_fun(*this, &ARDOUR_UI::toggle_mixer_window));
-	ActionManager::register_toggle_action (common_actions, X_("toggle-mixer-on-top"), _("Mixer on Top"),  sigc::mem_fun(*this, &ARDOUR_UI::toggle_mixer_on_top));
+	ActionManager::register_action (common_actions, X_("toggle-mixer-on-top"), _("Mixer on Top"),  sigc::mem_fun(*this, &ARDOUR_UI::toggle_mixer_on_top));
 	ActionManager::register_toggle_action (common_actions, X_("ToggleRCOptionsEditor"), _("Preferences"), sigc::mem_fun(*this, &ARDOUR_UI::toggle_rc_options_window));
 	ActionManager::register_toggle_action (common_actions, X_("ToggleSessionOptionsEditor"), _("Properties"), sigc::mem_fun(*this, &ARDOUR_UI::toggle_session_options_window));
 	act = ActionManager::register_toggle_action (common_actions, X_("ToggleInspector"), _("Tracks and Busses"), sigc::mem_fun(*this, &ARDOUR_UI::toggle_route_params_window));
