      *  approximate when variableRowHeight=true, so calling this method once will
      *  not necessarily scroll far enough to expose the specified element.
      */
-    private function scrollToIndex(elementIndex:int, scrollHorizontally:Boolean):void
+    private function scrollToIndex(elementIndex:int, scrollHorizontally:Boolean, scrollVertically:Boolean):void
     {
         var spDelta:Point = gridLayout.getScrollPositionDeltaToElement(elementIndex);
         if (!spDelta)

     */
    private function dataProvider_collectionChangeHandler(event:CollectionEvent):void
    {
        if (gridDimensions)
            gridDimensions.dataProviderCollectionChanged(event);
        

     *  @playerversion AIR 2.0
     *  @productversion Flex 4.5
     */
    public function ensureCellIsVisible(rowIndex:int = -1, columnIndex:int = -1):void
    {
        const columns:IList = this.columns;
        
        // Check that each index is within range.
        if (!columns || columnIndex < -1 || columnIndex >= columns.length || 
            !dataProvider || rowIndex < -1 || rowIndex >= dataProvider.length || 
            (columnIndex == -1 && rowIndex == -1))
            return;
        
        // Check to see if any columns are visible or specified column is visible.
        if ((columnIndex == -1 && getNextVisibleColumnIndex(-1) == -1) || 
            (columnIndex != -1 && !(GridColumn(columns.getItemAt(columnIndex)).visible)))
            return;
        
        const columnsLength:int = columns.length;
        const scrollHorizontally:Boolean = columnIndex != -1;
        const scrollVertically:Boolean = rowIndex != -1;

        // When not scrolling horizontally, columnIndex can just be 0.
        if (!scrollHorizontally)
            columnIndex = 0;
        
        // If the row index isn't specified, use the first one that's visible.
        if (!scrollVertically)
        {
            const visibleRowIndices:Vector.<int> = this.getVisibleRowIndices();
            rowIndex = (visibleRowIndices.length > 0) ?  visibleRowIndices[0] : 0;
        }

        // A cell's index as defined by LayoutBase it's just its position
        // in the row-major linear ordering of the grid's cells.  
        const elementIndex:int = (rowIndex * columnsLength) + columnIndex;
        
        // Iterate until we've scrolled elementIndex at least partially into view.
        do
        {
            scrollToIndex(elementIndex, scrollHorizontally, scrollVertically);
            if (variableRowHeight || scrollHorizontally || scrollVertically)
                validateNow();
            else
                break;  // fixed row heights, and we're only scrolling vertically
