diff --git a/osu.Game/Screens/Play/HUD/ArgonHealthDisplay.cs b/osu.Game/Screens/Play/HUD/ArgonHealthDisplay.cs
index b56920c99a..f4ce7d1633 100644
--- a/osu.Game/Screens/Play/HUD/ArgonHealthDisplay.cs
+++ b/osu.Game/Screens/Play/HUD/ArgonHealthDisplay.cs
@@ -89,6 +89,13 @@ namespace osu.Game.Screens.Play.HUD
 
         public const float MAIN_PATH_RADIUS = 10f;
 
+        private readonly LayoutValue drawSizeLayout = new LayoutValue(Invalidation.DrawSize);
+
+        public ArgonHealthDisplay()
+        {
+            AddLayout(drawSizeLayout);
+        }
+
         [BackgroundDependencyLoader]
         private void load()
         {
@@ -134,22 +141,11 @@ namespace osu.Game.Screens.Play.HUD
 
             Current.BindValueChanged(_ => Scheduler.AddOnce(updateCurrent), true);
 
-            UseRelativeSize.BindValueChanged(v =>
-            {
-                RelativeSizeAxes = v.NewValue ? Axes.X : Axes.None;
-            }, true);
+            UseRelativeSize.BindValueChanged(v => RelativeSizeAxes = v.NewValue ? Axes.X : Axes.None, true);
 
             BarHeight.BindValueChanged(_ => updatePath(), true);
         }
 
-        protected override bool OnInvalidate(Invalidation invalidation, InvalidationSource source)
-        {
-            if ((invalidation & Invalidation.DrawSize) > 0)
-                updatePath();
-
-            return base.OnInvalidate(invalidation, source);
-        }
-
         private void updateCurrent()
         {
             if (Current.Value >= GlowBarValue) finishMissDisplay();
@@ -165,6 +161,12 @@ namespace osu.Game.Screens.Play.HUD
         {
             base.Update();
 
+            if (!drawSizeLayout.IsValid)
+            {
+                updatePath();
+                drawSizeLayout.Validate();
+            }
+
             mainBar.Alpha = (float)Interpolation.DampContinuously(mainBar.Alpha, Current.Value > 0 ? 1 : 0, 40, Time.Elapsed);
             glowBar.Alpha = (float)Interpolation.DampContinuously(glowBar.Alpha, GlowBarValue > 0 ? 1 : 0, 40, Time.Elapsed);
         }