refactor and goodI