refactor before release 1.0