         // updated yet.  Making the maximum==hsp here avoids trouble later
         // when Range constrains value
         var cWidth:Number = viewport.contentWidth;
-        maximum = (cWidth == 0) ? hsp : cWidth - viewportWidth;
+
+        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;
     }
     


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

            }
            
            // calculate new thumb position.
            thumbPosTrackX = (pendingValue - min) * ((trackSize - thumbSize) / range);
        }

        // Special thumb behavior for bounce/pull.  When the component is positioned
        // beyond its min/max, we want the scroll thumb to shink in size. 
        // Note: not checking interactionMode==TOUCH here because it is assumed that
        // value will never exceed min/max unless in touch mode.
        if (pendingValue < min)
        {
            if (!fixedThumbSize)
            {
                // Note:  we use thumb.height here to ensure the thumb doesn't get smaller than square.
                thumbSize = Math.max(Math.max(thumb.height, thumb.minWidth), thumbSize + pendingValue);
            }
            thumbPosTrackX = min;
        }
        if (pendingValue > max)
        {
            if (!fixedThumbSize)
            {
                // Note:  we use thumb.height here to ensure the thumb doesn't get smaller than square.
                thumbSize = Math.max(Math.max(thumb.height, thumb.minWidth), thumbSize - (pendingValue - max));
            }
            thumbPosTrackX = trackSize - thumbSize;
        }
        
        if (!fixedThumbSize)
            thumb.setLayoutBoundsSize(thumbSize, NaN);
        if (getStyle("autoThumbVisibility") === true)
            thumb.visible = thumbSize < trackSize;
