refactor && changes