#14 refactor encoding implementation (4)