move notify* logic into transact*