further refactor 2