cleanup needs a transaction