more variable abstraction