     
     /**
      *  @private
+     *  Timer used to issue periodic heartbeats to the remote host if the
+     *  client is idle, and not actively sending messages.
+     */
+    private var _heartbeatTimer:Timer;
+
+    /**
+     *  @private
      *  Flag indicating whether the ChannelSet is in the process of hunting to a
      *  new Channel; this lets us control the "reconnecting" flag on 
      *  CONNECT ChannelEvents that we dispatch when we hunt to a new 

     *  add a responder to in order to handle success or failure directly.
     * 
     *  @throws flash.errors.IllegalOperationError if a login or logout operation is currently in progress.
     *  
     *  @langversion 3.0
     *  @playerversion Flash 9
     *  @playerversion AIR 1.1
     *  @productversion BlazeDS 4
     *  @productversion LCDS 3 
     */ 
    public function logout(agent:MessageAgent=null):AsyncToken
    {        

                    msg.destination = agent.destination;
                }
                msg.operation = CommandMessage.CLUSTER_REQUEST_OPERATION;
                _currentChannel.sendInternalMessage(new ClusterMessageResponder(msg, this));
                _hasRequestedClusterEndpoints = true;                           
            }                    
            unscheduleHeartbeat();
            _currentChannel.send(agent, message);
            scheduleHeartbeat();
        }
        else
        {
