     override mx_internal function viewportContentHeightChangeHandler(event:PropertyChangeEvent):void
     {
         if (viewport)
-        {
-            var viewportHeight:Number = isNaN(viewport.height) ? 0 : viewport.height;
-            maximum = viewport.contentHeight - viewport.height;
-        }
-    }
-
+            updateMaximumAndPageSize();
+    }
+    
+    /**
+     *  @private 
+     */
+    override public function styleChanged(styleName:String):void
+    {
+        super.styleChanged(styleName);
+        
+        var allStyles:Boolean = !styleName || styleName == "styleName";
+        
+        if (allStyles || styleName == "interactionMode")
+        {
+            if (viewport)
+                updateMaximumAndPageSize();
+        }
+    }
+    
+    
     /**
      *  @private
      *  Scroll vertically by event.delta "steps".  This listener is added to both the scrollbar 

            return;

        var trackSize:Number = track.getLayoutBoundsHeight();
        var range:Number = maximum - minimum;

        var thumbPos:Point;
        var thumbPosTrackY:Number = 0;
        var thumbPosParentY:Number = 0;
        var thumbSize:Number = trackSize;
        if (range > 0)
        {
            if (getStyle("fixedThumbSize") === false)
            {
                thumbSize = Math.min((pageSize / (range + pageSize)) * trackSize, trackSize)
                thumbSize = Math.max(thumb.minHeight, thumbSize);
            }
            else

import flash.geom.Point;

import mx.core.IInvalidating;
import mx.core.InteractionMode;
import mx.core.mx_internal;
import mx.events.FlexMouseEvent;
import mx.events.PropertyChangeEvent;
