playing around with some async stuff
refactoring the stream stuff into its own class