refactor for common abstracts