     @disposables.add @process.onBackendIdle ->
       upi.setStatus status: 'ready'
 
+    unless atom.config.get 'haskell-ghc-mod.useLinter'
+      upi.setMenu 'ghc-mod', [
+        {label: 'Check', command: 'haskell-ghc-mod:check-file'}
+        {label: 'Lint', command: 'haskell-ghc-mod:lint-file'}
+      ]
+    else
+      upi.setMenu 'ghc-mod', [
+        {label: 'Check', command: 'linter:lint'}
+      ]
+
     upi.setMenu 'ghc-mod', [
-      {label: 'Check', command: 'haskell-ghc-mod:check-file'}
-      {label: 'Lint', command: 'haskell-ghc-mod:lint-file'}
       {label: 'Stop Backend', command: 'haskell-ghc-mod:shutdown-backend'}
     ]
 

        @process.doLintBuffer(buffer, fast).then (res) ->
          setMessages res, ['lint']

    @disposables.add upi.onDidSaveBuffer (buffer) ->
      checkLint buffer, 'Save'

    @disposables.add upi.onDidStopChanging (buffer) ->
      checkLint buffer, 'Change', true


    @disposables.add @process.onBackendActive ->

    return unless atom.config.get 'haskell-ghc-mod.useLinter'
    [
      func: 'doCheckBuffer'
      lintOnFly: 'onChangeCheck'
      enabledConf: 'onSaveCheck'
    ,
      func: 'doLintBuffer'
      lintOnFly: 'onChangeLint'
      enabledConf: 'onSaveLint'
    ].map ({func, lintOnFly, enabledConf}) =>
      linter =
      grammarScopes: ['source.haskell', 'text.tex.latex.haskell']
      scope: 'file'
      lintOnFly: false
      lint: (textEditor) =>
        return unless @process?
        return unless atom.config.get("haskell-ghc-mod.#{enabledConf}") or
          atom.config.get("haskell-ghc-mod.#{lintOnFly}")
        return if textEditor.isEmpty()
        @process[func](textEditor.getBuffer(), lintOnFly).then (res) ->
          res.map ({uri, position, message, severity}) ->
            [message, messages...] = message.split /^(?!\s)/gm
            {
              type: severity
              text: message.replace(/\n+$/, '')
              filePath: uri
              range: [position, position.translate [0, 1]]
              trace: messages.map (text) ->
                type: 'trace'
                text: text.replace(/\n+$/, '')
            }

      # NOTE: some pretty gnarly hacks here...
      disp = atom.config.observe "haskell-ghc-mod.#{lintOnFly}", (value) ->
        linter.lintOnFly = value

      Object.observe linter, ->
        if linter.deactivated
          disp.dispose()

      return linter
