more abstraction + advise before/after