moved entirely to using streams