some functions must be kept hidden