do not use self executing function