     //--------------------------------------------------------------------------
     
     /**
+     *  @private
+     */
+    override protected function pointToValue(x:Number, y:Number):Number
+    {
+        var r:Number = track.getLayoutBoundsHeight() - thumb.getLayoutBoundsHeight();
+        return minimum + ((r != 0) ? (y / r) * (maximum - minimum) : 0); 
+    }
+
+    /**
+     *  @private
+     */
+    override protected function updateSkinDisplayList():void
+    {
+        if (!thumb || !track)
+            return;
+
+        var trackPos:Number = track.getLayoutBoundsY();
+        var trackSize:Number = track.getLayoutBoundsHeight();
+        var range:Number = maximum - minimum;
+
+        var thumbPos:Number = 0;
+        var thumbSize:Number = trackSize;
+        if (range > 0)
+        {
+            thumbSize = Math.min((pageSize / (range + pageSize)) * trackSize, trackSize)
+            thumbSize = Math.max(thumb.minHeight, thumbSize);
+            thumbPos = (value - minimum) * ((trackSize - thumbSize) / range);
+        }
+
+        if (getStyle("fixedThumbSize") === false)
+            thumb.setLayoutBoundsSize(NaN, thumbSize);
+        if (getStyle("autoThumbVisibility") === true)
+            thumb.visible = thumbSize < trackSize;
+        thumb.setLayoutBoundsPosition(thumb.getLayoutBoundsX(), Math.round(trackPos + thumbPos));
+    }
+    
+    
+    /**
      *  Update the value property and, if viewport is non null, then set 
      *  its verticalScrollPosition to <code>value</code>.
      * 

            pageSize = Math.abs(viewport.getVerticalScrollPositionDelta(
                (increase) ? NavigationUnit.PAGE_DOWN : NavigationUnit.PAGE_UP));
        }
        super.page(increase);
        if (viewport)
            pageSize = oldPageSize;
    } 


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

