virgin need refactor