support diy before callback