control abstraction