all internal functions protected -> public to promote code reuse