increasing abstraction