high-level abstractions