     @updateLineMessages()
 
     @renderPanel()
-    @tabs['file'].count = counts.file
-    @tabs['project'].count = counts.project
+    @tabs['File'].count = counts.file
+    @tabs['Project'].count = counts.project
     @bottomStatus.count = counts.project
 
   updateTabs: ->
-    visible = @getVisibleTabs()
     for key, tab of @tabs # for...of (key, value)
       tab.classList.remove('first')
       tab.classList.remove('last')
-      tab.visibility = visible.indexOf(key) isnt -1
+      tab.visibility = atom.config.get("linter.showErrorTab#{key}")
 
   # consumed in editor-linter, _renderPanel
   updateBubble: (point) ->

      @messages.forEach (message) =>
        if message.currentFile and message.range?.intersectsRow @currentLine
          @lineMessages.push message
      @tabs['line'].count = @lineMessages.length

  # This method is called when we get the status-bar service
  attachBottom: (statusBar) ->
    @statusTiles.push statusBar.addLeftTile
      item: @tabs['line'],
      priority: -1002
    @statusTiles.push statusBar.addLeftTile
      item: @tabs['file'],
      priority: -1001
    @statusTiles.push statusBar.addLeftTile
      item: @tabs['project'],
      priority: -1000
    statusIconPosition = atom.config.get('linter.statusIconPosition')
    @statusTiles.push statusBar["add#{statusIconPosition}Tile"]

    @statusTiles = []

    @tabs = {} # Object has methods that we need to perform certain operations, map won't be a good fit
    @tabs['Line'] = new BottomTab()
    @tabs['File'] = new BottomTab()
    @tabs['Project'] = new BottomTab()

    @panel = document.createElement 'div'
    @bubble = null
    @bottomStatus = new BottomStatus()

    @tabs['Line'].initialize 'Line', => @changeTab('line')
    @tabs['File'].initialize 'File', => @changeTab('file')
    @tabs['Project'].initialize 'Project', => @changeTab('project')

    @bottomStatus.initialize()
    @bottomStatus.addEventListener 'click', ->
