this function could be a static function.