         (cb) ->
             # dump range of snapshots
             start = if opts.dest.version then "-i #{f}@#{opts.dest.version}" else ""
+            clean_up = true
             execute_on
                 host    : opts.source.host
                 command : "sudo zfs send -RD #{start} #{f}@#{opts.source.version} | lz4c -  > #{tmp}"
                 cb      : (err, output) ->
                     winston.debug(output)
+                    if output.stderr
+                        err = output.stderr
                     cb(err)
         (cb) ->
             # scp to destination

                command : "cat #{tmp} | lz4c -d - | sudo zfs recv #{force} #{f}; rm #{tmp}"
                cb      : (err, output) ->
                    winston.debug(output)
                    cb(err)
    ], (err) ->
        # remove the lock file
        execute_on
            host    : opts.source.host
            command : "rm #{tmp}"
            cb      : (err) ->
                opts.cb?(err)
    )



        force      : true
        cb         : undefined

    if opts.source.version == opts.dest.version
        # trivial special case
        opts.cb()
        return

    tmp = "/home/storage/.storage-#{opts.project_id}-src-#{opts.source.host}-#{opts.source.version}-dest-#{opts.dest.host}-#{opts.dest.version}"
    f = filesystem(opts.project_id)
    clean_up = false
    async.series([
        (cb) ->
            # check for already-there dump file
