diff --git a/osu.Desktop.VisualTests/Tests/TestCaseNotificationManager.cs b/osu.Desktop.VisualTests/Tests/TestCaseNotificationOverlay.cs
similarity index 91%
rename from osu.Desktop.VisualTests/Tests/TestCaseNotificationManager.cs
rename to osu.Desktop.VisualTests/Tests/TestCaseNotificationOverlay.cs
index 849df1263e..3b9c251670 100644
--- a/osu.Desktop.VisualTests/Tests/TestCaseNotificationManager.cs
+++ b/osu.Desktop.VisualTests/Tests/TestCaseNotificationOverlay.cs
@@ -12,17 +12,17 @@ using osu.Framework.Graphics.Containers;
 
 namespace osu.Desktop.VisualTests.Tests
 {
-    internal class TestCaseNotificationManager : TestCase
+    internal class TestCaseNotificationOverlay : TestCase
     {
         public override string Description => @"I handle notifications";
 
-        private readonly NotificationManager manager;
+        private readonly NotificationOverlay manager;
 
-        public TestCaseNotificationManager()
+        public TestCaseNotificationOverlay()
         {
             progressingNotifications.Clear();
 
-            Content.Add(manager = new NotificationManager
+            Content.Add(manager = new NotificationOverlay
             {
                 Anchor = Anchor.TopRight,
                 Origin = Anchor.TopRight,
diff --git a/osu.Desktop.VisualTests/osu.Desktop.VisualTests.csproj b/osu.Desktop.VisualTests/osu.Desktop.VisualTests.csproj
index 4974f0c0d1..1f4fd80ca6 100644
--- a/osu.Desktop.VisualTests/osu.Desktop.VisualTests.csproj
+++ b/osu.Desktop.VisualTests/osu.Desktop.VisualTests.csproj
@@ -198,7 +198,7 @@
     <Compile Include="Tests\TestCaseManiaPlayfield.cs" />
     <Compile Include="Tests\TestCaseMenuOverlays.cs" />
     <Compile Include="Tests\TestCaseMusicController.cs" />
-    <Compile Include="Tests\TestCaseNotificationManager.cs" />
+    <Compile Include="Tests\TestCaseNotificationOverlay.cs" />
     <Compile Include="Tests\TestCaseOnScreenDisplay.cs" />
     <Compile Include="Tests\TestCaseReplaySettingsOverlay.cs" />
     <Compile Include="Tests\TestCasePlayer.cs" />
diff --git a/osu.Desktop/Overlays/VersionManager.cs b/osu.Desktop/Overlays/VersionManager.cs
index 71ae5a6697..6983c51c7d 100644
--- a/osu.Desktop/Overlays/VersionManager.cs
+++ b/osu.Desktop/Overlays/VersionManager.cs
@@ -25,16 +25,16 @@ namespace osu.Desktop.Overlays
     public class VersionManager : OverlayContainer
     {
         private UpdateManager updateManager;
-        private NotificationManager notificationManager;
+        private NotificationOverlay notificationOverlay;
 
         protected override bool HideOnEscape => false;
 
         public override bool HandleInput => false;
 
         [BackgroundDependencyLoader]
-        private void load(NotificationManager notification, OsuColour colours, TextureStore textures, OsuGameBase game)
+        private void load(NotificationOverlay notification, OsuColour colours, TextureStore textures, OsuGameBase game)
         {
-            notificationManager = notification;
+            notificationOverlay = notification;
 
             AutoSizeAxes = Axes.Both;
             Anchor = Anchor.BottomCentre;
@@ -116,7 +116,7 @@ namespace osu.Desktop.Overlays
                 if (notification == null)
                 {
                     notification = new UpdateProgressNotification { State = ProgressNotificationState.Active };
-                    Schedule(() => notificationManager.Post(notification));
+                    Schedule(() => notificationOverlay.Post(notification));
                 }
 
                 Schedule(() =>
diff --git a/osu.Game/Graphics/UserInterface/OsuButton.cs b/osu.Game/Graphics/UserInterface/OsuButton.cs
index ecbf51f8b9..3c454f2af2 100644
--- a/osu.Game/Graphics/UserInterface/OsuButton.cs
+++ b/osu.Game/Graphics/UserInterface/OsuButton.cs
@@ -68,6 +68,14 @@ namespace osu.Game.Graphics.UserInterface
 
             sampleClick = audio.Sample.Get(@"UI/generic-click");
             sampleHover = audio.Sample.Get(@"UI/generic-hover");
+
+            Enabled.ValueChanged += enabled_ValueChanged;
+            Enabled.TriggerChange();
+        }
+
+        private void enabled_ValueChanged(bool enabled)
+        {
+            this.FadeColour(enabled ? Color4.White : Color4.Gray, 200, Easing.OutQuint);
         }
 
         protected override bool OnClick(InputState state)
diff --git a/osu.Game/Online/API/APIAccess.cs b/osu.Game/Online/API/APIAccess.cs
index 7e3bb44465..57f5c54a18 100644
--- a/osu.Game/Online/API/APIAccess.cs
+++ b/osu.Game/Online/API/APIAccess.cs
@@ -117,7 +117,7 @@ namespace osu.Game.Online.API
                         if (!authentication.HasValidAccessToken && !authentication.AuthenticateWithLogin(Username, Password))
                         {
                             //todo: this fails even on network-related issues. we should probably handle those differently.
-                            //NotificationManager.ShowMessage("Login failed!");
+                            //NotificationOverlay.ShowMessage("Login failed!");
                             log.Add(@"Login failed!");
                             Password = null;
                             continue;
@@ -254,7 +254,7 @@ namespace osu.Game.Online.API
                 {
                     //OsuGame.Scheduler.Add(delegate
                     {
-                        //NotificationManager.ShowMessage($@"We just went {newState}!", newState == APIState.Online ? Color4.YellowGreen : Color4.OrangeRed, 5000);
+                        //NotificationOverlay.ShowMessage($@"We just went {newState}!", newState == APIState.Online ? Color4.YellowGreen : Color4.OrangeRed, 5000);
                         log.Add($@"We just went {newState}!");
                         Scheduler.Add(delegate
                         {
diff --git a/osu.Game/OsuGame.cs b/osu.Game/OsuGame.cs
index 4f4c2e2883..fe6d2dbb41 100644
--- a/osu.Game/OsuGame.cs
+++ b/osu.Game/OsuGame.cs
@@ -37,7 +37,7 @@ namespace osu.Game
 
         private MusicController musicController;
 
-        private NotificationManager notificationManager;
+        private NotificationOverlay notificationOverlay;
 
         private DialogOverlay dialogOverlay;
 
@@ -132,7 +132,7 @@ namespace osu.Game
 
             if (s.Beatmap == null)
             {
-                notificationManager.Post(new SimpleNotification
+                notificationOverlay.Post(new SimpleNotification
                 {
                     Text = @"Tried to load a score for a beatmap we don't have!",
                     Icon = FontAwesome.fa_life_saver,
@@ -189,7 +189,7 @@ namespace osu.Game
                 Origin = Anchor.TopRight,
             }, overlayContent.Add);
 
-            LoadComponentAsync(notificationManager = new NotificationManager
+            LoadComponentAsync(notificationOverlay = new NotificationOverlay
             {
                 Depth = -3,
                 Anchor = Anchor.TopRight,
@@ -205,7 +205,7 @@ namespace osu.Game
             {
                 if (entry.Level < LogLevel.Important) return;
 
-                notificationManager.Post(new SimpleNotification
+                notificationOverlay.Post(new SimpleNotification
                 {
                     Text = $@"{entry.Level}: {entry.Message}"
                 });
@@ -216,7 +216,7 @@ namespace osu.Game
             dependencies.Cache(chat);
             dependencies.Cache(userProfile);
             dependencies.Cache(musicController);
-            dependencies.Cache(notificationManager);
+            dependencies.Cache(notificationOverlay);
             dependencies.Cache(dialogOverlay);
 
             // ensure both overlays aren't presented at the same time
diff --git a/osu.Game/Overlays/NotificationManager.cs b/osu.Game/Overlays/NotificationOverlay.cs
similarity index 79%
rename from osu.Game/Overlays/NotificationManager.cs
rename to osu.Game/Overlays/NotificationOverlay.cs
index ad0236ae1f..7eabb592c6 100644
--- a/osu.Game/Overlays/NotificationManager.cs
+++ b/osu.Game/Overlays/NotificationOverlay.cs
@@ -13,7 +13,7 @@ using osu.Game.Graphics.Containers;
 
 namespace osu.Game.Overlays
 {
-    public class NotificationManager : OsuFocusedOverlayContainer
+    public class NotificationOverlay : OsuFocusedOverlayContainer
     {
         private const float width = 320;
 
@@ -28,6 +28,8 @@ namespace osu.Game.Overlays
             Width = width;
             RelativeSizeAxes = Axes.Y;
 
+            AlwaysPresent = true;
+
             Children = new Drawable[]
             {
                 new Box
@@ -72,17 +74,20 @@ namespace osu.Game.Overlays
 
         public void Post(Notification notification)
         {
-            State = Visibility.Visible;
+            Schedule(() =>
+            {
+                State = Visibility.Visible;
 
-            ++runningDepth;
-            notification.Depth = notification.DisplayOnTop ? runningDepth : -runningDepth;
+                ++runningDepth;
+                notification.Depth = notification.DisplayOnTop ? runningDepth : -runningDepth;
 
-            var hasCompletionTarget = notification as IHasCompletionTarget;
-            if (hasCompletionTarget != null)
-                hasCompletionTarget.CompletionTarget = Post;
+                var hasCompletionTarget = notification as IHasCompletionTarget;
+                if (hasCompletionTarget != null)
+                    hasCompletionTarget.CompletionTarget = Post;
 
-            var ourType = notification.GetType();
-            sections.Children.FirstOrDefault(s => s.AcceptTypes.Any(accept => accept.IsAssignableFrom(ourType)))?.Add(notification);
+                var ourType = notification.GetType();
+                sections.Children.FirstOrDefault(s => s.AcceptTypes.Any(accept => accept.IsAssignableFrom(ourType)))?.Add(notification);
+            });
         }
 
         protected override void PopIn()
@@ -109,4 +114,4 @@ namespace osu.Game.Overlays
             this.FadeTo(0, TRANSITION_LENGTH / 2);
         }
     }
-}
\ No newline at end of file
+}
diff --git a/osu.Game/Overlays/Notifications/Notification.cs b/osu.Game/Overlays/Notifications/Notification.cs
index a590507f41..49b2823531 100644
--- a/osu.Game/Overlays/Notifications/Notification.cs
+++ b/osu.Game/Overlays/Notifications/Notification.cs
@@ -63,6 +63,8 @@ namespace osu.Game.Overlays.Notifications
                     Masking = true,
                     RelativeSizeAxes = Axes.X,
                     AutoSizeAxes = Axes.Y,
+                    AutoSizeDuration = 400,
+                    AutoSizeEasing = Easing.OutQuint,
                     Children = new Drawable[]
                     {
                         new Box
@@ -74,7 +76,7 @@ namespace osu.Game.Overlays.Notifications
                         {
                             RelativeSizeAxes = Axes.X,
                             Padding = new MarginPadding(5),
-                            Height = 60,
+                            AutoSizeAxes = Axes.Y,
                             Children = new Drawable[]
                             {
                                 IconContent = new Container
diff --git a/osu.Game/Overlays/Notifications/ProgressNotification.cs b/osu.Game/Overlays/Notifications/ProgressNotification.cs
index 98aac3a02d..f42b4b6cb3 100644
--- a/osu.Game/Overlays/Notifications/ProgressNotification.cs
+++ b/osu.Game/Overlays/Notifications/ProgressNotification.cs
@@ -6,9 +6,7 @@ using osu.Framework.Allocation;
 using osu.Framework.Graphics;
 using osu.Framework.Graphics.Containers;
 using osu.Framework.Graphics.Shapes;
-using osu.Framework.Graphics.Sprites;
 using osu.Game.Graphics;
-using osu.Game.Graphics.Sprites;
 using OpenTK;
 using OpenTK.Graphics;
 
@@ -18,10 +16,9 @@ namespace osu.Game.Overlays.Notifications
     {
         public string Text
         {
-            get { return textDrawable.Text; }
             set
             {
-                textDrawable.Text = value;
+                Schedule(() => textDrawable.Text = value);
             }
         }
 
@@ -90,7 +87,7 @@ namespace osu.Game.Overlays.Notifications
         protected virtual Notification CreateCompletionNotification() => new ProgressCompletionNotification
         {
             Activated = CompletionClickAction,
-            Text = $"Task \"{Text}\" has completed!"
+            Text = "Task has completed!"
         };
 
         protected virtual void Completed()
@@ -106,7 +103,7 @@ namespace osu.Game.Overlays.Notifications
         private Color4 colourActive;
         private Color4 colourCancelled;
 
-        private readonly SpriteText textDrawable;
+        private readonly TextFlowContainer textDrawable;
 
         public ProgressNotification()
         {
@@ -115,9 +112,11 @@ namespace osu.Game.Overlays.Notifications
                 RelativeSizeAxes = Axes.Both,
             });
 
-            Content.Add(textDrawable = new OsuSpriteText
+            Content.Add(textDrawable = new TextFlowContainer(t =>
+            {
+                t.TextSize = 16;
+            })
             {
-                TextSize = 16,
                 Colour = OsuColour.Gray(128),
                 AutoSizeAxes = Axes.Y,
                 RelativeSizeAxes = Axes.X,
@@ -131,6 +130,9 @@ namespace osu.Game.Overlays.Notifications
             });
 
             State = ProgressNotificationState.Queued;
+
+            // don't close on click by default.
+            Activated = () => false;
         }
 
         [BackgroundDependencyLoader]
@@ -167,7 +169,7 @@ namespace osu.Game.Overlays.Notifications
 
         private class ProgressBar : Container
         {
-            private Box box;
+            private readonly Box box;
 
             private Color4 colourActive;
             private Color4 colourInactive;
@@ -197,15 +199,8 @@ namespace osu.Game.Overlays.Notifications
                 }
             }
 
-
-            [BackgroundDependencyLoader]
-            private void load(OsuColour colours)
+            public ProgressBar()
             {
-                colourActive = colours.Blue;
-                Colour = colourInactive = OsuColour.Gray(0.5f);
-
-                Height = 5;
-
                 Children = new[]
                 {
                     box = new Box
@@ -215,6 +210,15 @@ namespace osu.Game.Overlays.Notifications
                     }
                 };
             }
+
+
+            [BackgroundDependencyLoader]
+            private void load(OsuColour colours)
+            {
+                colourActive = colours.Blue;
+                Colour = colourInactive = OsuColour.Gray(0.5f);
+                Height = 5;
+            }
         }
     }
 
diff --git a/osu.Game/Overlays/Toolbar/ToolbarNotificationButton.cs b/osu.Game/Overlays/Toolbar/ToolbarNotificationButton.cs
index 5126f6a2a4..dcadc4bf56 100644
--- a/osu.Game/Overlays/Toolbar/ToolbarNotificationButton.cs
+++ b/osu.Game/Overlays/Toolbar/ToolbarNotificationButton.cs
@@ -19,9 +19,9 @@ namespace osu.Game.Overlays.Toolbar
         }
 
         [BackgroundDependencyLoader]
-        private void load(NotificationManager notificationManager)
+        private void load(NotificationOverlay notificationOverlay)
         {
-            StateContainer = notificationManager;
+            StateContainer = notificationOverlay;
         }
     }
 }
\ No newline at end of file
diff --git a/osu.Game/Screens/Play/HUDOverlay.cs b/osu.Game/Screens/Play/HUDOverlay.cs
index 70093a1407..ea75c140db 100644
--- a/osu.Game/Screens/Play/HUDOverlay.cs
+++ b/osu.Game/Screens/Play/HUDOverlay.cs
@@ -61,7 +61,7 @@ namespace osu.Game.Screens.Play
         }
 
         [BackgroundDependencyLoader(true)]
-        private void load(OsuConfigManager config, NotificationManager notificationManager, OsuColour colours)
+        private void load(OsuConfigManager config, NotificationOverlay notificationOverlay, OsuColour colours)
         {
             showHud = config.GetBindable<bool>(OsuSetting.ShowInterface);
             showHud.ValueChanged += hudVisibility => content.FadeTo(hudVisibility ? 1 : 0, duration);
@@ -71,7 +71,7 @@ namespace osu.Game.Screens.Play
             {
                 hasShownNotificationOnce = true;
 
-                notificationManager?.Post(new SimpleNotification
+                notificationOverlay?.Post(new SimpleNotification
                 {
                     Text = @"The score overlay is currently disabled. You can toggle this by pressing Shift+Tab."
                 });
diff --git a/osu.Game/osu.Game.csproj b/osu.Game/osu.Game.csproj
index 5ac76ed00e..fa4665fd7d 100644
--- a/osu.Game/osu.Game.csproj
+++ b/osu.Game/osu.Game.csproj
@@ -250,7 +250,7 @@
     <Compile Include="Configuration\OsuConfigManager.cs" />
     <Compile Include="Overlays\Notifications\IHasCompletionTarget.cs" />
     <Compile Include="Overlays\Notifications\Notification.cs" />
-    <Compile Include="Overlays\NotificationManager.cs" />
+    <Compile Include="Overlays\NotificationOverlay.cs" />
     <Compile Include="Overlays\Notifications\NotificationSection.cs" />
     <Compile Include="Overlays\Notifications\ProgressCompletionNotification.cs" />
     <Compile Include="Overlays\Notifications\ProgressNotification.cs" />