use transaction api internally

since we hopefully fixed the transaction api wrapping issues, this is another try to re-apply those old changes