       }
       this.emit(MultiCursor.events.CURSOR_ADDED, cursor)
     _.defer( =>
-      this.moveCursor(userId, index, update)
+      this.moveCursor(userId, index)
     )
     return @cursors[userId]
 
-  shiftCursors: (index, length, authorId = null, update = true) ->
+  shiftCursors: (index, length, authorId = null) ->
     _.each(@cursors, (cursor, id) =>
       return unless cursor and (cursor.index > index or cursor.userId == authorId)
       cursor.index += Math.max(length, index - cursor.index)
-      cursor.dirty = true
     )
-    this.update() if update
 
-  update: (force = false) ->
+  update: ->
     _.each(@cursors, (cursor, id) =>
       return unless cursor?
-      this._updateCursor(cursor) if cursor.dirty or force
+      this._updateCursor(cursor)
       return true
     )
 
   _applyDelta: (delta) ->
     delta.apply((index, text, formatting) =>
-      this.shiftCursors(index, text.length, formatting['author'], false)
+      this.shiftCursors(index, text.length, formatting['author'])
     , (index, length) =>
-      this.shiftCursors(index, -1 * length, null, false)
+      this.shiftCursors(index, -1 * length, null)
     , (index, length, name, value) =>
-      this.shiftCursors(index, 0, null, false)
+      this.shiftCursors(index, 0, null)
     )
     this.update()
 

    this._moveCursor(cursor, guide)
    DOM.removeNode(guide)
    DOM.normalize(leaf.node.parentNode) if didSplit
    cursor.dirty = false
    @quill.editor.selection.update('silent')



    cursor.elem.parentNode.removeChild(cursor.elem) if cursor?
    delete @cursors[userId]

  setCursor: (userId, index, name, color) ->
    unless @cursors[userId]?
      @cursors[userId] = cursor = {
        userId: userId
