   updateCursorsState: ->
     @state.content.cursors = {}
 
+    @updateCursorState(cursor) for cursor in @model.cursors # using property directly to avoid allocation
+
+    @emitter.emit 'did-update-state'
+
+
+  updateCursorState: (cursor, destroyOnly = false) ->
+    delete @state.content.cursors[cursor.id]
+
+    return if destroyOnly
     return unless @startRow? and @endRow? and @hasPixelRectRequirements() and @baseCharacterWidth?
-
-    for cursor in @model.cursors # using property directly to avoid allocation
-      if cursor.isVisible() and @startRow <= cursor.getScreenRow() < @endRow
-        pixelRect = @pixelRectForScreenRange(cursor.getScreenRange())
-        pixelRect.width = @baseCharacterWidth if pixelRect.width is 0
-        @state.content.cursors[cursor.id] = pixelRect
-
-    @emitter.emit 'did-update-state'
+    return unless cursor.isVisible() and @startRow <= cursor.getScreenRow() < @endRow
+
+    pixelRect = @pixelRectForScreenRange(cursor.getScreenRange())
+    pixelRect.width = @baseCharacterWidth if pixelRect.width is 0
+    @state.content.cursors[cursor.id] = pixelRect
 
   updateOverlaysState: ->
     return unless @hasPixelRectRequirements()

    @observeCursor(cursor)
    @updateHiddenInputState()
    @pauseCursorBlinking()
    @updateCursorsState()

  startBlinkingCursors: ->
    @toggleCursorBlinkHandle = setInterval(@toggleCursorBlink.bind(this), @getCursorBlinkPeriod() / 2)

    didChangePositionDisposable = cursor.onDidChangePosition =>
      @updateHiddenInputState() if cursor.isLastCursor()
      @pauseCursorBlinking()
      @updateCursorState(cursor)

    didChangeVisibilityDisposable = cursor.onDidChangeVisibility =>
      @updateCursorState(cursor)

    didDestroyDisposable = cursor.onDidDestroy =>
      @disposables.remove(didChangePositionDisposable)
      @disposables.remove(didChangeVisibilityDisposable)
      @disposables.remove(didDestroyDisposable)
      @updateHiddenInputState()
      @updateCursorState(cursor, true)

    @disposables.add(didChangePositionDisposable)
    @disposables.add(didChangeVisibilityDisposable)
