Adding different layers of abstraction