 
         if (trackScrollTimer)
             trackScrollTimer.reset();
+            
+        if (smoothScrolling && !animatingSinglePage)
+        {
+            if (animator.isPlaying)
+            {
+                animationEndHandler(animator);
+            }
+            // Stop it regardless, in case the animation is startDelayed and
+            // thus not 'playing', but still active
+            animator.stop();
+        }
     }
 
     /**

    //---------------------------------
     
    /**
     *  @private
     *  Handle a click on the up button of the scroll bar. This
     *  should up one step.
     */
    protected function decrementButton_buttonDownHandler(event:Event):void
    {
        var oldValue:Number = value;
        
        step(false); // up
        
        if (value != oldValue)
        {
            positionThumb(valueToPosition(value));
            dispatchEvent(new Event("change"));
        }
    }
    
    /**
     *  @private
     *  Handle a click on the down button of the scroll bar. This
     *  should down one step.
     */
    protected function incrementButton_buttonDownHandler(event:Event):void
    {
        var oldValue:Number = value;
        
        step(true); // down
        
        if (value != oldValue)
        {
            positionThumb(valueToPosition(value));
            dispatchEvent(new Event("change"));
        }
    }    
    
    //---------------------------------
    // Track dragging handlers

     */
    public function page(increase:Boolean = true):void
    {
        var val:Number;
        if (increase)
            val = value + pageSize;
        else
            val = value - pageSize;
        if (smoothScrolling) {
            startAnimation(getStyle("repeatInterval"), val, Linear.getInstance());            
            animatingSinglePage = true;
        }
        else
        {
            setValue(val);
            dispatchEvent(new Event("change"));
        }
    }

    /**
