         file.status = Dropzone.ACCEPTED
         file.accepted = true # Backwards compatibility
 
-        if @options.enqueueForUpload
-          file.status = Dropzone.QUEUED
-          @processQueue()
+        @enqueueFile file if @options.enqueueForUpload
+
+  enqueueFile: (file) ->
+    if file.status == Dropzone.ACCEPTED
+      file.status = Dropzone.QUEUED
+      setTimeout (=> @processQueue()), 1 # Deferring the call
+    else
+      throw new Error "This file can't be queued because it has already been processed or was rejected."
 
   # Used to read a directory, and call addFile() with every file found.
   addDirectory: (entry, path) ->

      unless 200 <= xhr.status < 300
        handleError()
      else
        @finished file, response, e

    xhr.onerror = =>
      return if file.status == Dropzone.CANCELED
      handleError()

    # Some browsers do not have the .upload property

    method: "post"
    withCredentials: no
    parallelUploads: 2
    uploadMultiple: no # Whether to send multiple files in one request.
    maxFilesize: 256 # in MB
    paramName: "file" # The name of the file param that gets transferred.
    createImageThumbnails: true
