change from protected abstract to private