self has to be public