abstract + transformation