Split main loop of give() into two