Move to a purely stream based implementation