     init(userConfiguration: UserConfiguration) {
         self.userConfiguration = userConfiguration
         self.focusFollowsMouseManager = FocusFollowsMouseManager(userConfiguration: userConfiguration)
-
         super.init()
 
+        mouseStateKeeper.windowManager = self
         focusFollowsMouseManager.delegate = self
 
         addWorkspaceNotificationObserver(NSWorkspace.didLaunchApplicationNotification, selector: #selector(applicationDidLaunch(_:)))


class MouseStateKeeper {
    public var state: MouseState
    init() {
        state = .pointing
    }
}

private class ObserveApplicationNotifications {
    enum Error: Swift.Error {
        case failed
    }

    fileprivate let application: SIApplication
    fileprivate let windowManager: WindowManager
    fileprivate let mouse: MouseStateKeeper

    init(application theApp: SIApplication, windowManager theWM: WindowManager) {
        application = theApp
        windowManager = theWM
        mouse = theWM.mouseStateKeeper
    }

    fileprivate func addObservers() -> Observable<Bool> {
        return _addObservers().retry(.exponentialDelayed(maxCount: 4, initial: 0.1, multiplier: 2))
    }

    private func swapDraggedWindowWithDropzone(_ draggedWindow: SIWindow) {
        guard let screen = draggedWindow.screen() else {
            return
        }

                    let dragEndInterval = NSDate().timeIntervalSince(lmbUpMoment as Date)
                    if dragEndInterval < mouseDragRaceThresholdSeconds {
                        self.mouse.state = .pointing // flip state first to prevent race condition
                        self.mouse.swapDraggedWindowWithDropzone(movedWindow)
                    }
                default: ()
                }
