diff --git a/libs/ardour/ardour/session.h b/libs/ardour/ardour/session.h
index 6b71e3c..134cec8 100644
--- a/libs/ardour/ardour/session.h
+++ b/libs/ardour/ardour/session.h
@@ -385,6 +385,7 @@ class LIBARDOUR_API Session : public PBD::StatefulDestructible, public PBD::Scop
 	void adjust_capture_buffering();
 	void request_track_speed (Track *, double speed);
 	void request_input_change_handling ();
+	void flush_track_buffers ();
 
 	bool locate_pending() const { return static_cast<bool>(post_transport_work()&PostTransportLocate); }
 	bool transport_locked () const;
diff --git a/libs/ardour/midi_model.cc b/libs/ardour/midi_model.cc
index 3d53aba..35a3a82 100644
--- a/libs/ardour/midi_model.cc
+++ b/libs/ardour/midi_model.cc
@@ -99,6 +99,7 @@ MidiModel::apply_command(Session& session, Command* cmd)
 	session.begin_reversible_command(cmd->name());
 	(*cmd)();
 	session.commit_reversible_command(cmd);
+	session.flush_track_buffers ();
 	set_edited(true);
 }
 
@@ -112,6 +113,7 @@ MidiModel::apply_command_as_subcommand(Session& session, Command* cmd)
 {
 	(*cmd)();
 	session.add_command(cmd);
+	session.flush_track_buffers ();
 	set_edited(true);
 }
 
diff --git a/libs/ardour/session_butler.cc b/libs/ardour/session_butler.cc
index 613233c..ebca71e 100644
--- a/libs/ardour/session_butler.cc
+++ b/libs/ardour/session_butler.cc
@@ -121,3 +121,13 @@ Session::capture_load ()
 {
 	return (uint32_t) g_atomic_int_get (&_capture_load);
 }
+
+void
+Session::flush_track_buffers ()
+{
+	if (transport_rolling()) {
+		return;
+	}
+	add_post_transport_work (PostTransportLocate);
+	_butler->schedule_transport_work ();
+}
