       #
       # Note we may receive multiple unread msgs for the same thread.
       # Using a map and ?= to avoid repeating work.
-      @threads = {}
+      threads = {}
       for msg in newUnread
-        @threads[msg.threadId] ?= _.findWhere(incomingThreads, {id: msg.threadId})
-        @threads[msg.threadId] ?= DatabaseStore.find(Thread, msg.threadId)
+        threads[msg.threadId] ?= _.findWhere(incomingThreads, {id: msg.threadId})
+        threads[msg.threadId] ?= DatabaseStore.find(Thread, msg.threadId)
 
-      Promise.props(@threads).then (threads) =>
-
+      Promise.props(threads).then (threads) =>
         # Filter new unread messages to just the ones in the inbox
         newUnreadInInbox = _.filter newUnread, (msg) ->
           threads[msg.threadId]?.hasCategoryName('inbox')

    @unlisteners = []
    @unlisteners.push Actions.didPassivelyReceiveNewModels.listen(@_onNewMailReceived, @)
    @activationTime = Date.now()

  deactivate: ->
    fn() for fn in @unlisteners

  serialize: ->

  _notifyMessage: (msg) ->
    body = msg.subject
    if not body or body.length is 0
      body = msg.snippet
    from = msg.from[0]?.displayName() ? "Unknown"
    notif = new Notification(from, {
      body: body
      tag: 'unread-update'
    })

    notif.onclick = =>
      atom.displayWindow()
      Actions.focusCategory(CategoryStore.getStandardCategory("inbox"))
      Actions.setFocus(collection: 'thread', item: @threads[msg.threadId])

  _notifyMessages: (msgs) ->

    return if msgs.length is 0
    @_notifyMessage(msgs.pop())
    setTimeout (=> @_notifyMessages msgs), 2000

  _onNewMailReceived: (incoming) ->
    new Promise (resolve, reject) =>

        return resolve() if newUnreadInInbox.length is 0
        atom.playSound('new_mail.ogg')

        for msg in newUnreadInInbox
          @stack.push({message: msg, thread: threads[msg.threadId]})
        if not @stackProcessTimer
          @_notifyMessages()

        resolve()
