What I don't like about this is that every call then has to access a semaphore to get a copy through resource. Currently, Distribute makes copies (and its jobs go through resource), but later stages (like stream calling projectUpdate) don't have to go through resource to do the function calls.