             {
                 thumbSize = thumb ? thumb.width : 0;
             }
-            thumbPos = (value - minimum) * ((trackSize - thumbSize) / range);
+            
+            // calculate new thumb position.
+            thumbPosTrackX = (value - minimum) * ((trackSize - thumbSize) / range);
         }
         
         if (getStyle("fixedThumbSize") === false)
             thumb.setLayoutBoundsSize(thumbSize, NaN);
         if (getStyle("autoThumbVisibility") === true)
             thumb.visible = thumbSize < trackSize;
-        thumb.setLayoutBoundsPosition(Math.round(trackPos + thumbPos), thumb.getLayoutBoundsY());
+        
+        // convert thumb position to parent's coordinates.
+        thumbPos = track.localToGlobal(new Point(thumbPosTrackX, 0));
+        thumbPosParentX = thumb.parent.globalToLocal(thumbPos).x;
+        
+        thumb.setLayoutBoundsPosition(Math.round(thumbPosParentX), thumb.getLayoutBoundsY());
     }
     
     /**


package spark.components
{
import mx.core.mx_internal;
import mx.events.PropertyChangeEvent;
import mx.events.ResizeEvent;

        if (!thumb || !track)
            return;
        
        var trackSize:Number = track.getLayoutBoundsWidth();
        var range:Number = maximum - minimum;
        
        var thumbPos:Point;
        var thumbPosTrackX:Number = 0;
        var thumbPosParentX:Number = 0;
        var thumbSize:Number = trackSize;
        if (range > 0)
        {
