       #   direction. Note that the direction data structure must be an array of
       #   `components`, and conventionally with top/bottom first.
       defaultDirection: ['bottom', 'right']
+      # - `fireEvents` can be enabled to allow `show.hlf.tip` and `shown.hlf.tip`,
+      #   `hide.hlf.tip` and `hidden.hlf.tip` events to be triggered from the
+      #   trigger elements. This is off by default to improve performance.
+      fireEvents: on
       # - `tipTemplate` should return interpolated html when given the
       #   additional container class list. Its context is the plugin instance.
       tipTemplate: (containerClass) ->

      deferred = $.Deferred()
      promise = deferred.promise()
      @_setCurrentTrigger $trigger

      # - Go directly to the position updating if no toggling is needed.
      updateBeforeWake = =>
        @_positionToTrigger $trigger, event
        @onShow event # Hook in custom logic.
      if @_state is 'awake'
        @debugLog 'quick update'
        updateBeforeWake()

      @_state = state
      @debugLog @_state
      switch state
        when 'asleep'
          @_$currentTrigger?.trigger @evt('hidden') if @fireEvents is on
          @afterHide.apply @, data
        when 'awake'
          @_$currentTrigger?.trigger @evt('shown') if @fireEvents is on
          @afterShow.apply @, data
        when 'sleeping'
          @_$currentTrigger?.trigger @evt('hide') if @fireEvents is on
          clearTimeout @_wakeCountdown
        when 'waking'
          @_$currentTrigger?.trigger @evt('show') if @fireEvents is on
          clearTimeout @_sleepCountdown
          @_triggerChanged = yes

