cleaning
refactor abstract