diff --git a/webclient/components/matrix/presence-service.js b/webclient/components/matrix/presence-service.js
index 952c8ec8a97808d6ac4ae3965010255cb37852b4..b487e3d3bd7b6d5d3c9b7ab8c361125329a9e786 100644
--- a/webclient/components/matrix/presence-service.js
+++ b/webclient/components/matrix/presence-service.js
@@ -24,7 +24,7 @@ angular.module('mPresence', [])
 .service('mPresence', ['$timeout', 'matrixService', function ($timeout, matrixService) {
 
     // Time in ms after that a user is considered as unavailable/away
-    var UNAVAILABLE_TIME = 5 * 60000; // 5 mins
+    var UNAVAILABLE_TIME = 3 * 60000; // 3 mins
    
     // The current presence state
     var state = undefined;
diff --git a/webclient/room/room-controller.js b/webclient/room/room-controller.js
index e69adb9b4654ebabfc60a7793e13e42f2f68f5b2..c702917fef7d36997638bd98542f3f455c75946d 100644
--- a/webclient/room/room-controller.js
+++ b/webclient/room/room-controller.js
@@ -62,8 +62,8 @@ angular.module('RoomController', ['ngSanitize', 'matrixFilter', 'mFileInput'])
             scrollToBottom();
 
             if (window.Notification) {
-                // Show notification when the user is idle
-                if (matrixService.presence.offline === mPresence.getState()) {
+                // Show notification when the window is hidden, or the user is idle
+                if (document.hidden || matrixService.presence.unavailable === mPresence.getState()) {
                     var notification = new window.Notification(
                         ($scope.members[event.user_id].displayname || event.user_id) +
                         " (" + ($scope.room_alias || $scope.room_id) + ")", // FIXME: don't leak room_ids here