     {
         if (steppingDown || steppingUp)
         {
-        	// stopAnimation will not dispatch a changeEnd.
-            stopAnimation();
-            
-            dispatchEvent(new FlexEvent(FlexEvent.CHANGE_END));
-            
-            steppingUp = steppingDown = false;
-            isStepping = false;
-        }
-        else if (isStepping)
-        {
-            // Dispatch changeEnd event for no animation case
-            dispatchEvent(new FlexEvent(FlexEvent.CHANGE_END));
-            isStepping = false;
-        }
-        
-        systemManager.getSandboxRoot().removeEventListener(MouseEvent.MOUSE_UP, 
-            button_buttonUpHandler, true);
-        systemManager.getSandboxRoot().removeEventListener(
-            SandboxMouseEvent.MOUSE_UP_SOMEWHERE, button_buttonUpHandler);
+            if (animator.isPlaying)
+            {
+                animationEndHandler(animator);
+            }
+            // stop even if !isPlaying - it might just be startDelayed
+            animator.stop();
+
+			// Dispatch change event after animation is finished or stopped
+			dispatchEvent(new Event(Event.CHANGE));
+			
+			steppingUp = steppingDown = false;
+			isStepping = false;
+        }
+		else if (isStepping)
+		{
+			// Dispatch change event for no animation case
+			dispatchEvent(new Event(Event.CHANGE));
+			isStepping = false;
+		}
+		
+		systemManager.getSandboxRoot().removeEventListener(MouseEvent.MOUSE_UP, 
+			button_buttonUpHandler, true);
+		systemManager.getSandboxRoot().removeEventListener(
+			SandboxMouseEvent.MOUSE_UP_SOMEWHERE, button_buttonUpHandler);
     }
     
     //---------------------------------

     */
    private function animationUpdateHandler(animation:Animation):void
    {
        // TODO (klin): Add support to send change events at the right intervals.
        setValue(animation.currentValue["value"]);
    }
    

                slideDuration != 0 && 
                (maximum - minimum) != 0)
            {
                // Animate the shift-click operation
                startAnimation(slideDuration * 
                    (Math.abs(value - newScrollValue) / (maximum - minimum)),
                    adjustedValue, deceleratingSineEaser);
				animatingSinglePage = true;
            }
            else
            {
