recursively do it