internal functions now static