some update and refactor