functional version, 1000 apologies