             frame.origin.y = pos.y
         }
 
-        return frameRelativeToHearthstone(frame, relative: true)
+        return hearthstoneWindow.relativeFrame(frame, relative: true)
     }
 }

                           y: 50,
                           width: CGFloat(width),
                           height: 450)
        return frameRelativeToHearthstone(frame, relative: true)
    }

    static func timerHudFrame() -> NSRect {

            return NSHeight(NSWindow.frameRectForContentRect(NSRect(x: 0, y: 0, width: height, height: height),
                styleMask: NSTitledWindowMask)) - height
        }()
        
        func reload() {
            let options = CGWindowListOption(arrayLiteral: .ExcludeDesktopElements)
            let windowListInfo = CGWindowListCopyWindowInfo(options, CGWindowID(0))
            if let info = (windowListInfo as NSArray? as? [[String: AnyObject]])?.filter({
                !$0.filter({ $0.0 == "kCGWindowName" && $0.1 as? String == "Hearthstone" }).isEmpty
            }).first {
                if let id = info["kCGWindowNumber"] as? Int {
                    self.windowId = CGWindowID(id)
                }
                var rect = NSRect()
                // swiftlint:disable force_cast
                let bounds = info["kCGWindowBounds"] as! CFDictionary
                // swiftlint:enable force_cast
                CGRectMakeWithDictionaryRepresentation(bounds, &rect)
                
                let maxDisplays: UInt32 = 16
                var onlineDisplays = [CGDirectDisplayID](count: Int(maxDisplays), repeatedValue: 0)
                var displayCount: UInt32 = 0
                CGGetOnlineDisplayList(maxDisplays, &onlineDisplays, &displayCount)
                
                for currentDisplay in onlineDisplays[0 ..< Int(displayCount)] {
                    let bounds = CGDisplayBounds(currentDisplay)
                    if bounds.contains(rect) {
