           clientId    : KD.remote.getSessionToken()
         channel.on "message", messageHandler.bind channel, kiteName
         i = setInterval ->
+          now = Date.now()
+          isUnresponsive = channel.lastPong? and (now - channel.lastPong > 6000)
+          cycleChannel.call channel  if isUnresponsive
           channel.publish JSON.stringify
             method      : 'ping'
             arguments   : []

        channelName = getChannelName "kite-#{kiteName}"
        return callback channels[channelName]  if channels[channelName]
        channel = KD.remote.mq.subscribe channelName
        channels[channelName] = channel
        channel.once 'broker.subscribed', ->
          onReady channel, -> callback channel

        cycleChannel.call this
        console.error err

      pong =-> @lastPong = Date.now()

      cycleChannel =->
        @off()
        @stopPinging()
