                   {result, opts}  = self._prepareUpload _.extend(opts, _continueUpload), user.userId, 'HTTP'
 
                   if opts.eof
-                    Meteor.wrapAsync(self._handleUpload.bind(self, result, opts))()
-                    response.writeHead 200
-                    result.file.meta = fixJSONStringify result.file.meta if result?.file?.meta
-                    response.end JSON.stringify result
+                    self._handleUpload result, opts, ->
+                      response.writeHead 200
+                      result.file.meta = fixJSONStringify result.file.meta if result?.file?.meta
+                      response.end JSON.stringify result
+                      return
+                    return
                   else
                     self.emit '_handleUpload', result, opts, NOOP
 

        return

      @_createStream = (_id, path, opts) ->
        return self._currentUploads[_id] = new writeStream path, opts.fileLength, opts

      # This little function allows to continue upload
      # even after server is restarted (*not on dev-stage*)
      @_continueUpload = (_id) ->
        if self._currentUploads?[_id]?.file
          unless self._currentUploads[_id].stream._writableState.ended
            return self._currentUploads[_id].file
          else
            self._createStream _id, self._currentUploads[_id].file.file.path, self._currentUploads[_id].file

    @returns {Boolean} - True if stream is fulfilled, false if queue is in progress
    ###
    end: (callback) ->
      if not @aborted and not @ended
        if @writtenChunks is @maxLength
          self = @
          fs.close @fd, -> bound ->
            self.ended = true
            callback and callback()
            return
          return true
        else
          self = @
