         # if user cancel compose, component may be unmounted when the timeout
         # is fired
         if @isMounted()
-            state = {}
-            # close suggestion list
-            state.open = false
             # Add current value to list of addresses
             value = @refs.contactInput.getDOMNode().value
-
-            if value.trim() isnt ''
+            unless _.isEmpty value.trim()
                 address = MessageUtils.parseAddress value
-
                 if address.isValid
-                    @state.known.push address
-                    state.known   = @state.known
-                    state.unknown = ''
-                    @props.valueLink.requestChange state.known
-                    @setState state
-
+                    @update address
                 else
                     # Trick to make sure that the alert error is not pop up
                     # twiced due to multiple blur and key down.

        onChange = (event) =>
            value = event.target.value.split ','
            if value.length is 2
                known = _.clone @state.known
                known.push(MessageUtils.parseAddress value[0])
                @props.valueLink.requestChange known
                @setState unknown: value[1].trim()
            else
                @setState unknown: event.target.value

        onInput = (event) =>
            input = @refs.contactInput.getDOMNode()

        state.selected = 0
        state.open     = false
        state.focus    = !!state.known.length
        state

    # Code from the StoreWatch Mixin. We don't use the mixin
    # because we store other things into the state
