refactor core abstractions