// refactorization