just one more layer of abstraction should do!