only clean if needed