changing to more abstraction