use .map() as far as possible