Peter, thank you for your review. Actually, you're totally right - that was my initial motivation: to provide better interface for 'block-stream'. I agree we don't have to mix stream and copy within single API call.Current implementation of virDomainBlockPull is actually a subset of virDomainBlockRebase with NULL base. I suggest to add new generalised API call virDomainBlockRebase2 which will serve as a superset of both and support params list. Having params list is more flexible and extendible for future possible improvements of qemu block-stream or block-copy.Could you please outline your motivations to do this besides the last paragraph? I'm asking because I personally think that virDomainBlockRebase trying to "magically" do either block-stream or block-copy was a mistake. The mistake was partially rectified by having virDomainBlockCopy as the proper endpoint for block-copy/blockdev-mirror. We do lack a fully-featured interface for 'block-stream' (to do intermediate layer pull) but I don't think the fix for it is to have once again a API that does both.