adding high level abstraction