Index: gtk2_ardour/route_ui.cc
===================================================================
--- gtk2_ardour/route_ui.cc	(revision 11476)
+++ gtk2_ardour/route_ui.cc	(working copy)
@@ -1771,10 +1771,10 @@
 			b->set_text (string_compose (X_("Ø%1"), i + 1));
 		}
 
-		if (N <= 4) {
+		if (N <= _max_invert_buttons) {
 			UI::instance()->set_tip (*b, string_compose (_("Left-click to invert (phase reverse) channel %1 of this track.  Right-click to show menu."), i + 1));
 		} else {
-			UI::instance()->set_tip (*b, string_compose (_("Left-click to invert (phase reverse) all channels of this track.  Right-click to show menu."), i + 1));
+			UI::instance()->set_tip (*b, _("Left-click to invert (phase reverse) all channels of this track.  Right-click to show menu."));
 		}
 
 		_invert_buttons.push_back (b);
@@ -1808,8 +1808,23 @@
 bool
 RouteUI::invert_release (GdkEventButton* ev, uint32_t i)
 {
-	if (ev->button == 1 && i < _invert_buttons.size()) {
-		_route->set_phase_invert (i, !_invert_buttons[i]->get_active());
+	size_t nbuttons = _invert_buttons.size();
+
+	cerr << "invert_release(ev, " << i << "), nbuttons=" << nbuttons << endl;
+	if (ev->button == 1 && i < nbuttons) {
+
+		if (nbuttons > 1) {
+			// multiple invert buttons, just invert the one that was clicked
+			_route->set_phase_invert (i, !_invert_buttons[i]->get_active());
+		} else {
+			// a single button: invert all channels?
+			uint32_t const N = _route->input()->n_ports().n_audio();
+			for (uint32_t j = 0; j != N; ++j) {
+				_route->set_phase_invert (j, !_route->phase_invert (j));
+			}
+		}
+		
+
 		return true;
 	}
 	return false;
