     public var horizontalScrollBar:HScrollBar;
     
     //----------------------------------
+    //  horizontalScrollBarFactory
+    //---------------------------------- 
+    
+    [SkinPart(required="false", type="spark.components.HScrollBar")]
+    
+    /**
+     *  A skin part that defines the horizontal scroll bar component.
+     * 
+     *  The <code>horizontalScrollBar</code> skin part takes precedence over this
+     *  skin part.
+     * 
+     *  When Scroller creates an instance of this part, it will set the
+     *  <code>horizontalScrollBar</code> skin part to that instance.
+     * 
+     *  This property should be considered read-only. It is only
+     *  set by the Scroller's skin.
+     */
+    public var horizontalScrollBarFactory:IFactory;
+    
+    /**
+     *  Creates the horizontalScrollBar part from the horizontalScrollBarFactory part. 
+     */
+    private function ensureDeferredHScrollBarCreated():void
+    {
+        if (!horizontalScrollBar && horizontalScrollBarFactory)
+        {
+            horizontalScrollBar = HScrollBar(createDynamicPartInstance("horizontalScrollBarFactory"));
+            Group(this.skin).addElement(horizontalScrollBar);
+            partAdded("horizontalScrollBar", horizontalScrollBar);
+        }
+    }
+    
+    //----------------------------------
+    //  horizontalScrollInProgress
+    //---------------------------------- 
+
+    /**
+     *  Storage for the horizontalScrollInProgress property  
+     */
+    private var _horizontalScrollInProgress:Boolean = false;
+    
+    /**
+     *  @private
+     *  Property used to communicate with ScrollerLayout to let it 
+     *  know when a horizontal scroll is in progress or not (and when 
+     *  the horizontal scroll bar should be hidden or not)
+     */
+    mx_internal function get horizontalScrollInProgress():Boolean
+    {
+        return _horizontalScrollInProgress;
+    }
+    
+    /**
+     *  @private 
+     */
+    mx_internal function set horizontalScrollInProgress(value:Boolean):void
+    {
+        _horizontalScrollInProgress = value;
+        if (value && getStyle("interactionMode") == InteractionMode.TOUCH)
+            ensureDeferredHScrollBarCreated();
+    }
+
+    //----------------------------------
     //  verticalScrollBar
     //---------------------------------- 
     

    override protected function attachSkin():void
    {
        super.attachSkin();
        Group(skin).layout = new ScrollerLayout();
        installViewport();
        skin.addEventListener(MouseEvent.MOUSE_WHEEL, skin_mouseWheelHandler);

            if (liveScrollingSet)
                verticalScrollBar.setStyle("liveDragging", Boolean(liveScrolling));
        }
        else if (instance == horizontalScrollBar)
        {
            horizontalScrollBar.viewport = viewport;
