diff --git a/osu.Game.Rulesets.Mania.Tests/ManiaBeatmapSampleConversionTest.cs b/osu.Game.Rulesets.Mania.Tests/ManiaBeatmapSampleConversionTest.cs
index d8f87195d1..c8feb4ae24 100644
--- a/osu.Game.Rulesets.Mania.Tests/ManiaBeatmapSampleConversionTest.cs
+++ b/osu.Game.Rulesets.Mania.Tests/ManiaBeatmapSampleConversionTest.cs
@@ -20,6 +20,7 @@ namespace osu.Game.Rulesets.Mania.Tests
 
         [TestCase("convert-samples")]
         [TestCase("mania-samples")]
+        [TestCase("slider-convert-samples")]
         public void Test(string name) => base.Test(name);
 
         protected override IEnumerable<SampleConvertValue> CreateConvertValue(HitObject hitObject)
@@ -29,13 +30,16 @@ namespace osu.Game.Rulesets.Mania.Tests
                 StartTime = hitObject.StartTime,
                 EndTime = hitObject.GetEndTime(),
                 Column = ((ManiaHitObject)hitObject).Column,
-                NodeSamples = getSampleNames((hitObject as HoldNote)?.NodeSamples)
+                Samples = getSampleNames(hitObject.Samples),
+                NodeSamples = getNodeSampleNames((hitObject as HoldNote)?.NodeSamples)
             };
         }
 
-        private IList<IList<string>> getSampleNames(List<IList<HitSampleInfo>> hitSampleInfo)
-            => hitSampleInfo?.Select(samples =>
-                                (IList<string>)samples.Select(sample => sample.LookupNames.First()).ToList())
+        private IList<string> getSampleNames(IList<HitSampleInfo> hitSampleInfo)
+            => hitSampleInfo.Select(sample => sample.LookupNames.First()).ToList();
+
+        private IList<IList<string>> getNodeSampleNames(List<IList<HitSampleInfo>> hitSampleInfo)
+            => hitSampleInfo?.Select(getSampleNames)
                             .ToList();
 
         protected override Ruleset CreateRuleset() => new ManiaRuleset();
@@ -51,14 +55,19 @@ namespace osu.Game.Rulesets.Mania.Tests
         public double StartTime;
         public double EndTime;
         public int Column;
+        public IList<string> Samples;
         public IList<IList<string>> NodeSamples;
 
         public bool Equals(SampleConvertValue other)
             => Precision.AlmostEquals(StartTime, other.StartTime, conversion_lenience)
                && Precision.AlmostEquals(EndTime, other.EndTime, conversion_lenience)
-               && samplesEqual(NodeSamples, other.NodeSamples);
+               && samplesEqual(Samples, other.Samples)
+               && nodeSamplesEqual(NodeSamples, other.NodeSamples);
 
-        private static bool samplesEqual(ICollection<IList<string>> firstSampleList, ICollection<IList<string>> secondSampleList)
+        private static bool samplesEqual(ICollection<string> firstSampleList, ICollection<string> secondSampleList)
+            => firstSampleList.SequenceEqual(secondSampleList);
+
+        private static bool nodeSamplesEqual(ICollection<IList<string>> firstSampleList, ICollection<IList<string>> secondSampleList)
         {
             if (firstSampleList == null && secondSampleList == null)
                 return true;
diff --git a/osu.Game.Rulesets.Mania/Beatmaps/Patterns/Legacy/DistanceObjectPatternGenerator.cs b/osu.Game.Rulesets.Mania/Beatmaps/Patterns/Legacy/DistanceObjectPatternGenerator.cs
index 9fbdf58e21..d03eb0b3c9 100644
--- a/osu.Game.Rulesets.Mania/Beatmaps/Patterns/Legacy/DistanceObjectPatternGenerator.cs
+++ b/osu.Game.Rulesets.Mania/Beatmaps/Patterns/Legacy/DistanceObjectPatternGenerator.cs
@@ -483,9 +483,8 @@ namespace osu.Game.Rulesets.Mania.Beatmaps.Patterns.Legacy
             if (!(HitObject is IHasPathWithRepeats curveData))
                 return null;
 
-            double segmentTime = (EndTime - HitObject.StartTime) / spanCount;
-
-            int index = (int)(segmentTime == 0 ? 0 : (time - HitObject.StartTime) / segmentTime);
+            // mathematically speaking this should be a whole number always, but floating-point arithmetic is not so kind
+            var index = (int)Math.Round(SegmentDuration == 0 ? 0 : (time - HitObject.StartTime) / SegmentDuration, MidpointRounding.AwayFromZero);
 
             // avoid slicing the list & creating copies, if at all possible.
             return index == 0 ? curveData.NodeSamples : curveData.NodeSamples.Skip(index).ToList();
diff --git a/osu.Game.Rulesets.Mania/Resources/Testing/Beatmaps/convert-samples-expected-conversion.json b/osu.Game.Rulesets.Mania/Resources/Testing/Beatmaps/convert-samples-expected-conversion.json
index b8ce85eef5..fec1360b26 100644
--- a/osu.Game.Rulesets.Mania/Resources/Testing/Beatmaps/convert-samples-expected-conversion.json
+++ b/osu.Game.Rulesets.Mania/Resources/Testing/Beatmaps/convert-samples-expected-conversion.json
@@ -9,7 +9,8 @@
         ["normal-hitnormal"],
         ["soft-hitnormal"],
         ["drum-hitnormal"]
-      ]
+      ],
+      "Samples": ["drum-hitnormal"]
     }, {
       "StartTime": 1875.0,
       "EndTime": 2750.0,
@@ -17,14 +18,16 @@
       "NodeSamples": [
         ["soft-hitnormal"],
         ["drum-hitnormal"]
-      ]
+      ],
+      "Samples": ["drum-hitnormal"]
     }]
   }, {
     "StartTime": 3750.0,
     "Objects": [{
       "StartTime": 3750.0,
       "EndTime": 3750.0,
-      "Column": 3
+      "Column": 3,
+      "Samples": ["normal-hitnormal"]
     }]
   }]
 }
