please use the private visibility by default (we use protected only in places where we want to provide a supported extension point for child classes)