#14 refactor encoding implementation (11)