refactor
extract abstracts