Add transaction callback + cleanup