refactor abstract item