recursive cleanup update