further refactor 3