\ No newline at end of file
diff --git a/osu.Game.Rulesets.Mania/Resources/Testing/Beatmaps/convert-samples.osu b/osu.Game.Rulesets.Mania/Resources/Testing/Beatmaps/convert-samples.osu
index 16b73992d2..fea1de6614 100644
--- a/osu.Game.Rulesets.Mania/Resources/Testing/Beatmaps/convert-samples.osu
+++ b/osu.Game.Rulesets.Mania/Resources/Testing/Beatmaps/convert-samples.osu
@@ -13,4 +13,4 @@ SliderTickRate:1
 
 [HitObjects]
 88,99,1000,6,0,L|306:259,2,245,0|0|0,1:0|2:0|3:0,0:0:0:0:
-259,118,3750,1,0,0:0:0:0:
+259,118,3750,1,0,1:0:0:0:
diff --git a/osu.Game.Rulesets.Mania/Resources/Testing/Beatmaps/mania-samples-expected-conversion.json b/osu.Game.Rulesets.Mania/Resources/Testing/Beatmaps/mania-samples-expected-conversion.json
index e22540614d..1aca75a796 100644
--- a/osu.Game.Rulesets.Mania/Resources/Testing/Beatmaps/mania-samples-expected-conversion.json
+++ b/osu.Game.Rulesets.Mania/Resources/Testing/Beatmaps/mania-samples-expected-conversion.json
@@ -8,7 +8,8 @@
       "NodeSamples": [
         ["normal-hitnormal"],
         []
-      ]
+      ],
+      "Samples": ["normal-hitnormal"]
     }]
   }, {
     "StartTime": 2000.0,
@@ -19,7 +20,8 @@
       "NodeSamples": [
         ["drum-hitnormal"],
         []
-      ]
+      ],
+      "Samples": ["drum-hitnormal"]
     }]
   }]
 }
\ No newline at end of file
diff --git a/osu.Game.Rulesets.Mania/Resources/Testing/Beatmaps/slider-convert-samples-expected-conversion.json b/osu.Game.Rulesets.Mania/Resources/Testing/Beatmaps/slider-convert-samples-expected-conversion.json
new file mode 100644
index 0000000000..e3768a90d7
--- /dev/null
+++ b/osu.Game.Rulesets.Mania/Resources/Testing/Beatmaps/slider-convert-samples-expected-conversion.json
@@ -0,0 +1,21 @@
+{
+  "Mappings": [{
+    "StartTime": 8470.0,
+    "Objects": [{
+      "StartTime": 8470.0,
+      "EndTime": 8470.0,
+      "Column": 0,
+      "Samples": ["normal-hitnormal", "normal-hitclap"]
+    }, {
+      "StartTime": 8626.470587768974,
+      "EndTime": 8626.470587768974,
+      "Column": 1,
+      "Samples": ["normal-hitnormal"]
+    }, {
+      "StartTime": 8782.941175537948,
+      "EndTime": 8782.941175537948,
+      "Column": 2,
+      "Samples": ["normal-hitnormal", "normal-hitclap"]
+    }]
+  }]
+}
diff --git a/osu.Game.Rulesets.Mania/Resources/Testing/Beatmaps/slider-convert-samples.osu b/osu.Game.Rulesets.Mania/Resources/Testing/Beatmaps/slider-convert-samples.osu
new file mode 100644
index 0000000000..08e90ce807
--- /dev/null
+++ b/osu.Game.Rulesets.Mania/Resources/Testing/Beatmaps/slider-convert-samples.osu
@@ -0,0 +1,15 @@
+osu file format v14
+
+[Difficulty]
+HPDrainRate:6
+CircleSize:4
+OverallDifficulty:8
+ApproachRate:9.5
+SliderMultiplier:2.00000000596047
+SliderTickRate:1
+
+[TimingPoints]
+0,312.941176470588,4,1,0,100,1,0
+
+[HitObjects]
+82,216,8470,6,0,P|52:161|99:113,2,100,8|0|8,1:0|1:0|1:0,0:0:0:0:
diff --git a/osu.Game/OsuGame.cs b/osu.Game/OsuGame.cs
index b0d7b14d34..92233f143d 100644
--- a/osu.Game/OsuGame.cs
+++ b/osu.Game/OsuGame.cs
@@ -767,7 +767,7 @@ namespace osu.Game
                         Text = "Subsequent messages have been logged. Click to view log files.",
                         Activated = () =>
                         {
-                            Host.Storage.GetStorageForDirectory("logs").OpenInNativeExplorer();
+                            Storage.GetStorageForDirectory("logs").OpenInNativeExplorer();
                             return true;
                         }
                     }));
