   # Public: Attach view element to status bar and do initial setup.
   attach: ->
     @updateConfig()
-    @reattach()
+    @buildWidget()
     @handleEvents()
 
   # Public: Destroys and removes this element.
   destroy: ->
-    @stopTimer()
-    @clickSubscription?.dispose()
-    @tooltip?.dispose()
-    while @firstChild
-      @removeChild(@firstChild)
-    @tile?.destroy()
-    @tile = null
+    @destroyWidget()
+    @subscriptions?.dispose()
 
   # Public: Returns humanized remaining time string.
   formatTminus: (dt, fromTime) ->

          isWarning: @warnForTime(next, fromTime)
    return events

  # Private: Reattaches view element to status bar after toggling it back on.
  reattach: ->
    @tile = @statusBar?.addLeftTile(item: this, priority: 200)
    @setupLink()
    @startTimer()

  toggle: ->
    @visible = !@visible
    if @visible
      @buildWidget()
    else
      @destroyWidget()

  # Private: Removes all elements in main link widget.
  removeEvents: ->
