         _connecting = false;
         
         setReconnecting(false); // Ensure the reconnecting flag is turned off; failover is not being attempted.
+        
+        reliableReconnectCleanup();
     }
     
     /**

    /**
     *  @private
     *  Indicates whether the Channel was previously connected successfully. Used for pinned reconnect
     *  attempt before trying failover options.
     */
    private var _previouslyConnected:Boolean;
    

    {
        var timer:Timer = null;
        
        // Potentially enter reliable reconnect loop.
        if (_previouslyConnected)
        {
            _previouslyConnected = false;              
                      
            var acs:Class = getDefinitionByName("mx.messaging.AdvancedChannelSet") as Class; 
            var duration:int = -1;                      
            if (acs != null)
            {                
                for each (var channelSet:ChannelSet in channelSets)
                {
                    if (channelSet is acs)
                    {
                        var d:int = (channelSet as acs)["reliableReconnectDuration"];
                        if (d > duration)
                            duration = d;
                    }                     
                }
            }
                       
            if (duration != -1)
            {
                setReconnecting(true);
                reliableReconnectDuration = duration;
                _reliableReconnectBeginTimestamp = new Date().valueOf();
                timer = new Timer(1, 1);
                timer.addEventListener(TimerEvent.TIMER, reconnect);
                timer.start();
                return; // Exit early.
            }
        }
        
        // Potentially continue reliable reconnect loop.
        if (reliableReconnectDuration != -1)
        {
            _reliableReconnectLastTimestamp = new Date().valueOf();
            var remaining:Number = reliableReconnectDuration - (_reliableReconnectLastTimestamp - _reliableReconnectBeginTimestamp);            
            if (remaining > 0)
            {                                
                // Apply exponential backoff.
                var delay:int = 1000; // 1 second.
                delay << ++_reliableReconnectAttempts;
                if (delay < remaining)
                {
                    timer = new Timer(delay, 1);
                    timer.addEventListener(TimerEvent.TIMER, reconnect);
                    timer.start();
                    return; // Exit early. 
                }
            }
            // At this point the reliable reconnect duration has been exhausted.
            reliableReconnectCleanup();
        }
        
        // General failover handling.
