splitted into private and public stuff