Index: gtk2_ardour/time_axis_view.cc
===================================================================
--- gtk2_ardour/time_axis_view.cc	(revision 13974)
+++ gtk2_ardour/time_axis_view.cc	(working copy)
@ -578,6 +579,8 @@
 	 * ev->state.
 	 */
 	case GDK_ISO_Left_Tab:
+		end_name_edit (RESPONSE_ACCEPT, true);
+		return true;
 	case GDK_Tab:
 		end_name_edit (RESPONSE_ACCEPT);
 		return true;
@@ -611,7 +614,7 @@
 		name_entry->signal_key_release_event().connect (sigc::mem_fun (*this, &TimeAxisView::name_entry_key_release), false);
 		name_entry->signal_focus_out_event().connect (sigc::mem_fun (*this, &TimeAxisView::name_entry_focus_out));
 		name_entry->set_text (name_label.get_text());
-		name_entry->signal_activate().connect (sigc::bind (sigc::mem_fun (*this, &TimeAxisView::end_name_edit), RESPONSE_OK));
+		name_entry->signal_activate().connect (sigc::bind (sigc::mem_fun (*this, &TimeAxisView::end_name_edit), RESPONSE_OK, false));
 
 		if (name_label.is_ancestor (name_hbox)) {
 			name_hbox.remove (name_label);
@@ -628,7 +631,7 @@
 }
 
 void
-TimeAxisView::end_name_edit (int response)
+TimeAxisView::end_name_edit (int response, bool reverse)
 {
 	if (!name_entry) {
 		return;
@@ -669,8 +672,15 @@
 		if (i != allviews.end()) {
 			
 			do {
-				if (++i == allviews.end()) {
-					return;
+				if (reverse) {
+					if (i-- == allviews.begin()) {
+						i = allviews.end();
+						i--;
+					}
+				} else {
+					if (++i == allviews.end()) {
+						i = allviews.begin();
+					}
 				}
 				
 				RouteTimeAxisView* rtav = dynamic_cast<RouteTimeAxisView*>(*i);
Index: gtk2_ardour/time_axis_view.h
===================================================================
--- gtk2_ardour/time_axis_view.h	(revision 13974)
+++ gtk2_ardour/time_axis_view.h	(working copy)
@@ -228,7 +228,7 @@
 
         Gtk::Entry* name_entry;
         void begin_name_edit ();
-        void end_name_edit (int);
+        void end_name_edit (int, bool reverse=false);
 
 	/* derived classes can override these */
 
