         if (!columns || (columns.length <= columnIndex))
             return null;
         const column:GridColumn = grid.columns.getItemAt(columnIndex) as GridColumn;
+        if (!column.visible)
+            return null;
         
         var factory:IFactory = column.headerRenderer;
         if (!factory)

        if (columnIndex == -1)
            return -1;
        
        const isFirstColumn:Boolean = columnIndex == 0;  // TBD first VISIBLE column
        const isLastColumn:Boolean = columnIndex == (grid.columns.length - 1); // TBD likewise
        
        const columnLeft:Number = grid.getCellX(0, columnIndex);
        const columnRight:Number = columnLeft + grid.getColumnWidth(columnIndex);
        const smw:Number = columnHeaderBar.separatorMouseWidth;
        
        if (!isFirstColumn && (x > (columnLeft - smw)) && (x < (columnLeft + smw)))
            return columnIndex - 1;  // TBD previous VISIBLE column
        
        if (!isLastColumn && (x > (columnRight - smw)) && (x < columnRight + smw))
            return columnIndex;

        const paddingTop:Number = columnHeaderBar.getStyle("paddingTop");
        const paddingBottom:Number = columnHeaderBar.getStyle("paddingBottom");
        
        const isLastColumn:Boolean = columnIndex == grid.getPreviousVisibleColumnIndex(columns.length);
        const rendererX:Number = grid.getCellX(0, columnIndex) + paddingLeft;
        const rendererY:Number = paddingTop;
        const rendererHeight:Number = columnHeaderBar.height - paddingTop - paddingBottom;
