Uses private functions and protected properties