It might be implied here, but I wonder if it'd be better to be explicit about what happens to broadcast streams. Any events they send before concat() starts listening to them will not be sent to the concat stream. This behavior might be fine, though you could also either only accept non-broadcast streams or buffer non-broadcast streams (making the assumption that non-broadcast streams already buffer). It might be good to get an opinion from the core library authors.