clean up abstraction