add transactional utility