learn how to encapsulate this