all done and prepare for refactoring