no need for intermediate message objects