 
   componentWillUnmount: =>
     @_mutationObserver.disconnect()
-    @_teardownListeners()
+    @_teardownNonMutationListeners()
     @_teardownServices()
 
   setInnerState: (innerState={}) =>

      previousExportedSelection: @innerState.exportedSelection

  _restoreSelection: =>
    @_teardownListeners()
    selection = new ExtendedSelection(@_editableNode())
    selection.importSelection(@innerState.exportedSelection)
    if selection.isInScope()
      @_onSelectionChanged(selection)
    @_setupListeners()

  # When the component updates, the selection may have changed from our
  # last known saved position. This can happen for a couple of reasons:

      @_runExtensionMethod(extension, method, argsObj)

  _runExtensionMethod: (extension, method, argsObj={}) =>
    return if @_inCompositionEvent
    return if not extension[method]?
    editingFunction = extension[method].bind(extension)
    @atomicEdit(editingFunction, argsObj)
