diff --git a/src/lib/tunes/tunes.cpp b/src/lib/tunes/tunes.cpp
index 90e1d4226b6c2bac2ec84192ef3c640e9a888e7d..86c65631cf473083373c06c078e1c35a62acd9e6 100644
--- a/src/lib/tunes/tunes.cpp
+++ b/src/lib/tunes/tunes.cpp
@@ -88,7 +88,15 @@ void Tunes::config_tone(bool repeat_flag)
 int Tunes::set_control(const tune_control_s &tune_control)
 {
 	bool reset_playing_tune = false;
-	_repeat = false;
+
+	// Only reset these flags if the new tune will actually be played.
+	// Note that repeated tunes can always be interrupted, even without the
+	// override flag.
+	if (_repeat || _tune == nullptr || tune_control.tune_override) {
+		_repeat = false;
+		_using_custom_msg = false;
+		_tune = nullptr;
+	}
 
 	if (tune_control.tune_id < _default_tunes_size) {
 		switch (tune_control.tune_id) {