reinventing abstraction