abstract redone (again)