      */
     @objc public var isLoggedIn: Bool {
         return (loggedInUsername != nil)
+    }
+
+    private var loggedInURLs = Set<URL>()
+    public func isLoggedIn(at loginURL: URL) -> Bool {
+        return loggedInURLs.contains(loginURL)
     }
 
     @objc public var hasKeychainCredentials: Bool {

        
        currentlyLoggedInUserFetcher.fetch(siteURL: siteURL, success: { result in
            self.loggedInUsername = result.name
            userAlreadyLoggedInHandler(result)
        }, failure:{ error in
            guard !(error is URLError) else {
                self.loggedInUsername = userName
                success(WMFAccountLoginResult(status: WMFAccountLoginResult.Status.offline, username: userName, message: nil))
                return
            }
            self.login(siteURL, username: userName, password: password, retypePassword: nil, oathToken: nil, captchaID: nil, captchaWord: nil, success: success, failure: { error in
                guard !(error is URLError) else {
                    self.loggedInUsername = userName
                    success(WMFAccountLoginResult(status: WMFAccountLoginResult.Status.offline, username: userName, message: nil))
                    return
                }
                self.loggedInUsername = nil
                self.logout()
                failure(error)
            })

            self.accountLogin.login(username: username, password: password, retypePassword: retypePassword, loginToken: tokenBlock.token, oathToken: oathToken, captchaID: captchaID, captchaWord: captchaWord, siteURL: siteURL, success: {result in
                let normalizedUserName = result.username
                self.loggedInUsername = normalizedUserName
                self.loggedInURLs.insert(siteURL)
                KeychainCredentialsManager.shared.username = normalizedUserName
                KeychainCredentialsManager.shared.password = password
                self.cloneSessionCookies()
