recursive commit