             if (!toggle)
                 selected = false;
             toggleChanged = false;
+        }  
+        
+        if (phaseChanged)
+        {
+            // Ensure all potential pseudo-selectors are reevaluated if 
+            // necessary.
+            var prevState:String = _currentButtonState;
+            if (prevState != getCurrentButtonState())
+                stateChanged(prevState, _currentButtonState, false);
+            phaseChanged = false;
         }
     }
     

        currentIcon = newIcon;
        
        if (defaultIconUsesStates && currentIcon is IStateClient)
        {
            var stateName:String = "";
            
            if (!enabled)
                stateName = selected ? "selectedDisabled" : "disabled";
            else if (phase == ButtonPhase.UP)
                stateName = selected ? "selectedUp" : "up";
            else if (phase == ButtonPhase.OVER)
                stateName = selected ? "selectedOver" : "over";
            else if (phase == ButtonPhase.DOWN)
                stateName = selected ? "selectedDown" : "down";
            
            IStateClient(currentIcon).currentState = stateName;
            if (currentIcon is IInvalidating)
            	IInvalidating(currentIcon).validateNow();
        }

    mx_internal function set phase(value:String):void
    {
        _phase = value;
        phaseChanged = true;
        
        invalidateSize();
        invalidateProperties();
        invalidateDisplayList();
    }

