           displayAttr: @_itemDisplayText(model)
         }, model.attributes
 
-      @resultsPopover.on "item:selected", (model) ->
+      @resultsPopover.on 'item:selected', (model) ->
         model = if _.isString(model) then @_buildFallbackToken(model) else model
         @insertToken(model)
-        @$input?.val("")
+        @$input?.val('')
       , this
 
       @matcher = new Exo.Matcher
         filterAttribute: @filterAttribute
+
+      @on 'destroyed', @_destroyed
+      @on 'keypress', =>
+        @inputPlaceholder.style.display = if @_shouldShowPlaceholder() then 'block' else 'none'
+
+      this
+
+
+    #-----------------------------------------------------------------------------
+    # Instance Methods
+    #-----------------------------------------------------------------------------
 
     setSource: (source) ->
       @matcher.setSource(source)

    addSource: (source) ->
      @matcher.addSource(source)

    handleKeyUp: (key, e) ->
      switch key
        when "up"
          return false # Prevent re-rendering when navigating auto-completer
        when "down"
          # Buggy..
          if @showAllOnDownArrow && @input.value == "" && !@resultsPopover.visible
            @_showResultsPopover()
          else
            return false


      super


    #-----------------------------------------------------------------------------
    # Private Methods
    #-----------------------------------------------------------------------------

    # @returns {boolean}
    _shouldShowResultsPopover: (query) ->
      !@_maxTokensExceeded() && @_queryMeetsMinLength(query)

    # @returns {boolean}
    _shouldAddFallbackToken: (model, results) ->
      !@_tokenExists(model) && !(results[0]?.score == 1.0)

    # @returns {boolean}
    _shouldShowPlaceholder: (event) ->
      @_collection.length || /[^\s]+/.test(@input.value)


    #-----------------------------------------------------------------------------
    # Event Handlers
    #-----------------------------------------------------------------------------

    _blur: (event) ->
      super
      @_hideResultsPopover()

    _destroyed: =>
      @resultsPopover.off(null, null, this)
      @resultsPopover = null

    _queryEntered: (query) ->
      if @_shouldShowResultsPopover(query)
