a little more structure and a little more functions for conversion