terminal abstraction