feature 001: do some refactoring