         return new Rectangle(x, y, width, height);
     }
     
-    private function getCellX(row:int, col:int):Number
+    /**
+     *  Returns the X coordinate of the origin of the specified cell.
+     */
+    public function getCellX(row:int, col:int):Number
     {
         if (!_columnWidths)
             return col * (defaultColumnWidth + columnGap);

    private var startY:Number = 0;
    private var recentNode:GridRowNode = null;
    
    //--------------------------------------------------------------------------
    //
    //  Constructor

        
        return height + ((nRows - numRows) * (defaultRowHeight) + (nRows - 1) * rowGap);
    }
    
    /**
     *  Return the preferred bounds width of the grid's typicalItem when rendered with the item renderer 
     *  for the specified column.  If no value has yet been specified, return NaN.
     */
    public function getTypicalCellWidth(columnIndex:int):Number
    {
        return typicalCellWidths[columnIndex];
    }
    
    /**
     *  Sets the preferred bounds width of the grid's typicalItem for the specified column.
     */
    public function setTypicalCellWidth(columnIndex:int, value:Number):void
    {
        typicalCellWidths[columnIndex] = value;
    }
    
    /**
     *  Return the preferred bounds height of the grid's typicalItem when rendered with the item renderer 
     *  for the specified column.  If no value has yet been specified, return NaN.
     */    
    public function getTypicalCellHeight(columnIndex:int):Number
    {
        return typicalCellHeights[columnIndex];
    }
    
    /**
     *  Sets the preferred bounds height of the grid's typicalItem for the specified column.
     */    
    public function setTypicalCellHeight(columnIndex:int, value:Number):void
    {
        typicalCellHeights[columnIndex] = value;
    }
        
    /**
     *  Inserts count number of rows starting from startRow. This shifts
     *  any rows after startRow down by count and will increment 
