add setcallback