use TransactionFactory where appropriate