updated with streams