finished the passing abstract implementation