add detach callback