       @linters.lint({onChange, editorLinter})
     editorLinter.onDidDestroy =>
       editorLinter.deactivate()
-      @editorLinters.delete(editor)
       @messages.deleteEditorMessages(editor)
 
   deactivate: ->
     @subscriptions.dispose()
-    @eachEditorLinter (linter) ->
-      linter.deactivate()
     @views.destroy()
+    @editors.deactivate()
     @linters.deactivate()
     @commands.destroy()
     @messages.deactivate()

    @deleteMessages(linter)

  getActiveEditorLinter: ->
    @getEditorLinter atom.workspace.getActiveTextEditor()

  getEditorLinter: (editor) ->
    @editorLinters.get editor

  eachEditorLinter: (callback) ->
    @editorLinters.forEach(callback)

  observeEditorLinters: (callback) ->
    @eachEditorLinter callback
    @emitter.on 'observe-editor-linters', callback

  createEditorLinter: (editor) ->
    editorLinter = new EditorLinter(editor)
    @editorLinters.set editor, editorLinter
    @emitter.emit 'observe-editor-linters', editorLinter
    editorLinter.onShouldUpdateBubble =>
      @views.renderBubble()

    # Private Stuff
    @subscriptions = new CompositeDisposable
    @emitter = new Emitter
    @linters = new (require('./linter-registry'))()
    @editors = new (require('./editor-registry'))()
    @messages = new (require('./messages'))()
    @views = new LinterViews(this)
    @commands = new Commands(this)
