implemented rollback