             if (canScrollHorizontally && canScrollVertically)
                 throw new Error(resourceManager.getString("components", "operationSupportedForOneAxisOnly"));
             
-            // TODO (eday): we really should use invalidateProperties/commitProperties to manage 
-            // the scroll ranges and positions
-            determineScrollRanges();
-            snapContentScrollPosition();
+            scrollRangesChanged = true;
+            snappingModeChanged = true;
+            invalidateProperties();
         }
     }
     

			return;
		
        _bounceEnabled = value;
        determineScrollRanges();
    }
    
    

        var layout:LayoutBase = viewportLayout;
        var nearestElementIndex:int;
        var nearestElementBounds:Rectangle;
        
        var viewportWidth:Number = isNaN(viewport.width) ? 0 : viewport.width;
        var viewportHeight:Number = isNaN(viewport.height) ? 0 : viewport.height;

        if (scrollSnappingMode == ScrollSnappingMode.NONE && pageScrollingEnabled)
        {
            // If we're in paging mode and no snapping is enabled, then we must snap
            // the position to the beginning of a page.  i.e. a multiple of the 
            // viewport size.
            var offset:Number;
            if (canScrollHorizontally && propertyName == HORIZONTAL_SCROLL_POSITION && viewportWidth != 0)
            {
                // Get the offset into the current page.  If less than half way, snap
                // to the beginning of the page.  Otherwise, snap to the beginning
                // of the next page
                offset = position % viewportWidth;
                if (offset < viewportWidth / 2)
                    position -= offset;
                else
                    position += viewportWidth - offset;
            }
            else if (canScrollVertically && propertyName == VERTICAL_SCROLL_POSITION && viewportHeight != 0)
            {
                offset = position % viewportHeight;
                if (offset < viewportHeight / 2)
                    position -= offset;
                else
                    position += viewportHeight - offset;
            }
        }
        
        if (layout && layout.target.numElements > 0)
        {
            switch (_scrollSnappingMode)
