streams work but need to clean up and refactor