first abstraction setup