diff --git a/src/mol-util/input/input-observer.ts b/src/mol-util/input/input-observer.ts
index 84e1a994dd84ffacbf6546d7752d4076fe5f5a06..b2cc707b314786047dc1c57987c4b24bd5c44365 100644
--- a/src/mol-util/input/input-observer.ts
+++ b/src/mol-util/input/input-observer.ts
@@ -251,6 +251,7 @@ namespace InputObserver {
 
             element.addEventListener('wheel', onMouseWheel as any, false)
             element.addEventListener('mousedown', onMouseDown as any, false)
+
             // for dragging to work outside canvas bounds,
             // mouse move/up events have to be added to a parent, i.e. window
             window.addEventListener('mousemove', onMouseMove as any, false)
@@ -263,7 +264,8 @@ namespace InputObserver {
             element.addEventListener('touchmove', onTouchMove as any, false)
             element.addEventListener('touchend', onTouchEnd as any, false)
 
-            element.addEventListener('blur', handleBlur)
+            // reset buttons and modifier keys state when browser window looses focus
+            window.addEventListener('blur', handleBlur)
             window.addEventListener('keyup', handleKeyUp as EventListener, false)
             window.addEventListener('keydown', handleKeyDown as EventListener, false)
 
@@ -288,7 +290,7 @@ namespace InputObserver {
             element.removeEventListener('touchmove', onTouchMove as any, false)
             element.removeEventListener('touchend', onTouchEnd as any, false)
 
-            element.removeEventListener('blur', handleBlur)
+            window.removeEventListener('blur', handleBlur)
             window.removeEventListener('keyup', handleKeyUp as EventListener, false)
             window.removeEventListener('keydown', handleKeyDown as EventListener, false)