added softCommit support

Should we assert that `commit` and `softCommit` are not set at the same time?