         if (columnIndex >= columnsLength)
             return null;
         
+        const column:GridColumn = columns.getItemAt(columnIndex) as GridColumn;
+        if (!column.visible)
+            return null;
+        
         const paddingLeft:Number = columnHeaderBar.getStyle("paddingLeft");
         const paddingRight:Number = columnHeaderBar.getStyle("paddingRight");
         const paddingTop:Number = columnHeaderBar.getStyle("paddingTop");
         const paddingBottom:Number = columnHeaderBar.getStyle("paddingBottom");
         
-        var isLastColumn:Boolean = columnIndex == (columnsLength - 1);  // TBD(hmuller): last VISIBLE column
+        var isLastColumn:Boolean = columnIndex == grid.getPreviousVisibleColumnIndex(columnsLength);
         var rendererX:Number = grid.getCellX(0, columnIndex) + paddingLeft;
         const rendererY:Number = paddingTop;
         var rendererWidth:Number = grid.getColumnWidth(columnIndex); 

            
            // layout the renderer
            
            var isLastColumn:Boolean = columnIndex == (columnsLength - 1);  // TBD(hmuller): last VISIBLE column
            var rendererX:Number = grid.getCellX(0, columnIndex) + paddingLeft;
            var rendererWidth:Number = grid.getColumnWidth(columnIndex); 


            if (index < visibleColumnIndices.length)
                columnIndex = visibleColumnIndices[index];
            else
                columnIndex = grid.getNextVisibleColumnIndex(columnIndex);
           
            if (columnIndex < 0 || columnIndex >= columnsLength)
                break;

            column = columns.getItemAt(columnIndex) as GridColumn;
