             @cells[row + '-' + column]?.setModel(@getCellObjectAtPosition([row, column]))
 
       for column in [intactFirstColumn...intactLastColumn]
-        @headerCells[column]?.setModel({column: columns[column], index: column})
+        if @wholeTableIsDirty or @dirtyColumns[column]
+          @headerCells[column]?.setModel({
+            column: columns[column],
+            index: column
+          })
 
     @firstRenderedRow = firstRow
     @lastRenderedRow = lastRow

    @dirtyPositions ?= []
    @dirtyPositions[position.row] ?= []
    @dirtyPositions[position.row][position.column] = true

  markDirtyCells: (positions) ->
    @markDirtyCell(position) for position in positions

    @lastRenderedColumn = lastColumn
    @hasChanged = false
    @dirtyPositions = null
    @dirtyColumns = null
    @wholeTableIsDirty = false

  updateWidthAndHeight: ->
