diff --git a/osu.Game/Rulesets/Difficulty/DifficultyCalculator.cs b/osu.Game/Rulesets/Difficulty/DifficultyCalculator.cs
index db8bdde6bb..aad55f8a38 100644
--- a/osu.Game/Rulesets/Difficulty/DifficultyCalculator.cs
+++ b/osu.Game/Rulesets/Difficulty/DifficultyCalculator.cs
@@ -37,6 +37,8 @@ namespace osu.Game.Rulesets.Difficulty
/// A structure describing the difficulty of the beatmap.
public DifficultyAttributes Calculate(params Mod[] mods)
{
+ mods = mods.Select(m => m.CreateCopy()).ToArray();
+
beatmap.Mods.Value = mods;
IBeatmap playableBeatmap = beatmap.GetPlayableBeatmap(ruleset.RulesetInfo);
diff --git a/osu.Game/Rulesets/Mods/Mod.cs b/osu.Game/Rulesets/Mods/Mod.cs
index 705c5c4ef6..1f9907caa7 100644
--- a/osu.Game/Rulesets/Mods/Mod.cs
+++ b/osu.Game/Rulesets/Mods/Mod.cs
@@ -65,5 +65,10 @@ namespace osu.Game.Rulesets.Mods
///
[JsonIgnore]
public virtual Type[] IncompatibleMods => new Type[] { };
+
+ ///
+ /// Creates a copy of this initialised to a default state.
+ ///
+ public virtual Mod CreateCopy() => (Mod)Activator.CreateInstance(GetType());
}
}