more refactor :D