cleaning up abstraction