A protocol in which a transaction manager asks all participating resource managers for a vote on whether changes should be committed, then records these votes in a durable log, and then communicates to all resource managers to commit or back-out the changes. In the event of failure, the durable log is used to reconcile any resource managers who were not given the final message to commit or back-out.