use self syntax rather than prototype