updated to use Stream.empty()