refactore sub function