           {retain: selection_length, attributes: attrs}
         ]
 
-      this.lock_editor_propagation = false
-
     # update the editor when the cursor is moved
-    @_get("cursors").observe (events)=>
-      if this.lock_editor_propagation
-        # break, if lock is on
-        return
-      this.lock_editor_propagation = true
-
+    @_get("cursors").observe (events) => locker @, events, (events) =>
       for event in events
         author = event.changedBy
         position = event.object.val(author)

  # pass deltas to the character instance
  # @param deltas [Array<Object>] an array of deltas (see ot-types for more info)
  passDeltas : (deltas) => # TODO: don't bind to $this
    if this.lock_editor_propagation
      # break, if lock is on
      return
    this.lock_editor_propagation = true
    position = 0
    for delta in deltas.ops
      position = @deltaHelper delta, position
    this.lock_editor_propagation = false

  # @override updateCursorPosition(index)
  #   update the position of our cursor to the new one using an index

          delta.ops.push {delete: 1}

        @editor.updateContents delta

    # update the editor when something on the $selections happens
    @_get("selections").observe (event)=> locker @, event, (event) =>
      attrs = {}
      if event.type is "select"
        for attr,val of event.attrs
