 
   # Public: Clean up, stop listening to events
   dispose: ->
-    @editorSubscription?.dispose()
-    @editorSubscription = null
-    @bufferSavedSubscription?.dispose()
-    @bufferSavedSubscription = null
-    @bufferChangedSubscription?.dispose()
-    @bufferChangedSubscription = null
-    @editorCursorMovedSubscription?.dispose()
-    @editorCursorMovedSubscription = null
+    @editorSubscriptions?.dispose()
+    @editorSubscriptions = null
     @suggestionList.destroy()
     @subscriptions.dispose()
     @emitter.emit('did-dispose')

  cursorMoved: (data) =>
    @hideSuggestionList() unless data.textChanged

  editorHasFocus: =>
    return false unless @editorView?
    editorView = @editorView
    editorView = editorView[0] if editorView.jquery
    return editorView.hasFocus()

  # Private: Gets called when the user saves the document. Cancels the
  # autocompletion.
  bufferSaved: =>
    return unless @editorHasFocus()
    @hideSuggestionList()

  # Private: Cancels the autocompletion if the user entered more than one

  # e - The change {Event}
  bufferChanged: (e) =>
    return if @suggestionList.compositionInProgress
    if atom.config.get('autocomplete-plus.enableAutoActivation') and (e.newText.trim().length is 1 or e.oldText.trim().length is 1)
      @contentsModified()
    else
