refactor payload controllers, better support for decoding