un-exported many things to make the API more simple