refactor package structure to represent different language implementation