more robust recursive delete