#14 refactor encoding implementation (10)