rollback used only when needed