removed protected fields, created virtual methods that can be overridden
removed protected fields, created virtual methods that can be overridden