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

     *  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.

        {
            selectedItem = grid.dataProvider.getItemAt(rowIndex);
        }
    }

    /**
     *  @private
     *  This should only be used for setCellRegion.  The selection should
     *  be cleared first.  This will add a cellRegion to the list of cellRegions.
     *  This allows the special-handling needed for setting a cell region 
     *  which has one of more columns which are not visible and not to be
     *  included in the selection.
     *  
     *  The code is not equipped to handle the general case of overlapping
     *  cell regions.
     */
    private function internalAddCellRegion(rowIndex:int, columnIndex:int=0, 
                                           rowCount:uint=1, columnCount:uint=1):void
    {
        const cr:CellRect = 
            new CellRect(rowIndex, columnIndex, rowCount, columnCount, true);
        
        cellRegions.push(cr);
        
        _selectionLength += rowCount * columnCount;
    }

    /**
