refactor & update