diff --git a/osu.Game/Overlays/Mods/LocalPlayerModSelectOverlay.cs b/osu.Game/Overlays/Mods/LocalPlayerModSelectOverlay.cs
index 78cd9bdae5..db76581108 100644
--- a/osu.Game/Overlays/Mods/LocalPlayerModSelectOverlay.cs
+++ b/osu.Game/Overlays/Mods/LocalPlayerModSelectOverlay.cs
@@ -12,7 +12,7 @@ namespace osu.Game.Overlays.Mods
base.OnModSelected(mod);
foreach (var section in ModSectionsContainer.Children)
- section.DeselectTypes(mod.IncompatibleMods, true);
+ section.DeselectTypes(mod.IncompatibleMods, true, mod);
}
}
}
diff --git a/osu.Game/Overlays/Mods/ModSection.cs b/osu.Game/Overlays/Mods/ModSection.cs
index aa8a5efd39..6e289dc8aa 100644
--- a/osu.Game/Overlays/Mods/ModSection.cs
+++ b/osu.Game/Overlays/Mods/ModSection.cs
@@ -159,12 +159,16 @@ namespace osu.Game.Overlays.Mods
///
/// The types of s which should be deselected.
/// Whether the deselection should happen immediately. Should only be used when required to ensure correct selection flow.
- public void DeselectTypes(IEnumerable modTypes, bool immediate = false)
+ /// If this deselection is triggered by a user selection, this should contain the newly selected type. This type will never be deselected, even if it matches one provided in .
+ public void DeselectTypes(IEnumerable modTypes, bool immediate = false, Mod newSelection = null)
{
foreach (var button in Buttons)
{
if (button.SelectedMod == null) continue;
+ if (button.SelectedMod == newSelection)
+ continue;
+
foreach (var type in modTypes)
{
if (type.IsInstanceOfType(button.SelectedMod))