Adapted to use abstract