separating public stuff from implementation