omitted useless function