 
     ready = Zotero.Promise.defer()
     module.exports.ready = ready.promise
-    bench.start = new Date()
-
-    # progressWin = new Zotero.ProgressWindow({ closeOnClick: false })
-
-    # progressWin.changeHeadline('BetterBibTeX: Waiting for Zotero database')
-    # progressWin.show()
 
     # oh FFS -- datadir is async now
 
     lock = new Lock()
-    yield lock.lock('BetterBibTeX: Waiting for Zotero database...')
+    yield lock.lock('Waiting for Zotero database')
 
     CACHE.init()
-    bench('Zotero.uiReadyPromise')
 
     # Zotero startup is a hot mess; https://groups.google.com/d/msg/zotero-dev/QYNGxqTSpaQ/uvGObVNlCgAJ
     yield Zotero.Schema.schemaUpdatePromise
-    bench('Zotero.Schema.schemaUpdatePromise')
-
-    # progressWin.changeHeadline('BetterBibTeX: Initializing')
-    lock.update('BetterBibTeX: Initializing...')
-
+
+    lock.update('Loading database')
     yield DB.init()
-    bench('DB.init()')
-
+
+    lock.update('Starting Auto Export')
     AutoExport.init()
-    bench('AutoExport.init()')
-
+
+    lock.update('Starting Key Manager')
     yield KeyManager.init() # inits the key cache by scanning the DB
-    bench('KeyManager.init()')
-
+
+    lock.update('Starting Serialization Cache')
     yield Serializer.init() # creates simplify et al
-    bench('Serializer.init()')
 
     if Prefs.get('testing')
+      lock.update('Loading Test Support')
       module.exports.TestSupport = require('./test/support.coffee')
-      bench('Zotero.BetterBibTeX.TestSupport')
     else
       debug('starting, skipping test support')
 
+    lock.update('Loading Journal Abbreviator')
     JournalAbbrev.init()
 
+    lock.update('Loading Translators')
     yield Translators.init()
-    bench('Translators.init()')
-
-    # progressWin.changeHeadline('BetterBibTeX: Ready for business')
-    # progressWin.startCloseTimer(500)
 
     # should be safe to start tests at this point. I hate async.
 
     ready.resolve(true)
-    bench('ready')
 
     lock.unlock()
 

  class Lock
    postfix: '-better-bibtex-locked'

    lock: Zotero.Promise.coroutine((msg)->
      #@decks = {}
      #for id in [ 'zotero-items-pane-content', 'zotero-item-pane-content' ]
      #  @decks[id] = {
      #    element: document.getElementById(id)
      #    id: id
      #  }
      #  @decks[id].selected = @decks[id].element.selectedIndex
      #  do (deck = @decks[id]) =>
      #    @hide(deck.element)
      #    deck.observer = new MutationObserver((mutations) => @hide(deck.element))
      #    deck.observer.observe(deck.element, {attributes: true, childList: true})
      #    return

      yield Zotero.uiReadyPromise

      yield Zotero.unlockPromise if Zotero.locked

      Zotero.showZoteroPaneProgressMeter(msg || 'Initializing Better BibTeX...')

      @toggle(true)

      return
    )

    update: (msg) ->
      Zotero.showZoteroPaneProgressMeter(msg)
      return

    unlock: ->
      #return unless @decks

      #for id, deck of @decks
      #  deck.observer.disconnect()
      #  deck.element.selectedIndex = deck.selected
      #  deck.element.removeChild(document.getElementById(id + @postfix))
      #@decks = null

      Zotero.hideZoteroPaneOverlays()

      @toggle(false)

      return

    INIT
  ###

  module.exports.ErrorReport = Zotero.Promise.coroutine((includeReferences) ->
    debug('ErrorReport::start', includeReferences)
    items = null
