Don't like the name, because by "local", I though it was the actual local protocol, but it is your MemoryProtocol that is in fact the local one. This class could be "ProtocolBranching" or something like that and then pass a predicate for possible branches? Just my 2 cents :)