         
         if (scrollHorizontally)
             horizontalScrollPosition += spDelta.x;
-        verticalScrollPosition += spDelta.y;
+        if (scrollVertically)
+            verticalScrollPosition += spDelta.y;
     }
     
     /**
      *  If necessary, set the verticalScrollPosition and horizontalScrollPosition 
-     *  properties so that the specified cell is completely visible.  If columnIndex
-     *  is -1, then just adjust the verticalScrollPosition so that the specified
+     *  properties so that the specified cell is completely visible. If rowIndex
+     *  is -1 and columnIndex is specified, then just adjust the horizontalScrollPosition
+     *  so that the specified column is visible. If columnIndex is -1 and rowIndex
+     *  is specified, then just adjust the verticalScrollPosition so that the specified
      *  row is visible.
      * 
-     *  @param rowIndex The 0-based row index of the item renderer's cell.
+     *  @param rowIndex The 0-based row index of the item renderer's cell, or -1 to specify a column.
      *  @param columnIndex The 0-based column index of the item renderer's cell, or -1 to specify a row.
      *  
      *  @langversion 3.0

     *  @playerversion AIR 2.0
     *  @productversion Flex 4.5
     */        
    public function isCellVisible(rowIndex:int, columnIndex:int = -1):Boolean
    {
        return gridLayout.isCellVisible(rowIndex, columnIndex);
    }

     *  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, scrollVertically:Boolean):void
    {
        var spDelta:Point = gridLayout.getScrollPositionDeltaToElement(elementIndex);
        if (!spDelta)
