 
     @_cleanUp()
 
+  _handleWindowMouseout: normalizeEventCallback (e, dataTransfer) ->
+    $(@el).removeClass(@options.hoverClass) if @options.hoverClass
+    @options.out?(e, @el, typesForDataTransfer(dataTransfer))
+    @_cleanUp()
+
   _handleDragleave: normalizeEventCallback (e, dataTransfer) ->
     if window.getComputedStyle(e.target)["pointer-events"] != "none"
       $(e.currentTarget).removeClass(@options.hoverClass) if @options.hoverClass

  _cleanUp: ->
    @$el.off "drop", @options.selector, @_handleDrop
    @$el.off "dragleave", @options.selector, @_handleDragleave
    @$el.off "dragover", @options.selector, @_handleDragover
    @isBound = false


      unless @isBound
        @$el.on "drop", @options.selector, $.proxy(this, "_handleDrop")
        @$el.on "dragleave", @options.selector, $.proxy(this, "_handleDragleave")
        $(window).on "mouseout", $.proxy(this, "_handleWindowMouseout")
        @$el.on "dragover", @options.selector, $.proxy(this, "_handleDragover")
        @isBound = true

