seems it's better to make this function private