what's the purpose of this function?