         defer { objc_sync_exit(self) }
 
         log.debug("Reconnecting...")
-        guard let lastConnection = lastEstablishedConnectRequest else {
+        guard let lastConnection = connectRequests.lastEstablished else {
             log.warning("Failed to reconnect since there's no last established connection info.")
             return
         }
         // Nullifying `lastEstablishedConnectRequest` to prevent the `reconnect()`
         // method from being called multiple times from multiple thread.
-        lastEstablishedConnectRequest = nil
+        connectRequests.lastEstablished = nil
 
         disconnect()
         delegate?.nicoUtilityWillReconnectToLive(self)

            switch $0 {
            case .success():
                me.startMessageSocketPingTimer(interval: messageSocketPingInterval)
                me.lastEstablishedConnectRequest = me.ongoingConnectRequest
                me.delegate?.nicoUtilityDidConnectToLive(me, roomPosition: RoomPosition.arena)
            case .failure(_):
                let reason = "Failed to open message server."

    private(set) var live: Live?

    // Private Properties
    private var connectRequests: ConnectRequests =
        ConnectRequests(
            onGoing: nil,
            lastEstablished: nil
        )
    private var userSessionCookie: String?
    private let session: Session
    private var managingSocket: WebSocket?
