Index: gtk2_ardour/route_time_axis.cc
===================================================================
--- gtk2_ardour/route_time_axis.cc	(revision 3416)
+++ gtk2_ardour/route_time_axis.cc	(working copy)
@@ -235,9 +235,10 @@
 
 	gain_slider->signal_button_press_event().connect (mem_fun(*this, &RouteTimeAxisView::start_gain_touch));
 	gain_slider->signal_button_release_event().connect (mem_fun(*this, &RouteTimeAxisView::end_gain_touch));
+	gain_slider->signal_scroll_event().connect(mem_fun(*this, &RouteTimeAxisView::controls_ebox_scroll), false);
 	gain_slider->set_name ("TrackGainFader");
 
 	gain_adjustment.signal_value_changed().connect (mem_fun(*this, &RouteTimeAxisView::gain_adjusted));
 	_route->gain_changed.connect (mem_fun(*this, &RouteTimeAxisView::gain_changed));
 
 	gain_slider->show_all();
Index: gtk2_ardour/time_axis_view.cc
===================================================================
--- gtk2_ardour/time_axis_view.cc	(revision 3416)
+++ gtk2_ardour/time_axis_view.cc	(working copy)
@@ -272,6 +272,9 @@
 		if (Keyboard::modifier_state_equals (ev->state, Keyboard::TertiaryModifier)) {
 			step_height (true);
 			return true;
+		} else if (Keyboard::no_modifiers_active (ev->state)) {
+			editor.scroll_tracks_up_line();
+			return true;
 		}
 		break;
 		
@@ -279,6 +282,9 @@
 		if (Keyboard::modifier_state_equals (ev->state, Keyboard::TertiaryModifier)) {
 			step_height (false);
 			return true;
+		} else if (Keyboard::no_modifiers_active (ev->state)) {
+			editor.scroll_tracks_down_line();
+			return true;
 		}
 		break;
 
@@ -343,11 +349,13 @@
 void
 TimeAxisView::step_height (bool bigger)
 {
+static const int step = 20;
+
 	if (bigger) {
-		set_height (height + 4);
+		set_height (height + step);
 	} else {
-		if (height > 4) {
-			set_height (std::max (height - 4, hSmall));
+		if (height > step) {
+			set_height (std::max (height - step, hSmall));
 		} else if (height != hSmall) {
 			set_height (hSmall);
 		}

