change private to protected, so it'll easy to extend