adding double abstraction