#14 refactor encoding implementation (5)