     endBufferRow = newRange.end.row + (endBufferRow - oldRange.end.row)
 
     oldRowExtent = endScreenRow - startScreenRow
-    newScreenLines = @buildSpatialScreenLines(startBufferRow, endBufferRow)
-    newRowExtent = newScreenLines.length
-    @spliceDisplayIndex(startScreenRow, oldRowExtent, newScreenLines)
+    {spatialScreenLines} = @buildSpatialScreenLines(startBufferRow, endBufferRow)
+    newRowExtent = spatialScreenLines.length
+    @spliceDisplayIndex(startScreenRow, oldRowExtent, spatialScreenLines)
+    @indexedBufferRowCount += change.newRange.end.row - change.oldRange.end.row
 
     start = Point(startScreenRow, 0)
     oldExtent = Point(oldRowExtent, 0)

      "\r\n": @invisibles.cr + @invisibles.eol
    }

    {startScreenRow, endScreenRow} = @expandBufferRangeToLineBoundaries(Range(Point.ZERO, Point(@buffer.getLineCount(), 0)))
    newLines = @buildSpatialScreenLines(0, @buffer.getLineCount())
    oldRowExtent = endScreenRow - startScreenRow
    newRowExtent = newLines.length
    @spliceDisplayIndex(startScreenRow, oldRowExtent, newLines)
    @emitDidChangeSyncEvent Object.freeze([{
      start: Point(startScreenRow, 0),
      oldExtent: Point(oldRowExtent, 0),
      newExtent: Point(newRowExtent, 0)
    }])
    @notifyObserversIfMarkerScreenPositionsChanged()

  addMarkerLayer: (options) ->
    markerLayer = new DisplayMarkerLayer(this, @buffer.addMarkerLayer(options), true)

    }

  getScreenLineCount: ->
    @computeSpatialScreenLinesThroughBufferRow(Infinity)
    @displayIndex.getScreenLineCount()

  getRightmostScreenPosition: ->
    @computeSpatialScreenLinesThroughBufferRow(Infinity)
    @displayIndex.getScreenPositionWithMaxLineLength() or Point.ZERO

  lineLengthForScreenRow: (screenRow) ->
    @computeSpatialScreenLinesThroughScreenRow(screenRow)
    @displayIndex.lineLengthForScreenRow(screenRow) or 0
