         }
         if self.pongTimer != nil {
             self.pongTimer.invalidate()
+        }
+        if self.commTimer != nil {
+            self.commTimer.invalidate()
         }
         connectionDelegate |> { delegate in
             delegate.websocketDidDisconnect(client: self)

    private var socket: WebSocket!
    private var pingTimer: Timer!
    private var pongTimer: Timer!
    private var pendingRequests: Dictionary<RequestKey, Request> = [:]
    private var lastID: String? = nil
    private var lastIDTime: DispatchTime? = nil

    var connectionDelegate = MulticastDelegate<WebSocketConnectionDelegate>()
    var communicationDelegate = MulticastDelegate<WebSocketCommunicationDelegate>()


    private func processResponse(_ response: Response) {
        if self.lastID == response.id {
            self.commTimer.invalidate()
            self.commTimer = Timer.scheduledTimer(timeInterval: WebSocketClient.coolingTime, target: self, selector: #selector(self.coolingEnd), userInfo: nil, repeats: false)
        }
        if response.requestType == readRequestType {
            switch response.content {
