Index: gtk2_ardour/mouse_cursors.cc
===================================================================
--- gtk2_ardour/mouse_cursors.cc	(revision 11476)
+++ gtk2_ardour/mouse_cursors.cc	(working copy)
@@ -29,7 +29,7 @@
 
 	{
 		RefPtr<Pixbuf> p (::get_icon ("zoom_in_cursor"));
-		zoom_in = new Cursor (Display::get_default(), p, 5, 5);
+		zoom_in = new Cursor (Display::get_default(), p, 10, 5);
 	}
 
 	{
@@ -49,7 +49,7 @@
 	{
 		RefPtr<Bitmap> source = Bitmap::create (speaker_cursor_bits, speaker_cursor_width, speaker_cursor_height);
 		RefPtr<Bitmap> mask = Bitmap::create (speaker_cursor_mask_bits, speaker_cursor_width, speaker_cursor_height);
-		speaker = new Cursor (source, mask, ffg, fbg, speaker_cursor_x_hot, speaker_cursor_y_hot);
+		speaker = new Cursor (source, mask, ffg, fbg, speaker_cursor_width >> 1, speaker_cursor_height >> 1);
 	}
 
 	{
Index: gtk2_ardour/editor_mouse.cc
===================================================================
--- gtk2_ardour/editor_mouse.cc	(revision 11476)
+++ gtk2_ardour/editor_mouse.cc	(working copy)
@@ -238,61 +238,38 @@
 void
 Editor::set_canvas_cursor ()
 {
-	if (_internal_editing) {
+	switch (mouse_mode) {
+	case MouseRange:
+		current_canvas_cursor = _cursors->selector;
+		break;
 
-		switch (mouse_mode) {
-		case MouseDraw:
-			current_canvas_cursor = _cursors->midi_pencil;
-			break;
+	case MouseObject:
+		current_canvas_cursor = which_grabber_cursor();
+		break;
 
-		case MouseObject:
-			current_canvas_cursor = which_grabber_cursor();
-			break;
+	case MouseDraw:
+		current_canvas_cursor = _cursors->midi_pencil;
+		break;
 
-		case MouseTimeFX:
-			current_canvas_cursor = _cursors->midi_resize;
-			break;
+	case MouseGain:
+		current_canvas_cursor = _cursors->cross_hair;
+		break;
 
-		default:
-			return;
+	case MouseZoom:
+		if (Keyboard::the_keyboard().key_is_down (GDK_Control_L)) {
+			current_canvas_cursor = _cursors->zoom_out;
+		} else {
+			current_canvas_cursor = _cursors->zoom_in;
 		}
+		break;
 
-	} else {
+	case MouseTimeFX:
+		current_canvas_cursor = _cursors->time_fx; // just use playhead
+		break;
 
-		switch (mouse_mode) {
-		case MouseRange:
-			current_canvas_cursor = _cursors->selector;
-			break;
-
-		case MouseObject:
-			current_canvas_cursor = which_grabber_cursor();
-			break;
-
-		case MouseDraw:
-			/* shouldn't be possible, but just cover it anyway ... */
-			current_canvas_cursor = _cursors->midi_pencil;
-			break;
-
-		case MouseGain:
-			current_canvas_cursor = _cursors->cross_hair;
-			break;
-
-		case MouseZoom:
-			if (Keyboard::the_keyboard().key_is_down (GDK_Control_L)) {
-				current_canvas_cursor = _cursors->zoom_out;
-			} else {
-				current_canvas_cursor = _cursors->zoom_in;
-			}
-			break;
-
-		case MouseTimeFX:
-			current_canvas_cursor = _cursors->time_fx; // just use playhead
-			break;
-
-		case MouseAudition:
-			current_canvas_cursor = _cursors->speaker;
-			break;
-		}
+	case MouseAudition:
+		current_canvas_cursor = _cursors->speaker;
+		break;
 	}
 
 	switch (_join_object_range_state) {
@@ -574,7 +551,7 @@
 	     (mouse_mode != MouseRange) &&
 	     (mouse_mode != MouseDraw)) ||
 	    ((event->type != GDK_BUTTON_PRESS && event->type != GDK_BUTTON_RELEASE) || event->button.button > 3) ||
-	    internal_editing()) {
+	    (internal_editing() && mouse_mode != MouseTimeFX)) {
 
 		return;
 	}
@@ -1151,8 +1128,8 @@
 			/* drag notes if we're in internal edit mode */
 			_drags->set (new NoteResizeDrag (this, item), event, current_canvas_cursor);
 			return true;
-		} else if ((!internal_editing() || dynamic_cast<AudioRegionView*> (clicked_regionview)) && clicked_regionview) {
-			/* do time-FX if we're not in internal edit mode, or we are but we clicked on an audio region */
+		} else if (clicked_regionview) {
+			/* do time-FX  */
 			_drags->set (new TimeFXDrag (this, item, clicked_regionview, selection->regions.by_layer()), event);
 			return true;
 		}
Index: gtk2_ardour/midi_region_view.cc
===================================================================
--- gtk2_ardour/midi_region_view.cc	(revision 11476)
+++ gtk2_ardour/midi_region_view.cc	(working copy)
@@ -333,7 +333,10 @@
 		return trackview.editor().toggle_internal_editing_from_double_click (ev);
 	}
 
-	if (!trackview.editor().internal_editing()) {
+	if ((!trackview.editor().internal_editing() && trackview.editor().current_mouse_mode() != MouseGain) ||
+		(trackview.editor().current_mouse_mode() == MouseTimeFX) ||
+		(trackview.editor().current_mouse_mode() == MouseZoom)) {
+		// handle non-draw modes elsewhere
 		return false;
 	}
 
@@ -394,6 +397,13 @@
 		group->grab_focus();
 	}
 
+	// if current operation is non-operational in a midi region, change the cursor to so indicate
+	if (trackview.editor().current_mouse_mode() == MouseGain) {
+		Editor* editor = dynamic_cast<Editor *> (&trackview.editor());
+		pre_enter_cursor = editor->get_canvas_cursor();
+		editor->set_canvas_cursor(editor->cursors()->timebar);
+	}
+
 	return false;
 }
 
@@ -405,6 +415,11 @@
 	trackview.editor().verbose_cursor()->hide ();
 	remove_ghost_note ();
 
+	if (pre_enter_cursor) {
+		Editor* editor = dynamic_cast<Editor *> (&trackview.editor());
+		editor->set_canvas_cursor(pre_enter_cursor);
+	}
+
 	return false;
 }
 
