encapsulate function