I totally agree with Havoc here. I would add that it important to have both a 'transparent' (everything can be treated as local) and an 'i-know-this-is-damn-slow' api in any general purpose abstraction like this. There will always be applications where a streaming API is needed (such as progressive rendering) and even worse, both APIs may be needed by the same app. Rich.