refactoring for abstract and helpers