change private to protected to enable subclassing