Lots of updates for streams. Adding 2 new abstractions to avoid duplicated logic. Also added a utilities file for other duplicated logic.