#14 refactor encoding implementation (2)