     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)

    bufferPosition = @buffer.clipPosition(bufferPosition, options)
    clipDirection = options?.clipDirection

    @spatialTokenIterator.seekToBufferPosition(bufferPosition)

    if @spatialTokenIterator.getMetadata() & SOFT_LINE_BREAK or @spatialTokenIterator.getMetadata() & SOFT_WRAP_INDENTATION

      bufferRow += 1
      bufferColumn = 0
      screenColumn = 0
      spatialScreenLines.push({
        screenExtent: tokensScreenExtent,
        bufferExtent: traversal(Point(bufferRow, bufferColumn), screenLineBufferStart),
        tokens,
