trying to create layers of abstraction