add callbacks (wip)