             open: @state.open and @state.contacts?.length > 0
         current    = 0
 
-        # inChrome, we need to cancel some events for drop to work
-        cancelDragEvent = (event) ->
+        # in Chrome, we need to cancel some events for drop to work
+        cancelDragEvent = (event) =>
             event.preventDefault()
+            # To prevent removing the contact when dropped where it has been dragged,
+            # we must set dropEffect to 'none'
+            # if Chrome, we can only access types of data, not data themselves
+            # In Chrome, types are an array; in Firefox, a DOMStringList
+            types = Array.prototype.slice.call(event.dataTransfer.types)
+            if types.indexOf(@props.id) is -1
+                event.dataTransfer.dropEffect = 'move'
+            else
+                event.dataTransfer.dropEffect = 'none'
 
         div
             className: className,

    onDrop: (event) ->
        event.preventDefault()
        event.stopPropagation()
        {name, address} = JSON.parse(event.dataTransfer.getData 'text')
        address =
            name    : name
            address : address
        @state.known.push address
        @props.valueLink.requestChange @state.known
        @setState unknown: '', contacts: null, open: false

        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
