 
     Scopes = @Editor.scopeDescriptorForBufferPosition(@Editor.getCursorBufferPosition()).scopes
     Promises = @lintResults OnChange, Scopes
-    Promise.all(Promises).then (Results) =>
+    Promise.all(Promises).then =>
       @progress OnChange, false
-      Messages = []
-      for Result in Results
-        continue if (not Result) or (typeof Result) isnt 'object'
-        if Result instanceof Array
-          Messages = Messages.concat(Result)
-      if OnChange
-        @MessagesFly = Messages
-      else
-        @MessagesRegular = Messages
-      @Messages = @MessagesFly.concat(@MessagesRegular)
-      @Emitter.emit 'did-update', @Messages
-      @Linter.Messages = @Messages
-      @Linter.render() if @Editor is atom.workspace.getActiveTextEditor()
     .catch ->
       console.error arguments[0].stack
       @progress OnChange, false
   lintResults: (OnChange, Scopes) ->
     Promises = []
-    for Linter in @Linter.Linters
+    @Linter.Linters.forEach (Linter)=>
       return if OnChange and not Linter.lintOnFly
       return if (not OnChange) and Linter.lintOnFly
       return unless (Scopes.filter (Entry) -> Linter.scopes.indexOf(Entry) isnt -1 ).length
       Promises.push(
-        Linter.lint(@Editor, @Buffer, {
-          Error: LinterError,
-          Warning: LinterWarning,
-          Trace: LinterTrace
-        })
+        (
+          new Promise (Resolve)=>
+            RetVal = Linter.lint(@Editor, @Buffer, {
+              Error: LinterError,
+              Warning: LinterWarning,
+              Trace: LinterTrace
+            })
+            if RetVal instanceof Promise
+              RetVal.then (Results)=>
+                @Messages[Linter] = Results if Results instanceof Array
+                Resolve()
+              .catch (Error)->
+                delete @Messages[Linter] # Because it's emitting errors, it's messages will never be replaced unless we do so
+                atom.notifications.addError "#{Error.message}", {detail: Error.stack, dismissable: true}
+                Resolve()
+            else
+              @Messages[Linter] = RetVal if RetVal instanceof Array
+              Resolve()
+        ).then =>
+          Messages = @getMessages()
+          @Emitter.emit 'did-update', Messages
+          @Linter.Messages = Messages
+          @Linter.render() if @Editor is atom.workspace.getActiveTextEditor()
       )
     Promises
 

        @InProgressFly = newValue
      else
        @InProgress = newValue
  destroy: ->
    @Emitter.emit 'did-destroy'
    @Subscriptions.dispose()

    @Subscriptions.add(@Editor.onDidSave @lint.bind(@, false))
    @Subscriptions.add(@Editor.onDidStopChanging @lint.bind(@, true))
    @Subscriptions.add(@Editor.onDidChangeCursorPosition ({newBufferPosition}) =>
      @Linter.Messages = @getMessages()
      @Linter.View.updateBubble newBufferPosition
    )

