use explict function keyword to avoid redefine error