             return;
         
         var trackSize:Number = track.getLayoutBoundsWidth();
-        var range:Number = maximum - minimum;
-        
+        
+        var min:Number;
+        var max:Number;
+        if (getStyle("interactionMode") == InteractionMode.TOUCH)
+        {
+            // For calculating thumb position/size on mobile, we want to exclude
+            // the extra margin we added to minimum and maximum for bounce/pull. 
+            var viewportWidth:Number = isNaN(viewport.width) ? 0 : viewport.width;
+
+            min = 0;
+            max = Math.max(0, maximum - viewportWidth);
+        }
+        else
+        {
+            min = minimum;
+            max = maximum;
+        }
+        var range:Number = max - min;
+        
+        var fixedThumbSize:Boolean = !(getStyle("fixedThumbSize") === false); 
         var thumbPos:Point;
         var thumbPosTrackX:Number = 0;
         var thumbPosParentX:Number = 0;
         var thumbSize:Number = trackSize;
         if (range > 0)
         {
-            if (getStyle("fixedThumbSize") === false)
+            if (!fixedThumbSize)
             {
                 thumbSize = Math.min((pageSize / (range + pageSize)) * trackSize, trackSize)
                 thumbSize = Math.max(thumb.minWidth, thumbSize);

    override mx_internal function viewportContentWidthChangeHandler(event:PropertyChangeEvent):void
    {
        if (viewport)
        {
            var viewportWidth:Number = isNaN(viewport.width) ? 0 : viewport.width;        
            maximum = viewport.contentWidth - viewportWidth;
        }
    }
    

        // updated yet.  Making the maximum==hsp here avoids trouble later
        // when Range constrains value
        var cWidth:Number = viewport.contentWidth;

        if (getStyle("interactionMode") == InteractionMode.TOUCH)
        {
            // For mobile, we allow the min/max to extend a little beyond the ends so
            // we can support bounce/pull kinetic effects.
            minimum = -viewportWidth;
            maximum = (cWidth == 0) ? hsp + viewportWidth : cWidth;
        }
        else
        {
            minimum = 0;
            maximum = (cWidth == 0) ? hsp : cWidth - viewportWidth;
        }
        
        
        pageSize = viewportWidth;
    }
    
