use a stack of callbacks