     try
       event.dataTransfer.setData 'text/plain', null
 
-    @draggedItem = event.target
-    @clearSelection()
-    @addToSelection @draggedItem
+    if @selectedItems.indexOf(event.target) == -1
+      @clearSelection()
+      @addToSelection event.target
+
     true
 
   _getDropInfo: (event) ->
     element = event.target
 
-    return { target: element.lastChild, where: 'below' } if element == @treeRoot
+    return { target: element.lastChild, where: 'below' } if element == @_treeRoot
 
     while element.tagName != 'LI' or (! element.classList.contains('item') and ! element.classList.contains('group'))
-      return null if element == @treeRoot
+      return null if element == @_treeRoot
       element = element.parentElement
 
     where = @_getInsertionPoint element, event.pageY

    element

  remove: (element) ->
    @draggedItem = null if @draggedItem == element

    selectedIndex = @selectedItems.indexOf element
    @selectedItems.splice selectedIndex, 1 if selectedIndex != -1

    if element.classList.contains 'group'
      childrenElement = element.nextSibling

      while removedSelectedItems.length > 0
        removedSelectedItem = removedSelectedItems[removedSelectedItems.length - 1]
        @selectedItems.splice @selectedItems.indexOf(removedSelectedItem), 1
        if @_firstSelectedItem == removedSelectedItem
          @_firstSelectedItem = @selectedItems[0]

      element.parentElement.removeChild childrenElement

