diff --git a/.vscode/launch.json b/.vscode/launch.json
index c836ff97bc..0e07b0a067 100644
--- a/.vscode/launch.json
+++ b/.vscode/launch.json
@@ -3,6 +3,9 @@
     "configurations": [
         {
             "name": "Launch VisualTests",
+            "windows": {
+                "type": "clr"
+            },
             "type": "mono",
             "request": "launch",
             "program": "${workspaceRoot}/osu.Desktop.VisualTests/bin/Debug/osu!.exe",
@@ -15,6 +18,9 @@
         },
         {
             "name": "Launch Desktop",
+            "windows": {
+                "type": "clr"
+            },
             "type": "mono",
             "request": "launch",
             "program": "${workspaceRoot}/osu.Desktop/bin/Debug/osu!.exe",
@@ -27,6 +33,11 @@
         },
         {
             "name": "Attach",
+            "windows": {
+                "type": "clr",
+                "request": "attach",
+                "processName": "osu!"
+            },
             "type": "mono",
             "request": "attach",
             "address": "localhost",
diff --git a/.vscode/tasks.json b/.vscode/tasks.json
index 433e5fd2a9..6918afa620 100644
--- a/.vscode/tasks.json
+++ b/.vscode/tasks.json
@@ -11,7 +11,23 @@
             "command": "msbuild",
             "args": [
                 // Ask msbuild to generate full paths for file names.
-                "/property:GenerateFullPaths=true"
+                "/property:GenerateFullPaths=true",
+                "/property:DebugType=portable"
+            ],
+            // Use the standard MS compiler pattern to detect errors, warnings and infos
+            "problemMatcher": "$msCompile",
+            "isBuildCommand": true
+        },
+        {
+            "taskName": "rebuild",
+            "isShellCommand": true,
+            "showOutput": "silent",
+            "command": "msbuild",
+            "args": [
+                // Ask msbuild to generate full paths for file names.
+                "/property:GenerateFullPaths=true",
+                "/property:DebugType=portable",
+                "/target:Clean,Build"
             ],
             // Use the standard MS compiler pattern to detect errors, warnings and infos
             "problemMatcher": "$msCompile",
diff --git a/osu-framework b/osu-framework
index b4e1b9a0eb..9204b83850 160000
--- a/osu-framework
+++ b/osu-framework
@@ -1 +1 @@
-Subproject commit b4e1b9a0eb1782ab8cfc48e305fd295a25c0579e
+Subproject commit 9204b838504a51ffe7577c103b91270a2687bfb8
diff --git a/osu.Game/Beatmaps/WorkingBeatmap.cs b/osu.Game/Beatmaps/WorkingBeatmap.cs
index e9271492e4..616128dab5 100644
--- a/osu.Game/Beatmaps/WorkingBeatmap.cs
+++ b/osu.Game/Beatmaps/WorkingBeatmap.cs
@@ -18,7 +18,7 @@ namespace osu.Game.Beatmaps
 
         public readonly BeatmapSetInfo BeatmapSetInfo;
 
-        public readonly Bindable<IEnumerable<Mod>> Mods = new Bindable<IEnumerable<Mod>>();
+        public readonly Bindable<IEnumerable<Mod>> Mods = new Bindable<IEnumerable<Mod>>(new Mod[] { });
 
         public readonly bool WithStoryboard;
 
diff --git a/osu.Game/OsuGameBase.cs b/osu.Game/OsuGameBase.cs
index 6eb9747eef..c9d7d856db 100644
--- a/osu.Game/OsuGameBase.cs
+++ b/osu.Game/OsuGameBase.cs
@@ -149,6 +149,7 @@ namespace osu.Game
                 {
                     new Container
                     {
+                        AlwaysReceiveInput = true,
                         RelativeSizeAxes = Axes.Both,
                         Depth = float.MinValue,
                         Children = new Drawable[]
diff --git a/osu.Game/Overlays/MusicController.cs b/osu.Game/Overlays/MusicController.cs
index 9d21a0341c..19e742facb 100644
--- a/osu.Game/Overlays/MusicController.cs
+++ b/osu.Game/Overlays/MusicController.cs
@@ -22,6 +22,7 @@ using osu.Game.Database;
 using osu.Game.Graphics;
 using osu.Framework.Graphics.Primitives;
 using osu.Game.Graphics.Sprites;
+using osu.Framework.Extensions;
 using osu.Framework.Extensions.Color4Extensions;
 
 namespace osu.Game.Overlays
@@ -293,7 +294,7 @@ namespace osu.Game.Overlays
                 trackManager.SetExclusive(current.Track);
                 current.Track.Start();
                 beatmapSource.Value = current;
-            });
+            }).ContinueWith(task => Schedule(() => task.ThrowIfFaulted()), TaskContinuationOptions.OnlyOnFaulted);
             updateDisplay(current, isNext ? TransformDirection.Next : TransformDirection.Prev);
         }
 
diff --git a/osu.Game/Overlays/Options/Sections/Graphics/LayoutOptions.cs b/osu.Game/Overlays/Options/Sections/Graphics/LayoutOptions.cs
index b04f853ec4..9f5e3458f3 100644
--- a/osu.Game/Overlays/Options/Sections/Graphics/LayoutOptions.cs
+++ b/osu.Game/Overlays/Options/Sections/Graphics/LayoutOptions.cs
@@ -12,8 +12,8 @@ namespace osu.Game.Overlays.Options.Sections.Graphics
     {
         protected override string Header => "Layout";
 
-        private OptionSlider<int> letterboxPositionX;
-        private OptionSlider<int> letterboxPositionY;
+        private OptionSlider<double> letterboxPositionX;
+        private OptionSlider<double> letterboxPositionY;
 
         private Bindable<bool> letterboxing;
 
@@ -35,15 +35,15 @@ namespace osu.Game.Overlays.Options.Sections.Graphics
                     LabelText = "Letterboxing",
                     Bindable = letterboxing,
                 },
-                letterboxPositionX = new OptionSlider<int>
+                letterboxPositionX = new OptionSlider<double>
                 {
                     LabelText = "Horizontal position",
-                    Bindable = (BindableInt)config.GetBindable<int>(FrameworkConfig.LetterboxPositionX)
+                    Bindable = config.GetBindable<double>(FrameworkConfig.LetterboxPositionX)
                 },
-                letterboxPositionY = new OptionSlider<int>
+                letterboxPositionY = new OptionSlider<double>
                 {
                     LabelText = "Vertical position",
-                    Bindable = (BindableInt)config.GetBindable<int>(FrameworkConfig.LetterboxPositionY)
+                    Bindable = config.GetBindable<double>(FrameworkConfig.LetterboxPositionY)
                 },
             };