please use private visibility by default (if it is protected, we have to maintain compatibility over them because they become extension points)