add a streaming implementation