       @options.out?(e, e.currentTarget, typesForDataTransfer(dataTransfer))
 
   _handleDragstart: normalizeEventCallback (e, dataTransfer) ->
+    draggedElement = e.target
+
+    return if !draggedElement
+
     dataTransfer?.effectAllowed = "move"
 
-    @$el.on("dragend", @options.itemSelector, $.proxy(this, "_handleDragend"))
-
-    @_elements = [e.currentTarget]
+    @$el.on("dragend", $.proxy(this, "_handleDragend"))
+    @_elements = [draggedElement]
+
     @_addElementsForEvent(e, dataTransfer)
 
     activeSession = new SortableSession(@_elements)

            clientPosition: e.originalEvent.clientX
          }

        rect = currentTarget.getBoundingClientRect()

        position = currentTarget.compareDocumentPosition(@placeholder) if @placeholder
        if !@placeholder || position & Node.DOCUMENT_POSITION_DISCONNECTED
          if (rect[directionals.before] - directionals.clientPosition + @options.tolerance) >= 0
            @_flip(e, dataTransfer, "before")
          else if (rect[directionals.after] - directionals.clientPosition - @options.tolerance) <= 0
            @_flip(e, dataTransfer, "after")
        else if position & Node.DOCUMENT_POSITION_FOLLOWING
          if (rect[directionals.before] - directionals.clientPosition + @options.tolerance) >= 0
            @_flip(e, dataTransfer, "before")
        else if position & Node.DOCUMENT_POSITION_PRECEDING
          if (rect[directionals.after] - directionals.clientPosition - @options.tolerance) <= 0
            @_flip(e, dataTransfer, "after")

  _flip: (e, dataTransfer, keyword) ->
    @_boot()

    @options.over?(e, e.currentTarget, typesForDataTransfer(dataTransfer))

    if !@placeholder
      @placeholder = @options.placeholder(e, @_elements.length)
      $(@placeholder).on("drop", $.proxy(this, "_handleDrop"))
      $(@placeholder).on "dragover", (e) ->
        e.preventDefault()
    else
      $(@placeholder).detach()

    $(e.currentTarget)[keyword](@placeholder)

    if config("activeSession")?.valid(dataTransfer)
      session = config("activeSession")

    @options.insertPlaceholder?(@placeholder, @_elements, session)
    e.stopPropagation()

module.exports = Sortable

  enable: ->
    unless @enabled
      @$el.on "dragstart", @options.itemSelector, $.proxy(this, "_handleDragstart")
      @$el.on "dragover", $.proxy(this, "_handleDragover")
      @enabled = true

  disable: ->
    if @enabled
      @$el.off "dragstart", @options.itemSelector, @_handleDragstart
      @$el.off "dragover", @_handleDragover
      @enabled = false
      $(@placeholder).detach() if @placeholder

