     {
         if (value == _viewport)
             return;
+        uninstallViewport();
         _viewport = value;
         installViewport();
     }
-    
+
     private function installViewport():void
     {
-        if (viewportHolder)
-        {
-            if (viewportHolder.numItems > 0)     // remove the old viewport
-        	   viewportHolder.removeItemAt(0);
-        	if (_viewport)                       // add the new viewport
-        	   viewportHolder.addItemAt(_viewport, 0);
-        }
+        if (skinObject && viewport)
+        {
+            skinObject.addItemAt(viewport, 0);
+            viewport.addEventListener(PropertyChangeEvent.PROPERTY_CHANGE, viewport_propertyChangeHandler);
+        }
+ 	
+    }
+    
+    private function uninstallViewport():void
+    {
+    	if (skinObject && viewport)
+    	{
+    		skinObject.removeItem(viewport);
+    		viewport.removeEventListener(PropertyChangeEvent.PROPERTY_CHANGE, viewport_propertyChangeHandler);
+    	}
+    }
+    
+    //----------------------------------
+    //  verticalScrollPolicy
+    //----------------------------------
+
+    /**
+     *  @private
+     */
+    private var _verticalScrollPolicy:String = ScrollPolicy.AUTO;
+    
+    /**
+     *  Documentation is not currently available.
+     */
+    public function get verticalScrollPolicy():String
+    {
+        return _verticalScrollPolicy;
+    }
+
+    /**
+     *  @private
+     */
+    public function set verticalScrollPolicy(value:String):void
+    {
+        if (value == _verticalScrollPolicy)
+            return;
+
+        _verticalScrollPolicy = value;
+        if (skinObject)
+        {
+            skinObject.invalidateSize();
+            skinObject.invalidateDisplayList();
+        }
+    }
+    
+
+    //----------------------------------
+    //  horizontalScrollPolicy
+    //----------------------------------
+
+    /**
+     *  @private
+     */
+    private var _horizontalScrollPolicy:String = ScrollPolicy.AUTO;
+    
+    /**
+     *  Documentation is not currently available.
+     */
+    public function get horizontalScrollPolicy():String
+    {
+        return _horizontalScrollPolicy;
+    }
+
+    /**
+     *  @private
+     */
+    public function set horizontalScrollPolicy(value:String):void
+    {
+        if (value == _horizontalScrollPolicy)
+            return;
+
+        _horizontalScrollPolicy = value;
+        if (skinObject)
+        {
+        	skinObject.invalidateSize();
+            skinObject.invalidateDisplayList();
+        }
+    }
+    
+
+    //--------------------------------------------------------------------------
+    // 
+    // Event Handlers
+    //
+    //--------------------------------------------------------------------------
+    
+    protected function vsb_valueCommitHandler(event:Event):void
+    {
+        if (viewport)
+            viewport.verticalScrollPosition = verticalScrollBar.value;    	
+    }
+    
+    protected function hsb_valueCommitHandler(event:Event):void
+    {
+    	if (viewport)
+    	   viewport.horizontalScrollPosition = horizontalScrollBar.value;
+    }
+    
+    private function viewport_propertyChangeHandler(event:PropertyChangeEvent):void
+    {
+    	switch(event.property) {
+    		case "contentWidth": 
+    		    viewportContentWidthChanged(event);
+    		    break;
+    		    
+    		case "contentHeight": 
+    		    viewportContentHeightChanged(event);
+    		    break;
+    	}
+    }
+    
+    protected function viewportContentWidthChanged(event:PropertyChangeEvent):void
+    {
+        if (skinObject)
+        {
+        	skinObject.invalidateSize()
+            skinObject.invalidateDisplayList();           
+        }
+    }
+    
+    protected function viewportContentHeightChanged(event:PropertyChangeEvent):void
+    {
+    	if (skinObject)
+    	{
+    		skinObject.invalidateSize();
+            skinObject.invalidateDisplayList();
+    	}
     }
     
     //--------------------------------------------------------------------------


package flex.component
{
	import flex.core.SkinnableComponent;
	import flex.core.Group;
	import flex.intf.IViewport;

	
[DefaultProperty("viewport")]

    //--------------------------------------------------------------------------
    
    //----------------------------------
    //  horizontalScrollBar
    //---------------------------------- 
    
    [SkinPart]
    public var horizontalScrollBar:HScrollBar;
    
    //----------------------------------
    //  verticalScrollBar
    //---------------------------------- 
    
    [SkinPart]
    public var verticalScrollBar:VScrollBar;
    
    //----------------------------------
    //  viewport - default property
    //----------------------------------    
    
