       @messages.forEach (message) =>
         if message.currentFile and message.range?.intersectsRow @currentLine
           @lineMessages.push message
-      @tabs['line'].count = @lineMessages.length
+      @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'],
+      item: @tabs['Line'],
       priority: -1002
     @statusTiles.push statusBar.addLeftTile
-      item: @tabs['file'],
+      item: @tabs['File'],
       priority: -1001
     @statusTiles.push statusBar.addLeftTile
-      item: @tabs['project'],
+      item: @tabs['Project'],
       priority: -1000
     statusIconPosition = atom.config.get('linter.statusIconPosition')
     @statusTiles.push statusBar["add#{statusIconPosition}Tile"]

      @tabs.forEach (tab, key) -> tab.active = Tab is key
      @renderPanel()
    @setShowPanel @showPanel

  getVisibleTabs: ->
    toReturn = []
    toReturn.push 'line' if atom.config.get('linter.showErrorTabLine')
    toReturn.push 'file' if atom.config.get('linter.showErrorTabFile')
    toReturn.push 'project' if atom.config.get('linter.showErrorTabProject')
    toReturn

  removeBubble: ->
    return unless @bubble

    @updateLineMessages()

    @renderPanel()
    @tabs['File'].count = counts.file
    @tabs['Project'].count = counts.project
    @bottomStatus.count = counts.project

  updateTabs: ->
    for key, tab of @tabs # for...of (key, value)
      tab.classList.remove('first')
      tab.classList.remove('last')
      tab.visibility = atom.config.get("linter.showErrorTab#{key}")

  # consumed in editor-linter, _renderPanel
  updateBubble: (point) ->
