follow related function is done. but need refactoring