       # Infer `doStem` and `doFollow` flags from respective `classNames` entries.
       @doStem = @classNames.stem isnt ''
       @doFollow = @classNames.follow isnt ''
-      # `_state` toggles between: `awake`, `asleep`, `waking`, `sleeping`. The
-      # use case behind these states is the tip will remain visible and `awake`
-      # as long as there is a high enough frequency of relevant mouse activity.
-      # This is achieved with a simple base implementation around timers
-      # `_sleepCountdown` and `_wakeCountdown`.
-      @_state = 'asleep'
+      # Updated with `_setState`, `_state` toggles between: `awake`, `asleep`,
+      # `waking`, `sleeping`. The use case behind these states is the tip will
+      # remain visible and `awake` as long as there is a high enough frequency
+      # of relevant mouse activity. This is achieved with a simple base
+      # implementation around timers `_sleepCountdown` and `_wakeCountdown`.
+      @_setState 'asleep'
       @_wakeCountdown = null
       @_sleepCountdown = null
       # `_$currentTrigger` helps manage trigger-related state.

            onWake() if onWake?
          if @safeToggle is on then @$tip.siblings(@classNames.tip).fadeOut()
          @afterShow triggerChanged, event
          @_state = 'awake'
      # Wake up depending on current state.  
      # If we are in the middle of sleeping, stop sleeping by updating
      # `_sleepCountdown` and wake up sooner.

      # Start the normal wakeup and update `_wakeCountdown`.
      else if event? and event.type is 'truemouseenter'
        triggerChanged = yes
        @_setState 'waking'
        @_wakeCountdown = setTimeout wake, delay
      yes