diff --git a/osu.Game/Screens/Ranking/ResultsScreen.cs b/osu.Game/Screens/Ranking/ResultsScreen.cs
index 193d975e42..968b446df9 100644
--- a/osu.Game/Screens/Ranking/ResultsScreen.cs
+++ b/osu.Game/Screens/Ranking/ResultsScreen.cs
@@ -70,41 +70,33 @@ namespace osu.Game.Screens.Ranking
                 {
                     new Drawable[]
                     {
-                        new Container
+                        new VerticalScrollContainer
                         {
                             RelativeSizeAxes = Axes.Both,
-                            Children = new Drawable[]
+                            ScrollbarVisible = false,
+                            Child = new Container
                             {
-                                new OsuScrollContainer
+                                RelativeSizeAxes = Axes.Both,
+                                Children = new Drawable[]
                                 {
-                                    RelativeSizeAxes = Axes.Both,
-                                    ScrollbarVisible = false,
-                                    Child = new Container
+                                    scorePanelList = new ScorePanelList
                                     {
-                                        RelativeSizeAxes = Axes.X,
-                                        Height = screen_height,
-                                        Children = new Drawable[]
-                                        {
-                                            scorePanelList = new ScorePanelList
-                                            {
-                                                RelativeSizeAxes = Axes.Both,
-                                                SelectedScore = { BindTarget = SelectedScore },
-                                                PostExpandAction = () => statisticsPanel.ToggleVisibility()
-                                            },
-                                            detachedPanelContainer = new Container<ScorePanel>
-                                            {
-                                                RelativeSizeAxes = Axes.Both
-                                            },
-                                            statisticsPanel = new StatisticsPanel
-                                            {
-                                                RelativeSizeAxes = Axes.Both,
-                                                Score = { BindTarget = SelectedScore }
-                                            },
-                                        }
-                                    }
-                                },
+                                        RelativeSizeAxes = Axes.Both,
+                                        SelectedScore = { BindTarget = SelectedScore },
+                                        PostExpandAction = () => statisticsPanel.ToggleVisibility()
+                                    },
+                                    detachedPanelContainer = new Container<ScorePanel>
+                                    {
+                                        RelativeSizeAxes = Axes.Both
+                                    },
+                                    statisticsPanel = new StatisticsPanel
+                                    {
+                                        RelativeSizeAxes = Axes.Both,
+                                        Score = { BindTarget = SelectedScore }
+                                    },
+                                }
                             }
-                        }
+                        },
                     },
                     new[]
                     {
@@ -277,5 +269,23 @@ namespace osu.Game.Screens.Ranking
                 detachedPanel = null;
             }
         }
+
+        private class VerticalScrollContainer : OsuScrollContainer
+        {
+            protected override Container<Drawable> Content => content;
+
+            private readonly Container content;
+
+            public VerticalScrollContainer()
+            {
+                base.Content.Add(content = new Container { RelativeSizeAxes = Axes.X });
+            }
+
+            protected override void Update()
+            {
+                base.Update();
+                content.Height = Math.Max(screen_height, DrawHeight);
+            }
+        }
     }
 }
diff --git a/osu.Game/Screens/Select/BeatmapInfoWedge.cs b/osu.Game/Screens/Select/BeatmapInfoWedge.cs
index 7a8a1593b9..27ce9e82dd 100644
--- a/osu.Game/Screens/Select/BeatmapInfoWedge.cs
+++ b/osu.Game/Screens/Select/BeatmapInfoWedge.cs
@@ -155,7 +155,6 @@ namespace osu.Game.Screens.Select
                 var metadata = beatmapInfo.Metadata ?? beatmap.BeatmapSetInfo?.Metadata ?? new BeatmapMetadata();
 
                 CacheDrawnFrameBuffer = true;
-                RedrawOnScale = false;
 
                 RelativeSizeAxes = Axes.Both;