   onClickUser: (e) =>
     e.preventDefault()
     e.stopPropagation()
-
-    @$el.hide()
-
-    { start, end } = @workingToken
-    text = @$input.val()
-    slug = $(e.currentTarget).data('slug')
-    newText = text.slice(0, start + 1) + slug + text.slice(end)
-    caretPosition = start + 1 + slug.length
-
-    @$input.val(newText)
-    @$input[0].setSelectionRange(caretPosition, caretPosition)
+    @onSelectUser(e.currentTarget)
 
   bindInputEvents: =>
     @$input.on('focus.mq', @onFocus)
     @$input.on('blur.mq', @onBlur)
-    @$input.on('keyup.mq', @setState)
-    @$input.on('click.mq', @setState)
+    @$input.on('keyup.mq', @onKeyUp)
+    @$input.on('keydown.mq', @onKeyDown)
+    @$input.on('click.mq', @extractWorkingToken)
 
   onFocus: =>
     @active = true

    @active = false
    @setVisibility()

  setState: =>
    cursorStart = @$input[0].selectionStart
    cursorEnd = @$input[0].selectionEnd


      users: @results.toJSON()

  dispose: ->
    @$input.off('focus.mq blur.mq keyup.mq click.mq keydown.mq')
    @$input = null
    @$container = null
    @undelegateEvents()
