         return mode == GridSelectionMode.SINGLE_CELL || 
                 mode == GridSelectionMode.MULTIPLE_CELLS;
     }     
+    
+    /**
+     *  @private
+     *  Assumes columns is set and index is valid.
+     */
+    private function isColumnVisible(columnIndex:int):Boolean
+    {
+        return GridColumn(grid.columns.getItemAt(columnIndex)).visible;
+    }
     
     /**
      *  @private

     *  The origin of the cell region is the cell location specified by
     *  <code>rowIndex</code> and <code>columnIndex</code>, the width is
     *  <code>columnCount</code> and the height is <code>rowCound</code>.
     * 
     *  @param rowIndex The 0-based row index of the origin.
     * 
     *  @param columnsIndex The 0-based column index of the origin.

        if (!validateCellRegion(rowIndex, columnIndex, 1, 1))
            return false;
        
        // columns and indexes validated above.
        const columnVisible:Boolean = isColumnVisible(columnIndex);
        if (columnVisible)
            internalAddCell(rowIndex, columnIndex);
        
        return columnVisible;
    }

    /**
