roll back logic can't really be simplified