recursive updates